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

Dependencies:   ADXL345_I2C mbed INA226

Fork of RS485R_2 by hiroya taura

Committer:
YusukeWakuta
Date:
Sat Jan 02 12:18:27 2016 +0000
Revision:
6:f4c149a72dfb
Parent:
5:9e817c18440a
?????10?????????????????????

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();
YusukeWakuta 5:9e817c18440a 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':
YusukeWakuta 5:9e817c18440a 38
YusukeWakuta 6:f4c149a72dfb 39 //counter++;
YusukeWakuta 6:f4c149a72dfb 40 // if(counter > 1000){
YusukeWakuta 6:f4c149a72dfb 41 // counter = 0;
YusukeWakuta 6:f4c149a72dfb 42 // }
taurin 1:563b7d0b896f 43 Receiver = 1;
YusukeWakuta 5:9e817c18440a 44 wait_ms(3);
YusukeWakuta 6:f4c149a72dfb 45 // if(counter % 2 == 0){
YusukeWakuta 5:9e817c18440a 46 rs485.putc('X');
YusukeWakuta 5:9e817c18440a 47 // pc.printf("X");
taurin 2:2b98a651b0a1 48 rs485.putc((signed char)acc[0]);
YusukeWakuta 5:9e817c18440a 49 //pc.printf("%5d",(signed char)acc[0]);
taurin 1:563b7d0b896f 50 rs485.putc('Y');
YusukeWakuta 5:9e817c18440a 51 //pc.printf("Y");
taurin 2:2b98a651b0a1 52 rs485.putc((signed char)acc[1]);
YusukeWakuta 5:9e817c18440a 53 // pc.printf("%5d",(signed char)acc[1]);
taurin 1:563b7d0b896f 54 rs485.putc('Z');
YusukeWakuta 5:9e817c18440a 55 //pc.printf("Z");
taurin 2:2b98a651b0a1 56 rs485.putc((signed char)acc[2]);
YusukeWakuta 6:f4c149a72dfb 57 //}
YusukeWakuta 6:f4c149a72dfb 58 // else{
YusukeWakuta 5:9e817c18440a 59 // pc.printf("%5d",(signed char)acc[2]);
YusukeWakuta 3:8e73f0779dc5 60 rs485.putc('V');
YusukeWakuta 5:9e817c18440a 61 // pc.printf("V");
YusukeWakuta 3:8e73f0779dc5 62 rs485.putc((signed char)*Voltage);
YusukeWakuta 5:9e817c18440a 63 // pc.printf("%5d",(signed char)*Voltage);
YusukeWakuta 3:8e73f0779dc5 64 rs485.putc('C');
YusukeWakuta 5:9e817c18440a 65 //pc.printf("C");
YusukeWakuta 3:8e73f0779dc5 66 rs485.putc((signed char)*Current);
YusukeWakuta 5:9e817c18440a 67 //pc.printf("%5d",(signed char)*Current);
YusukeWakuta 6:f4c149a72dfb 68 //}
YusukeWakuta 5:9e817c18440a 69 //pc.printf("\n\r");
taurin 2:2b98a651b0a1 70 // rs485.printf("X%iY%iZ%i\n\r",(short)acc[0],(short)acc[1],(short)acc[2]);
YusukeWakuta 6:f4c149a72dfb 71 wait_ms(15);
taurin 1:563b7d0b896f 72 Receiver = 0;
taurin 2:2b98a651b0a1 73 //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 74 break;
taurin 1:563b7d0b896f 75 default:
taurin 1:563b7d0b896f 76 wait_us(5);
YusukeWakuta 5:9e817c18440a 77 // pc.printf("%d\n\r",rec_data);
taurin 0:fafac0045ad3 78 }
taurin 0:fafac0045ad3 79 }
taurin 0:fafac0045ad3 80
taurin 1:563b7d0b896f 81 void init()
taurin 1:563b7d0b896f 82 {
taurin 1:563b7d0b896f 83 Receiver = 0;
taurin 1:563b7d0b896f 84 pc.printf("Receiver\n\r");
taurin 1:563b7d0b896f 85
taurin 1:563b7d0b896f 86 rs485.baud(38400);
taurin 1:563b7d0b896f 87 rs485.attach(rs485_rx, Serial::RxIrq);
taurin 1:563b7d0b896f 88
taurin 1:563b7d0b896f 89 servo1.period_ms(20);
taurin 1:563b7d0b896f 90 servo2.period_ms(20);
taurin 1:563b7d0b896f 91
taurin 1:563b7d0b896f 92 accelerometer.setPowerControl(0x00);
taurin 1:563b7d0b896f 93 accelerometer.setDataFormatControl(0x0B);
taurin 1:563b7d0b896f 94 accelerometer.setDataRate(ADXL345_3200HZ);
taurin 1:563b7d0b896f 95 accelerometer.setPowerControl(0x08);
taurin 1:563b7d0b896f 96 }
taurin 1:563b7d0b896f 97
YusukeWakuta 3:8e73f0779dc5 98 void INA226(double *Voltage,double *Current){
YusukeWakuta 3:8e73f0779dc5 99 if(Ina226.isExist() == 0){
YusukeWakuta 3:8e73f0779dc5 100 Ina226.getVoltage(Voltage);
YusukeWakuta 3:8e73f0779dc5 101 Ina226.getCurrent(Current);
YusukeWakuta 3:8e73f0779dc5 102 }
YusukeWakuta 3:8e73f0779dc5 103 }
YusukeWakuta 3:8e73f0779dc5 104
taurin 0:fafac0045ad3 105 int main()
taurin 0:fafac0045ad3 106 {
taurin 1:563b7d0b896f 107 init();
taurin 1:563b7d0b896f 108 while(1) {
taurin 1:563b7d0b896f 109 accelerometer.getOutput(acc);
taurin 0:fafac0045ad3 110 servo1.pulsewidth(0.00093 + (servo_deg1 / 180.0) * (0.00235 - 0.00077));
taurin 0:fafac0045ad3 111 servo2.pulsewidth(0.00093 + (servo_deg2 / 180.0) * (0.00235 - 0.00077));
taurin 2:2b98a651b0a1 112 wait_ms(10);
taurin 0:fafac0045ad3 113 }
taurin 0:fafac0045ad3 114 }