STM32F303K8T6でCANにFloatを送信するためのプログラム
Dependencies: mbed
main.cpp
- Committer:
- sashida_h
- Date:
- 2020-07-30
- Revision:
- 0:acfa22f2dc3a
File content as of revision 0:acfa22f2dc3a:
/* CAN通信master側 2種類のIDで送信する. rd - RXD td - TXD MCP2551まわりは以下参照(終端Rは410ohmを使った,そこにあったので) https://raw.githubusercontent.com/rummanwaqar/teensy_can/master/schematic.png */ #include "mbed.h" Serial pc(PA_9, PA_10, 115200); //pin19,20 TX,RX CAN can(PA_11, PA_12,100000); //pin21,22 rd,td DigitalOut myled(PB_1); //pin15 Ticker ticker; CANMessage msg; AnalogIn L1(PA_0); AnalogIn L2(PA_1); AnalogIn L3(PA_3); AnalogIn L4(PA_4); AnalogIn L5(PA_5); union Float2Byte{ float _float; char _byte[4]; }; typedef union Float2Byte Float2Byte; void send(float senddata,int id){ //pc.printf("Master send()\n\r"); /*ID: 0x01*/ Float2Byte sendFloat; sendFloat._float = senddata; //ここに送りたい値を入れる. char serialData[4]; for(int i=0;i<4;++i){ serialData[i] = sendFloat._byte[i]; //pc.printf("send_char: %d\n\r", serialData[i]); } //pc.printf("sendFloat: %f\n\r", sendFloat._float); if(can.write(CANMessage(id, serialData, 4))){ pc.printf("Send.\n\r"); } myled = !myled; } void receive(){ Float2Byte getFloat; if(can.read(msg)){ /*ID: 0x01*/ if(msg.id == 0x01){ //pc.printf("ID: 0x01\n\r"); for(int i=0;i<4;++i){ getFloat._byte[i] = msg.data[i]; //pc.printf("get_char: %d\n\r", getFloat._byte[i]); } pc.printf("%.2f\r\n", getFloat._float); myled = !myled; } /*ID: 0x02*/ if(msg.id == 0x02){ //pc.printf("ID: 0x02\n\r"); for(int i=0;i<4;++i){ getFloat._byte[i] = msg.data[i]; //pc.printf("get_char: %d\n\r", getFloat._byte[i]); } pc.printf("avarage: %.0f\n\r", getFloat._float); myled = !myled; } } } int main(){ float meas_r[5]; float meas_v[5]; float sum = 0.0; int i; pc.printf("Master_start.\n\r"); //ticker.attach(&send, 1); can.attach(receive, CAN::RxIrq); while(1) { sum = 0.0; meas_r[0] = L1.read(); meas_r[1] = L2.read(); meas_r[2] = L3.read(); meas_r[3] = L4.read(); meas_r[4] = L5.read(); for(i=0;i<5;i++){ meas_v[i] = meas_r[i] * 3300; // Converts value in the 0V-3.3V range //pc.printf("%d:%.0f,", i+1,meas_v[i]); //send(meas_v[i],0x01); sum += meas_v[i]; //wait(0.05); } wait(0.1); pc.printf("%.0f\r\n",sum/5.0); send(0,0x01); } }