加速度計まで実装した相互通信動くやつ、レシーバー

Dependencies:   ADXL345_I2C mbed INA226

Fork of RS485R_2 by hiroya taura

Committer:
YusukeWakuta
Date:
Thu Dec 31 17:28:18 2015 +0000
Revision:
4:dbe62d9b6087
Parent:
3:8e73f0779dc5
Child:
5:9e817c18440a
1230??????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taurin 0:fafac0045ad3 1 //相互通信確認用
taurin 0:fafac0045ad3 2 #include "mbed.h"
taurin 1:563b7d0b896f 3 #include "ADXL345_I2C.h"
YusukeWakuta 3:8e73f0779dc5 4 #include "INA226.hpp"
taurin 0:fafac0045ad3 5 #define BUFFER 30
taurin 0:fafac0045ad3 6
taurin 1:563b7d0b896f 7 Serial rs485(p13,p14);
taurin 0:fafac0045ad3 8 Serial pc(USBTX,USBRX);
taurin 0:fafac0045ad3 9 DigitalOut Receiver(p5);
taurin 1:563b7d0b896f 10 ADXL345_I2C accelerometer(p9, p10);
taurin 0:fafac0045ad3 11 PwmOut servo1(p21);
taurin 0:fafac0045ad3 12 PwmOut servo2(p22);
YusukeWakuta 3:8e73f0779dc5 13 I2C i2c_Ina(p28,p27);
YusukeWakuta 3:8e73f0779dc5 14 INA226 Ina226(i2c_Ina);
YusukeWakuta 3:8e73f0779dc5 15
taurin 0:fafac0045ad3 16
taurin 0:fafac0045ad3 17 int counter = 0;
taurin 0:fafac0045ad3 18 int servo_deg1 = 0;
taurin 0:fafac0045ad3 19 int servo_deg2 = 0;
YusukeWakuta 3:8e73f0779dc5 20 double *Voltage;
YusukeWakuta 3:8e73f0779dc5 21 double *Current;
taurin 0:fafac0045ad3 22
taurin 1:563b7d0b896f 23 int acc[3] = {0,0,0};
taurin 1:563b7d0b896f 24
taurin 0:fafac0045ad3 25 void rs485_rx()
taurin 0:fafac0045ad3 26 {
taurin 2:2b98a651b0a1 27 signed char rec_data = rs485.getc();
taurin 1:563b7d0b896f 28 switch(rec_data) {
taurin 1:563b7d0b896f 29 case 'A':
taurin 1:563b7d0b896f 30 servo_deg1 = rs485.getc();
taurin 1:563b7d0b896f 31 pc.printf("counter1:%d\n\r",servo_deg1);
taurin 1:563b7d0b896f 32 break;
taurin 1:563b7d0b896f 33 case 'B':
taurin 1:563b7d0b896f 34 servo_deg2 = rs485.getc();
taurin 2:2b98a651b0a1 35 //pc.printf("counter2:%d\n\r",servo_deg2);
taurin 1:563b7d0b896f 36 break;
taurin 1:563b7d0b896f 37 case 'C':
taurin 1:563b7d0b896f 38 Receiver = 1;
YusukeWakuta 4:dbe62d9b6087 39 wait_us(500);
taurin 1:563b7d0b896f 40 rs485.putc('X');
taurin 2:2b98a651b0a1 41 rs485.putc((signed char)acc[0]);
taurin 1:563b7d0b896f 42 rs485.putc('Y');
taurin 2:2b98a651b0a1 43 rs485.putc((signed char)acc[1]);
taurin 1:563b7d0b896f 44 rs485.putc('Z');
taurin 2:2b98a651b0a1 45 rs485.putc((signed char)acc[2]);
YusukeWakuta 3:8e73f0779dc5 46 rs485.putc('V');
YusukeWakuta 3:8e73f0779dc5 47 rs485.putc((signed char)*Voltage);
YusukeWakuta 3:8e73f0779dc5 48 rs485.putc('C');
YusukeWakuta 3:8e73f0779dc5 49 rs485.putc((signed char)*Current);
taurin 2:2b98a651b0a1 50 // rs485.printf("X%iY%iZ%i\n\r",(short)acc[0],(short)acc[1],(short)acc[2]);
taurin 1:563b7d0b896f 51 wait_ms(2);
taurin 1:563b7d0b896f 52 Receiver = 0;
taurin 2:2b98a651b0a1 53 //pc.printf("x:%d,y:%d,z:%d\n\r",(signed char)acc[0],(signed char)acc[1],(signed char)acc[2]);
taurin 1:563b7d0b896f 54 break;
taurin 1:563b7d0b896f 55 default:
taurin 1:563b7d0b896f 56 wait_us(5);
taurin 1:563b7d0b896f 57 pc.printf("%d\n\r",rec_data);
taurin 0:fafac0045ad3 58 }
taurin 0:fafac0045ad3 59 }
taurin 0:fafac0045ad3 60
taurin 1:563b7d0b896f 61 void init()
taurin 1:563b7d0b896f 62 {
taurin 1:563b7d0b896f 63 Receiver = 0;
taurin 1:563b7d0b896f 64 pc.printf("Receiver\n\r");
taurin 1:563b7d0b896f 65
taurin 1:563b7d0b896f 66 rs485.baud(38400);
taurin 1:563b7d0b896f 67 rs485.attach(rs485_rx, Serial::RxIrq);
taurin 1:563b7d0b896f 68
taurin 1:563b7d0b896f 69 servo1.period_ms(20);
taurin 1:563b7d0b896f 70 servo2.period_ms(20);
taurin 1:563b7d0b896f 71
taurin 1:563b7d0b896f 72 accelerometer.setPowerControl(0x00);
taurin 1:563b7d0b896f 73 accelerometer.setDataFormatControl(0x0B);
taurin 1:563b7d0b896f 74 accelerometer.setDataRate(ADXL345_3200HZ);
taurin 1:563b7d0b896f 75 accelerometer.setPowerControl(0x08);
taurin 1:563b7d0b896f 76 }
taurin 1:563b7d0b896f 77
YusukeWakuta 3:8e73f0779dc5 78 void INA226(double *Voltage,double *Current){
YusukeWakuta 3:8e73f0779dc5 79 if(Ina226.isExist() == 0){
YusukeWakuta 3:8e73f0779dc5 80 Ina226.getVoltage(Voltage);
YusukeWakuta 3:8e73f0779dc5 81 Ina226.getCurrent(Current);
YusukeWakuta 3:8e73f0779dc5 82 }
YusukeWakuta 3:8e73f0779dc5 83 }
YusukeWakuta 3:8e73f0779dc5 84
taurin 0:fafac0045ad3 85 int main()
taurin 0:fafac0045ad3 86 {
YusukeWakuta 3:8e73f0779dc5 87 rs485.baud(14400);
taurin 1:563b7d0b896f 88 init();
taurin 1:563b7d0b896f 89 while(1) {
taurin 1:563b7d0b896f 90 accelerometer.getOutput(acc);
taurin 0:fafac0045ad3 91 servo1.pulsewidth(0.00093 + (servo_deg1 / 180.0) * (0.00235 - 0.00077));
taurin 0:fafac0045ad3 92 servo2.pulsewidth(0.00093 + (servo_deg2 / 180.0) * (0.00235 - 0.00077));
taurin 2:2b98a651b0a1 93 wait_ms(10);
taurin 0:fafac0045ad3 94 }
taurin 0:fafac0045ad3 95 }