STM32F303K8T6でCANにFloatを送信するためのプログラム
Dependencies: mbed
main.cpp@0:acfa22f2dc3a, 2020-07-30 (annotated)
- Committer:
- sashida_h
- Date:
- Thu Jul 30 10:34:13 2020 +0000
- Revision:
- 0:acfa22f2dc3a
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sashida_h | 0:acfa22f2dc3a | 1 | /* |
sashida_h | 0:acfa22f2dc3a | 2 | CAN通信master側 |
sashida_h | 0:acfa22f2dc3a | 3 | 2種類のIDで送信する. |
sashida_h | 0:acfa22f2dc3a | 4 | rd - RXD |
sashida_h | 0:acfa22f2dc3a | 5 | td - TXD |
sashida_h | 0:acfa22f2dc3a | 6 | MCP2551まわりは以下参照(終端Rは410ohmを使った,そこにあったので) |
sashida_h | 0:acfa22f2dc3a | 7 | https://raw.githubusercontent.com/rummanwaqar/teensy_can/master/schematic.png |
sashida_h | 0:acfa22f2dc3a | 8 | */ |
sashida_h | 0:acfa22f2dc3a | 9 | #include "mbed.h" |
sashida_h | 0:acfa22f2dc3a | 10 | |
sashida_h | 0:acfa22f2dc3a | 11 | Serial pc(PA_9, PA_10, 115200); //pin19,20 TX,RX |
sashida_h | 0:acfa22f2dc3a | 12 | CAN can(PA_11, PA_12,100000); //pin21,22 rd,td |
sashida_h | 0:acfa22f2dc3a | 13 | DigitalOut myled(PB_1); //pin15 |
sashida_h | 0:acfa22f2dc3a | 14 | Ticker ticker; |
sashida_h | 0:acfa22f2dc3a | 15 | |
sashida_h | 0:acfa22f2dc3a | 16 | CANMessage msg; |
sashida_h | 0:acfa22f2dc3a | 17 | |
sashida_h | 0:acfa22f2dc3a | 18 | AnalogIn L1(PA_0); |
sashida_h | 0:acfa22f2dc3a | 19 | AnalogIn L2(PA_1); |
sashida_h | 0:acfa22f2dc3a | 20 | AnalogIn L3(PA_3); |
sashida_h | 0:acfa22f2dc3a | 21 | AnalogIn L4(PA_4); |
sashida_h | 0:acfa22f2dc3a | 22 | AnalogIn L5(PA_5); |
sashida_h | 0:acfa22f2dc3a | 23 | |
sashida_h | 0:acfa22f2dc3a | 24 | union Float2Byte{ |
sashida_h | 0:acfa22f2dc3a | 25 | float _float; |
sashida_h | 0:acfa22f2dc3a | 26 | char _byte[4]; |
sashida_h | 0:acfa22f2dc3a | 27 | }; |
sashida_h | 0:acfa22f2dc3a | 28 | typedef union Float2Byte Float2Byte; |
sashida_h | 0:acfa22f2dc3a | 29 | |
sashida_h | 0:acfa22f2dc3a | 30 | void send(float senddata,int id){ |
sashida_h | 0:acfa22f2dc3a | 31 | //pc.printf("Master send()\n\r"); |
sashida_h | 0:acfa22f2dc3a | 32 | |
sashida_h | 0:acfa22f2dc3a | 33 | /*ID: 0x01*/ |
sashida_h | 0:acfa22f2dc3a | 34 | Float2Byte sendFloat; |
sashida_h | 0:acfa22f2dc3a | 35 | sendFloat._float = senddata; |
sashida_h | 0:acfa22f2dc3a | 36 | //ここに送りたい値を入れる. |
sashida_h | 0:acfa22f2dc3a | 37 | |
sashida_h | 0:acfa22f2dc3a | 38 | char serialData[4]; |
sashida_h | 0:acfa22f2dc3a | 39 | for(int i=0;i<4;++i){ |
sashida_h | 0:acfa22f2dc3a | 40 | serialData[i] = sendFloat._byte[i]; |
sashida_h | 0:acfa22f2dc3a | 41 | //pc.printf("send_char: %d\n\r", serialData[i]); |
sashida_h | 0:acfa22f2dc3a | 42 | } |
sashida_h | 0:acfa22f2dc3a | 43 | //pc.printf("sendFloat: %f\n\r", sendFloat._float); |
sashida_h | 0:acfa22f2dc3a | 44 | if(can.write(CANMessage(id, serialData, 4))){ |
sashida_h | 0:acfa22f2dc3a | 45 | pc.printf("Send.\n\r"); |
sashida_h | 0:acfa22f2dc3a | 46 | } |
sashida_h | 0:acfa22f2dc3a | 47 | |
sashida_h | 0:acfa22f2dc3a | 48 | |
sashida_h | 0:acfa22f2dc3a | 49 | myled = !myled; |
sashida_h | 0:acfa22f2dc3a | 50 | } |
sashida_h | 0:acfa22f2dc3a | 51 | |
sashida_h | 0:acfa22f2dc3a | 52 | void receive(){ |
sashida_h | 0:acfa22f2dc3a | 53 | Float2Byte getFloat; |
sashida_h | 0:acfa22f2dc3a | 54 | |
sashida_h | 0:acfa22f2dc3a | 55 | if(can.read(msg)){ |
sashida_h | 0:acfa22f2dc3a | 56 | /*ID: 0x01*/ |
sashida_h | 0:acfa22f2dc3a | 57 | if(msg.id == 0x01){ |
sashida_h | 0:acfa22f2dc3a | 58 | //pc.printf("ID: 0x01\n\r"); |
sashida_h | 0:acfa22f2dc3a | 59 | for(int i=0;i<4;++i){ |
sashida_h | 0:acfa22f2dc3a | 60 | getFloat._byte[i] = msg.data[i]; |
sashida_h | 0:acfa22f2dc3a | 61 | //pc.printf("get_char: %d\n\r", getFloat._byte[i]); |
sashida_h | 0:acfa22f2dc3a | 62 | } |
sashida_h | 0:acfa22f2dc3a | 63 | pc.printf("%.2f\r\n", getFloat._float); |
sashida_h | 0:acfa22f2dc3a | 64 | myled = !myled; |
sashida_h | 0:acfa22f2dc3a | 65 | } |
sashida_h | 0:acfa22f2dc3a | 66 | /*ID: 0x02*/ |
sashida_h | 0:acfa22f2dc3a | 67 | if(msg.id == 0x02){ |
sashida_h | 0:acfa22f2dc3a | 68 | //pc.printf("ID: 0x02\n\r"); |
sashida_h | 0:acfa22f2dc3a | 69 | for(int i=0;i<4;++i){ |
sashida_h | 0:acfa22f2dc3a | 70 | getFloat._byte[i] = msg.data[i]; |
sashida_h | 0:acfa22f2dc3a | 71 | //pc.printf("get_char: %d\n\r", getFloat._byte[i]); |
sashida_h | 0:acfa22f2dc3a | 72 | } |
sashida_h | 0:acfa22f2dc3a | 73 | pc.printf("avarage: %.0f\n\r", getFloat._float); |
sashida_h | 0:acfa22f2dc3a | 74 | myled = !myled; |
sashida_h | 0:acfa22f2dc3a | 75 | } |
sashida_h | 0:acfa22f2dc3a | 76 | } |
sashida_h | 0:acfa22f2dc3a | 77 | } |
sashida_h | 0:acfa22f2dc3a | 78 | |
sashida_h | 0:acfa22f2dc3a | 79 | int main(){ |
sashida_h | 0:acfa22f2dc3a | 80 | float meas_r[5]; |
sashida_h | 0:acfa22f2dc3a | 81 | float meas_v[5]; |
sashida_h | 0:acfa22f2dc3a | 82 | float sum = 0.0; |
sashida_h | 0:acfa22f2dc3a | 83 | int i; |
sashida_h | 0:acfa22f2dc3a | 84 | |
sashida_h | 0:acfa22f2dc3a | 85 | pc.printf("Master_start.\n\r"); |
sashida_h | 0:acfa22f2dc3a | 86 | //ticker.attach(&send, 1); |
sashida_h | 0:acfa22f2dc3a | 87 | can.attach(receive, CAN::RxIrq); |
sashida_h | 0:acfa22f2dc3a | 88 | while(1) { |
sashida_h | 0:acfa22f2dc3a | 89 | sum = 0.0; |
sashida_h | 0:acfa22f2dc3a | 90 | |
sashida_h | 0:acfa22f2dc3a | 91 | meas_r[0] = L1.read(); |
sashida_h | 0:acfa22f2dc3a | 92 | meas_r[1] = L2.read(); |
sashida_h | 0:acfa22f2dc3a | 93 | meas_r[2] = L3.read(); |
sashida_h | 0:acfa22f2dc3a | 94 | meas_r[3] = L4.read(); |
sashida_h | 0:acfa22f2dc3a | 95 | meas_r[4] = L5.read(); |
sashida_h | 0:acfa22f2dc3a | 96 | |
sashida_h | 0:acfa22f2dc3a | 97 | for(i=0;i<5;i++){ |
sashida_h | 0:acfa22f2dc3a | 98 | meas_v[i] = meas_r[i] * 3300; // Converts value in the 0V-3.3V range |
sashida_h | 0:acfa22f2dc3a | 99 | //pc.printf("%d:%.0f,", i+1,meas_v[i]); |
sashida_h | 0:acfa22f2dc3a | 100 | //send(meas_v[i],0x01); |
sashida_h | 0:acfa22f2dc3a | 101 | sum += meas_v[i]; |
sashida_h | 0:acfa22f2dc3a | 102 | //wait(0.05); |
sashida_h | 0:acfa22f2dc3a | 103 | |
sashida_h | 0:acfa22f2dc3a | 104 | } |
sashida_h | 0:acfa22f2dc3a | 105 | wait(0.1); |
sashida_h | 0:acfa22f2dc3a | 106 | pc.printf("%.0f\r\n",sum/5.0); |
sashida_h | 0:acfa22f2dc3a | 107 | send(0,0x01); |
sashida_h | 0:acfa22f2dc3a | 108 | } |
sashida_h | 0:acfa22f2dc3a | 109 | } |