3/18/19
Dependencies: mbed BNO055 MBed_Adafruit-GPS-Library
main.cpp@1:87f1199672a1, 2019-03-18 (annotated)
- Committer:
- LukeMar
- Date:
- Mon Mar 18 04:06:52 2019 +0000
- Revision:
- 1:87f1199672a1
- Parent:
- 0:f4edd3407cc5
Stepper CAN node
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LukeMar | 1:87f1199672a1 | 1 | // Program to test the CAN bus using pins 29 and 30 on the mbed connected |
LukeMar | 1:87f1199672a1 | 2 | // to an MCP2551 CAN transceiver bus IC |
LukeMar | 1:87f1199672a1 | 3 | // Note that this program will only continue to transmit while the TX message is <= 8 bytes long |
LukeMar | 0:f4edd3407cc5 | 4 | |
LukeMar | 0:f4edd3407cc5 | 5 | #include "mbed.h" |
LukeMar | 1:87f1199672a1 | 6 | |
LukeMar | 1:87f1199672a1 | 7 | #define RUDDER_ID 1 //Address of this CAN device |
LukeMar | 1:87f1199672a1 | 8 | #define BNO_ID 2 //Address of Control CAN device |
LukeMar | 1:87f1199672a1 | 9 | #define TELE_ID 3 |
LukeMar | 1:87f1199672a1 | 10 | #define RC_ID 4 |
LukeMar | 1:87f1199672a1 | 11 | |
LukeMar | 1:87f1199672a1 | 12 | Serial pc(USBTX, USBRX); //tx, and rx for tera term |
LukeMar | 1:87f1199672a1 | 13 | DigitalOut led1(LED1); //heartbeat |
LukeMar | 1:87f1199672a1 | 14 | DigitalOut led2(LED2); //CAN read activity |
LukeMar | 1:87f1199672a1 | 15 | DigitalOut led3(LED3); //CAN write activity |
LukeMar | 0:f4edd3407cc5 | 16 | |
LukeMar | 1:87f1199672a1 | 17 | CAN can(p30,p29); //CAN interface |
LukeMar | 1:87f1199672a1 | 18 | |
LukeMar | 1:87f1199672a1 | 19 | |
LukeMar | 1:87f1199672a1 | 20 | Ticker pulse; |
LukeMar | 1:87f1199672a1 | 21 | |
LukeMar | 1:87f1199672a1 | 22 | float BNOangle; |
LukeMar | 1:87f1199672a1 | 23 | float RC_out; |
LukeMar | 1:87f1199672a1 | 24 | float RCval; |
LukeMar | 1:87f1199672a1 | 25 | char datastr[20]; |
LukeMar | 1:87f1199672a1 | 26 | CANMessage msg_read; |
LukeMar | 0:f4edd3407cc5 | 27 | |
LukeMar | 1:87f1199672a1 | 28 | float CanValue(){ |
LukeMar | 1:87f1199672a1 | 29 | strcpy(datastr, (char*)msg_read.data+1); |
LukeMar | 1:87f1199672a1 | 30 | float value = strtod(datastr,NULL); |
LukeMar | 1:87f1199672a1 | 31 | return value; |
LukeMar | 1:87f1199672a1 | 32 | } |
LukeMar | 1:87f1199672a1 | 33 | |
LukeMar | 1:87f1199672a1 | 34 | void alive(void){ |
LukeMar | 1:87f1199672a1 | 35 | led1 = !led1; |
LukeMar | 1:87f1199672a1 | 36 | if(led1) |
LukeMar | 1:87f1199672a1 | 37 | pulse.attach(&alive, .2); // the address of the function to be attached (flip) and the interval (2 seconds) |
LukeMar | 1:87f1199672a1 | 38 | else |
LukeMar | 1:87f1199672a1 | 39 | pulse.attach(&alive, 1.3); // the address of the function to be attached (flip) and the interval (2 seconds) |
LukeMar | 1:87f1199672a1 | 40 | } |
LukeMar | 0:f4edd3407cc5 | 41 | |
LukeMar | 0:f4edd3407cc5 | 42 | |
LukeMar | 1:87f1199672a1 | 43 | float RC_Read(){ |
LukeMar | 1:87f1199672a1 | 44 | |
LukeMar | 1:87f1199672a1 | 45 | while(can.read(msg_read)){ //if message is available, read into msg |
LukeMar | 1:87f1199672a1 | 46 | if(msg_read.id == RC_ID){ //if its the BNO ID |
LukeMar | 1:87f1199672a1 | 47 | if(msg_read.data[0] == 'r' || msg_read.data[0] == 'R'){ |
LukeMar | 1:87f1199672a1 | 48 | led3 = !led3; |
LukeMar | 1:87f1199672a1 | 49 | RC_out = CanValue(); |
LukeMar | 1:87f1199672a1 | 50 | return RC_out; |
LukeMar | 1:87f1199672a1 | 51 | }//if the first letter was an 's', it is a servo command |
LukeMar | 1:87f1199672a1 | 52 | } //was the message to this device? |
LukeMar | 1:87f1199672a1 | 53 | }//while a CAN message has been read |
LukeMar | 1:87f1199672a1 | 54 | //return datastr; |
LukeMar | 0:f4edd3407cc5 | 55 | |
LukeMar | 0:f4edd3407cc5 | 56 | } |
LukeMar | 0:f4edd3407cc5 | 57 | |
LukeMar | 1:87f1199672a1 | 58 | int main() { |
LukeMar | 1:87f1199672a1 | 59 | |
LukeMar | 1:87f1199672a1 | 60 | Thread::wait(200); |
LukeMar | 1:87f1199672a1 | 61 | |
LukeMar | 1:87f1199672a1 | 62 | pulse.attach(&alive, 2.0); // the address of the function to be attached (alive) and the interval (2 seconds) |
LukeMar | 1:87f1199672a1 | 63 | can.frequency(500000); |
LukeMar | 1:87f1199672a1 | 64 | pc.baud(115200); |
LukeMar | 1:87f1199672a1 | 65 | |
LukeMar | 1:87f1199672a1 | 66 | pc.printf("%s\r\n", __FILE__); |
LukeMar | 1:87f1199672a1 | 67 | |
LukeMar | 1:87f1199672a1 | 68 | while(1){ |
LukeMar | 1:87f1199672a1 | 69 | |
LukeMar | 1:87f1199672a1 | 70 | RCval = RC_Read(); |
LukeMar | 1:87f1199672a1 | 71 | pc.printf("%.1f\n",RCval); |
LukeMar | 1:87f1199672a1 | 72 | } |
LukeMar | 0:f4edd3407cc5 | 73 | |
LukeMar | 1:87f1199672a1 | 74 | |
LukeMar | 1:87f1199672a1 | 75 | }//main |