1/23 操舵 レシーバ
Dependencies: ADXL345_I2C INA226_ver1 mbed
Fork of RS485R_2 by
main.cpp
- Committer:
- taurin
- Date:
- 2016-01-23
- Revision:
- 3:2bdb60bbc665
- Parent:
- 2:2b98a651b0a1
File content as of revision 3:2bdb60bbc665:
//翼端操舵プログラム #include "mbed.h" #include "ADXL345_I2C.h" #include "INA226.hpp" #define BUFFER 30 Serial rs485(p13,p14); Serial pc(USBTX,USBRX); DigitalOut Receiver(p5); ADXL345_I2C accelerometer(p9, p10); I2C ina226_i2c(p28,p27); INA226 VCmonitor(ina226_i2c); PwmOut servo1(p21); PwmOut servo2(p22); int counter = 0; int eruron_deg = 0; int drug_deg = 0; unsigned short ina_val; double V,C; int acc[3] = {0,0,0}; void rs485_rx() { signed char rec_data = rs485.getc(); switch(rec_data) { case 'A': eruron_deg = rs485.getc(); break; case 'B': drug_deg = rs485.getc(); break; case 'C': Receiver = 1; wait_ms(1); rs485.putc('X'); rs485.putc((signed char)acc[0]); rs485.putc('Y'); rs485.putc((signed char)acc[1]); rs485.putc('Z'); rs485.putc((signed char)acc[2]); rs485.putc('V'); rs485.putc((signed char)V); rs485.putc('I'); rs485.putc((signed char)C); wait_ms(2); Receiver = 0; break; default: wait_us(5); } } void init() { Receiver = 0; pc.printf("Receiver\n\r"); rs485.baud(38400); rs485.attach(rs485_rx, Serial::RxIrq); servo1.period_ms(20); servo2.period_ms(20); accelerometer.setPowerControl(0x00); accelerometer.setDataFormatControl(0x0B); accelerometer.setDataRate(ADXL345_3200HZ); accelerometer.setPowerControl(0x08); if(!VCmonitor.isExist()){ pc.printf("VCmonitor NOT FOUND\n"); } ina_val = 0; if(VCmonitor.rawRead(0x00,&ina_val) != 0){ pc.printf("VCmonitor READ ERROR\n"); while(1){} } VCmonitor.setCurrentCalibration(); } void updateDatas(){ accelerometer.getOutput(acc); int tmp = VCmonitor.getVoltage(&V); tmp = VCmonitor.getCurrent(&C); } double calcPulse(int deg){ return (0.00093+(deg/180.0)*(0.00235-0.00077)); } void WriteServo(){ servo1.pulsewidth(calcPulse(eruron_deg)); servo2.pulsewidth(calcPulse(drug_deg)); } void toStringDatas(){ pc.printf("acc[0]:%i acc[1]:%i acc[2]:%i\r\n",acc[0],acc[1],acc[2]); pc.printf("V:%i C:%i\r\n",V,C); pc.printf("\r\n"); } int main() { init(); while(1) { updateDatas(); WriteServo(); toStringDatas(); wait_ms(10); } }