3/18/19

Dependencies:   mbed BNO055 MBed_Adafruit-GPS-Library

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?

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