Madhura Tapse
/
STM32_RX
RX node
main.cpp
- Committer:
- MadhuraT
- Date:
- 2019-06-13
- Revision:
- 3:106ec6e30558
- Parent:
- 1:6554c60faa06
File content as of revision 3:106ec6e30558:
//Receiver #include "mbed.h" #define SERIAL_BAUD 9600 #define CAN_BAUD 500000 CAN can1(PB_8,PB_9); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalIn inp(PC_13); DigitalIn inp2(PC_2); DigitalIn inp1(PC_3); DigitalOut Sync(PA_4); Serial serial1(USBTX,USBRX); DigitalOut sync(PA_6); InterruptIn userButton(PC_13); Ticker aliveTicker; Timer t; int i,SW=0,Datarecd =0,Dataxmit=0; CANMessage msgOut; void can_msgout(); void sendCanMessage(int data); int s=0; int flag=0; char counter=6; void serialOut(char *message) { int i = -1; while (message[++i] != '\0') serial1.putc(message[i]); } void isrButton() { /* if(SW==0) { SW=1; //sync=1; sync=1; wait_ms(1); //sendCanMessage(); } else { SW=0; //sync=0; sync=0; } */ } void alive() { //ledGreen = !ledGreen; char *message = (char *)"Alive\r\n\0"; serialOut(message); } void isrCanRx() { /*CANMessage canMessage; can1.read(canMessage); //Clears interrupt flag Datarecd=canMessage.data[0]; if(canMessage.id==0x10) { if(Datarecd==0x0A) { led1=1; } else { led1=0; } } if(canMessage.id==0x20) { if(Datarecd==0x0A) { led2=1; } else { led2=0; } }*/ } void isrCanTx() { /*if(SW==1 && s<100) { sendCanMessage(); s++; }*/ } void isrCanError() { char *message = (char *)"CAN WERR IRQ\r\n\0"; serialOut(message); } void isrCanDataOverrun() { char *message = (char *)"CAN DAO IRQ\r\n\0"; serialOut(message); } void isrCanWakeup() { char *message = (char *)"CAN WAKEUP IRQ\r\n\0"; serialOut(message); } void isrCanErrorPassive() { char *message = (char *)"CAN EP IRQ\r\n\0"; serialOut(message); } void isrCanArbitrationLost() { char *message = (char *)"CAN ARB IRQ\r\n\0"; serialOut(message); } void isrCanBusError() { char *message = (char *)"CAN BUSERR IRQ\r\n\0"; serialOut(message); } void isrCanReady() { char *message = (char *)"CAN READY IRQ\r\n\0"; serialOut(message); } void sendCanMessage(int data) { int ret = 0; data= 0x01; msgOut.format = CANStandard; msgOut.type = CANData; msgOut.len = 2; msgOut.id = 0xffe; //msgOut.id = data; msgOut.data[0] = data; msgOut.data[1] = data; ret = can1.write(msgOut); serial1.printf("can.write() returned %x", data); } void can_msgout() { msgOut.data[0] = Dataxmit;//0xA; //sendCanMessage(); } void setup() { //Serial serial1.baud(SERIAL_BAUD); serial1.printf("START\r\n"); //CAN can1.frequency(CAN_BAUD); //Interrupts //userButton.rise(&isrButton); //can1.attach(&isrCanRx, CAN::RxIrq); //can1.attach(&isrCanTx, CAN::TxIrq); can1.attach(&isrCanError, CAN::EwIrq); can1.attach(&isrCanDataOverrun, CAN::DoIrq); can1.attach(&isrCanWakeup, CAN::WuIrq); // can1.attach(&isrCanErrorPassive, CAN::EpIrq); can1.attach(&isrCanArbitrationLost, CAN::AlIrq); can1.attach(&isrCanBusError, CAN::BeIrq); can1.attach(&isrCanReady, CAN::IdIrq); aliveTicker.attach(&alive, 5.0); } int main() { int data1; int data2; int ret; int counter=0; int counter1=0; int counter3=0; CANMessage msg; sync=0; setup(); while (true) { msg.len=2; ret= can1.read(msg); // printf("return value %d",ret); //printf ("hi"); if(msg.id == 0x2aa) { // printf("\n Node1 Message received123: %d \r\n", msg.data[0]); counter=1; // printf( "first byte = %x " , msg.data[0]); //printf( "second byte = %x " , msg.data[1]); data1= ((msg.data[1] << 8 )| msg.data[0]); } if(msg.id == 0x2ff) { //printf("\n Node1 Message received456: %d \r\n", msg.data[0]); data2= ((msg.data[1] << 8 )| msg.data[0]); //printf( "first byte = %x " , msg.data[0]); //printf( "second byte = %x " , msg.data[1]); counter1=1; } if(counter== 1 && counter1 == 1 && counter3 == 0) { if(data1 > data2) { printf (" Node2 won: Node1 Time=%d ms: Node 2 Time= %d ms \r\n ", data1,data2); //printf (" Node 1 Time= %d", data1); counter3=1; } else { printf (" Node1 won: Node1 Time=%d ms : Node 2 Time= %d ms \r\n ", data1,data2); // printf (" Node 1 Time= %d", data2); counter3=1; } } } }