RX node

Dependencies:   mbed

Committer:
MadhuraT
Date:
Thu Jun 13 16:46:07 2019 +0000
Revision:
3:106ec6e30558
Parent:
1:6554c60faa06
rx node code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MadhuraT 3:106ec6e30558 1
MadhuraT 3:106ec6e30558 2
MadhuraT 3:106ec6e30558 3 //Receiver
MadhuraT 3:106ec6e30558 4
bcostm 0:d5bd863b2036 5 #include "mbed.h"
bcostm 0:d5bd863b2036 6
MadhuraT 3:106ec6e30558 7 #define SERIAL_BAUD 9600
MadhuraT 3:106ec6e30558 8 #define CAN_BAUD 500000
MadhuraT 3:106ec6e30558 9
MadhuraT 3:106ec6e30558 10
MadhuraT 3:106ec6e30558 11 CAN can1(PB_8,PB_9);
MadhuraT 3:106ec6e30558 12 DigitalOut led1(LED1);
MadhuraT 3:106ec6e30558 13 DigitalOut led2(LED2);
MadhuraT 3:106ec6e30558 14 DigitalIn inp(PC_13);
MadhuraT 3:106ec6e30558 15 DigitalIn inp2(PC_2);
MadhuraT 3:106ec6e30558 16 DigitalIn inp1(PC_3);
MadhuraT 3:106ec6e30558 17 DigitalOut Sync(PA_4);
MadhuraT 3:106ec6e30558 18 Serial serial1(USBTX,USBRX);
MadhuraT 3:106ec6e30558 19 DigitalOut sync(PA_6);
MadhuraT 3:106ec6e30558 20 InterruptIn userButton(PC_13);
MadhuraT 3:106ec6e30558 21 Ticker aliveTicker;
MadhuraT 3:106ec6e30558 22 Timer t;
MadhuraT 3:106ec6e30558 23 int i,SW=0,Datarecd =0,Dataxmit=0;
MadhuraT 3:106ec6e30558 24 CANMessage msgOut;
MadhuraT 3:106ec6e30558 25 void can_msgout();
MadhuraT 3:106ec6e30558 26 void sendCanMessage(int data);
MadhuraT 3:106ec6e30558 27 int s=0;
MadhuraT 3:106ec6e30558 28 int flag=0;
MadhuraT 3:106ec6e30558 29 char counter=6;
MadhuraT 3:106ec6e30558 30
MadhuraT 3:106ec6e30558 31 void serialOut(char *message)
MadhuraT 3:106ec6e30558 32 {
MadhuraT 3:106ec6e30558 33 int i = -1;
MadhuraT 3:106ec6e30558 34 while (message[++i] != '\0') serial1.putc(message[i]);
MadhuraT 3:106ec6e30558 35 }
MadhuraT 3:106ec6e30558 36
MadhuraT 3:106ec6e30558 37 void isrButton()
MadhuraT 3:106ec6e30558 38 {
MadhuraT 3:106ec6e30558 39 /* if(SW==0)
MadhuraT 3:106ec6e30558 40 {
MadhuraT 3:106ec6e30558 41 SW=1;
MadhuraT 3:106ec6e30558 42 //sync=1;
MadhuraT 3:106ec6e30558 43 sync=1;
MadhuraT 3:106ec6e30558 44 wait_ms(1);
MadhuraT 3:106ec6e30558 45 //sendCanMessage();
MadhuraT 3:106ec6e30558 46
MadhuraT 3:106ec6e30558 47 }
MadhuraT 3:106ec6e30558 48 else
MadhuraT 3:106ec6e30558 49 {
MadhuraT 3:106ec6e30558 50 SW=0;
MadhuraT 3:106ec6e30558 51 //sync=0;
MadhuraT 3:106ec6e30558 52 sync=0;
MadhuraT 3:106ec6e30558 53
MadhuraT 3:106ec6e30558 54 } */
MadhuraT 3:106ec6e30558 55 }
MadhuraT 3:106ec6e30558 56
MadhuraT 3:106ec6e30558 57 void alive()
MadhuraT 3:106ec6e30558 58 {
MadhuraT 3:106ec6e30558 59 //ledGreen = !ledGreen;
MadhuraT 3:106ec6e30558 60 char *message = (char *)"Alive\r\n\0";
MadhuraT 3:106ec6e30558 61 serialOut(message);
MadhuraT 3:106ec6e30558 62 }
MadhuraT 3:106ec6e30558 63
MadhuraT 3:106ec6e30558 64 void isrCanRx()
MadhuraT 3:106ec6e30558 65 {
MadhuraT 3:106ec6e30558 66
MadhuraT 3:106ec6e30558 67 /*CANMessage canMessage;
MadhuraT 3:106ec6e30558 68 can1.read(canMessage); //Clears interrupt flag
MadhuraT 3:106ec6e30558 69 Datarecd=canMessage.data[0];
MadhuraT 3:106ec6e30558 70 if(canMessage.id==0x10)
MadhuraT 3:106ec6e30558 71 {
MadhuraT 3:106ec6e30558 72 if(Datarecd==0x0A)
MadhuraT 3:106ec6e30558 73 {
MadhuraT 3:106ec6e30558 74 led1=1;
MadhuraT 3:106ec6e30558 75 }
MadhuraT 3:106ec6e30558 76 else
MadhuraT 3:106ec6e30558 77 {
MadhuraT 3:106ec6e30558 78 led1=0;
MadhuraT 3:106ec6e30558 79 }
MadhuraT 3:106ec6e30558 80 }
MadhuraT 3:106ec6e30558 81 if(canMessage.id==0x20)
MadhuraT 3:106ec6e30558 82 {
MadhuraT 3:106ec6e30558 83 if(Datarecd==0x0A)
MadhuraT 3:106ec6e30558 84 {
MadhuraT 3:106ec6e30558 85 led2=1;
MadhuraT 3:106ec6e30558 86 }
MadhuraT 3:106ec6e30558 87 else
MadhuraT 3:106ec6e30558 88 {
MadhuraT 3:106ec6e30558 89 led2=0;
MadhuraT 3:106ec6e30558 90 }
MadhuraT 3:106ec6e30558 91 }*/
MadhuraT 3:106ec6e30558 92
MadhuraT 3:106ec6e30558 93 }
MadhuraT 3:106ec6e30558 94
MadhuraT 3:106ec6e30558 95 void isrCanTx()
MadhuraT 3:106ec6e30558 96 {
MadhuraT 3:106ec6e30558 97 /*if(SW==1 && s<100)
MadhuraT 3:106ec6e30558 98 {
MadhuraT 3:106ec6e30558 99 sendCanMessage();
MadhuraT 3:106ec6e30558 100 s++;
MadhuraT 3:106ec6e30558 101 }*/
MadhuraT 3:106ec6e30558 102
MadhuraT 3:106ec6e30558 103 }
MadhuraT 3:106ec6e30558 104
MadhuraT 3:106ec6e30558 105 void isrCanError()
MadhuraT 3:106ec6e30558 106 {
MadhuraT 3:106ec6e30558 107 char *message = (char *)"CAN WERR IRQ\r\n\0";
MadhuraT 3:106ec6e30558 108 serialOut(message);
MadhuraT 3:106ec6e30558 109 }
MadhuraT 3:106ec6e30558 110
MadhuraT 3:106ec6e30558 111 void isrCanDataOverrun()
MadhuraT 3:106ec6e30558 112 {
MadhuraT 3:106ec6e30558 113 char *message = (char *)"CAN DAO IRQ\r\n\0";
MadhuraT 3:106ec6e30558 114 serialOut(message);
MadhuraT 3:106ec6e30558 115 }
MadhuraT 3:106ec6e30558 116
MadhuraT 3:106ec6e30558 117 void isrCanWakeup()
MadhuraT 3:106ec6e30558 118 {
MadhuraT 3:106ec6e30558 119 char *message = (char *)"CAN WAKEUP IRQ\r\n\0";
MadhuraT 3:106ec6e30558 120 serialOut(message);
MadhuraT 3:106ec6e30558 121 }
MadhuraT 3:106ec6e30558 122
MadhuraT 3:106ec6e30558 123 void isrCanErrorPassive()
MadhuraT 3:106ec6e30558 124 {
MadhuraT 3:106ec6e30558 125 char *message = (char *)"CAN EP IRQ\r\n\0";
MadhuraT 3:106ec6e30558 126 serialOut(message);
MadhuraT 3:106ec6e30558 127 }
MadhuraT 3:106ec6e30558 128
MadhuraT 3:106ec6e30558 129 void isrCanArbitrationLost()
MadhuraT 3:106ec6e30558 130 {
MadhuraT 3:106ec6e30558 131 char *message = (char *)"CAN ARB IRQ\r\n\0";
MadhuraT 3:106ec6e30558 132 serialOut(message);
MadhuraT 3:106ec6e30558 133 }
MadhuraT 3:106ec6e30558 134
MadhuraT 3:106ec6e30558 135 void isrCanBusError()
MadhuraT 3:106ec6e30558 136 {
MadhuraT 3:106ec6e30558 137 char *message = (char *)"CAN BUSERR IRQ\r\n\0";
MadhuraT 3:106ec6e30558 138 serialOut(message);
MadhuraT 3:106ec6e30558 139 }
MadhuraT 3:106ec6e30558 140
MadhuraT 3:106ec6e30558 141 void isrCanReady()
MadhuraT 3:106ec6e30558 142 {
MadhuraT 3:106ec6e30558 143 char *message = (char *)"CAN READY IRQ\r\n\0";
MadhuraT 3:106ec6e30558 144 serialOut(message);
MadhuraT 3:106ec6e30558 145 }
MadhuraT 3:106ec6e30558 146
MadhuraT 3:106ec6e30558 147 void sendCanMessage(int data)
MadhuraT 3:106ec6e30558 148 {
MadhuraT 3:106ec6e30558 149 int ret = 0;
MadhuraT 3:106ec6e30558 150 data= 0x01;
MadhuraT 3:106ec6e30558 151 msgOut.format = CANStandard;
MadhuraT 3:106ec6e30558 152 msgOut.type = CANData;
MadhuraT 3:106ec6e30558 153 msgOut.len = 2;
MadhuraT 3:106ec6e30558 154 msgOut.id = 0xffe;
MadhuraT 3:106ec6e30558 155 //msgOut.id = data;
MadhuraT 3:106ec6e30558 156 msgOut.data[0] = data;
MadhuraT 3:106ec6e30558 157 msgOut.data[1] = data;
MadhuraT 3:106ec6e30558 158 ret = can1.write(msgOut);
MadhuraT 3:106ec6e30558 159 serial1.printf("can.write() returned %x", data);
MadhuraT 3:106ec6e30558 160 }
MadhuraT 3:106ec6e30558 161 void can_msgout()
MadhuraT 3:106ec6e30558 162 {
MadhuraT 3:106ec6e30558 163 msgOut.data[0] = Dataxmit;//0xA;
MadhuraT 3:106ec6e30558 164 //sendCanMessage();
MadhuraT 3:106ec6e30558 165 }
MadhuraT 3:106ec6e30558 166
MadhuraT 3:106ec6e30558 167 void setup()
MadhuraT 3:106ec6e30558 168 {
MadhuraT 3:106ec6e30558 169 //Serial
MadhuraT 3:106ec6e30558 170 serial1.baud(SERIAL_BAUD);
MadhuraT 3:106ec6e30558 171 serial1.printf("START\r\n");
MadhuraT 3:106ec6e30558 172
MadhuraT 3:106ec6e30558 173 //CAN
MadhuraT 3:106ec6e30558 174 can1.frequency(CAN_BAUD);
MadhuraT 3:106ec6e30558 175
MadhuraT 3:106ec6e30558 176 //Interrupts
MadhuraT 3:106ec6e30558 177 //userButton.rise(&isrButton);
MadhuraT 3:106ec6e30558 178 //can1.attach(&isrCanRx, CAN::RxIrq);
MadhuraT 3:106ec6e30558 179 //can1.attach(&isrCanTx, CAN::TxIrq);
MadhuraT 3:106ec6e30558 180 can1.attach(&isrCanError, CAN::EwIrq);
MadhuraT 3:106ec6e30558 181 can1.attach(&isrCanDataOverrun, CAN::DoIrq);
MadhuraT 3:106ec6e30558 182 can1.attach(&isrCanWakeup, CAN::WuIrq);
MadhuraT 3:106ec6e30558 183 // can1.attach(&isrCanErrorPassive, CAN::EpIrq);
MadhuraT 3:106ec6e30558 184 can1.attach(&isrCanArbitrationLost, CAN::AlIrq);
MadhuraT 3:106ec6e30558 185 can1.attach(&isrCanBusError, CAN::BeIrq);
MadhuraT 3:106ec6e30558 186 can1.attach(&isrCanReady, CAN::IdIrq);
MadhuraT 3:106ec6e30558 187
MadhuraT 3:106ec6e30558 188 aliveTicker.attach(&alive, 5.0);
MadhuraT 3:106ec6e30558 189 }
MadhuraT 3:106ec6e30558 190
bcostm 0:d5bd863b2036 191
bcostm 0:d5bd863b2036 192 int main()
bcostm 0:d5bd863b2036 193 {
MadhuraT 3:106ec6e30558 194
MadhuraT 3:106ec6e30558 195 int data1;
MadhuraT 3:106ec6e30558 196 int data2;
MadhuraT 3:106ec6e30558 197 int ret;
MadhuraT 3:106ec6e30558 198 int counter=0;
MadhuraT 3:106ec6e30558 199 int counter1=0;
MadhuraT 3:106ec6e30558 200 int counter3=0;
MadhuraT 3:106ec6e30558 201 CANMessage msg;
MadhuraT 3:106ec6e30558 202 sync=0;
MadhuraT 3:106ec6e30558 203 setup();
MadhuraT 3:106ec6e30558 204
MadhuraT 3:106ec6e30558 205
MadhuraT 3:106ec6e30558 206
MadhuraT 3:106ec6e30558 207 while (true)
MadhuraT 3:106ec6e30558 208 {
MadhuraT 3:106ec6e30558 209 msg.len=2;
MadhuraT 3:106ec6e30558 210 ret= can1.read(msg);
MadhuraT 3:106ec6e30558 211 // printf("return value %d",ret);
MadhuraT 3:106ec6e30558 212 //printf ("hi");
MadhuraT 3:106ec6e30558 213 if(msg.id == 0x2aa)
MadhuraT 3:106ec6e30558 214 {
MadhuraT 3:106ec6e30558 215 // printf("\n Node1 Message received123: %d \r\n", msg.data[0]);
MadhuraT 3:106ec6e30558 216 counter=1;
MadhuraT 3:106ec6e30558 217 // printf( "first byte = %x " , msg.data[0]);
MadhuraT 3:106ec6e30558 218 //printf( "second byte = %x " , msg.data[1]);
MadhuraT 3:106ec6e30558 219 data1= ((msg.data[1] << 8 )| msg.data[0]);
MadhuraT 3:106ec6e30558 220 }
MadhuraT 3:106ec6e30558 221 if(msg.id == 0x2ff)
MadhuraT 3:106ec6e30558 222 {
MadhuraT 3:106ec6e30558 223 //printf("\n Node1 Message received456: %d \r\n", msg.data[0]);
MadhuraT 3:106ec6e30558 224 data2= ((msg.data[1] << 8 )| msg.data[0]);
MadhuraT 3:106ec6e30558 225 //printf( "first byte = %x " , msg.data[0]);
MadhuraT 3:106ec6e30558 226 //printf( "second byte = %x " , msg.data[1]);
MadhuraT 3:106ec6e30558 227 counter1=1;
MadhuraT 3:106ec6e30558 228 }
MadhuraT 3:106ec6e30558 229 if(counter== 1 && counter1 == 1 && counter3 == 0)
MadhuraT 3:106ec6e30558 230 {
MadhuraT 3:106ec6e30558 231 if(data1 > data2)
MadhuraT 3:106ec6e30558 232 {
MadhuraT 3:106ec6e30558 233 printf (" Node2 won: Node1 Time=%d ms: Node 2 Time= %d ms \r\n ", data1,data2);
MadhuraT 3:106ec6e30558 234 //printf (" Node 1 Time= %d", data1);
MadhuraT 3:106ec6e30558 235 counter3=1;
MadhuraT 3:106ec6e30558 236
MadhuraT 3:106ec6e30558 237 }
MadhuraT 3:106ec6e30558 238 else
MadhuraT 3:106ec6e30558 239 {
MadhuraT 3:106ec6e30558 240 printf (" Node1 won: Node1 Time=%d ms : Node 2 Time= %d ms \r\n ", data1,data2);
MadhuraT 3:106ec6e30558 241 // printf (" Node 1 Time= %d", data2);
MadhuraT 3:106ec6e30558 242 counter3=1;
MadhuraT 3:106ec6e30558 243 }
MadhuraT 3:106ec6e30558 244
MadhuraT 3:106ec6e30558 245 }
bcostm 0:d5bd863b2036 246 }
bcostm 0:d5bd863b2036 247 }