
STM32F303K8T6でCANにFloatを送信するためのプログラム
Dependencies: mbed
Revision 0:acfa22f2dc3a, committed 2020-07-30
- Comitter:
- sashida_h
- Date:
- Thu Jul 30 10:34:13 2020 +0000
- Commit message:
- initial commit
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r acfa22f2dc3a main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jul 30 10:34:13 2020 +0000 @@ -0,0 +1,109 @@ +/* +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); + } +} \ No newline at end of file
diff -r 000000000000 -r acfa22f2dc3a mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Jul 30 10:34:13 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file