STM32F303K8T6でCANにFloatを送信するためのプログラム

Dependencies:   mbed

Committer:
sashida_h
Date:
Thu Jul 30 10:34:13 2020 +0000
Revision:
0:acfa22f2dc3a
initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }