YASA Motors
/
Yoko_CAN_converter1
Code to convert Yokogawa messages to CAN bus
main.cpp@0:1dc6b238aeb5, 2015-09-09 (annotated)
- Committer:
- tomhillman
- Date:
- Wed Sep 09 12:48:29 2015 +0000
- Revision:
- 0:1dc6b238aeb5
Basic version implemented on Converter for Makani Efficiency Testing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tomhillman | 0:1dc6b238aeb5 | 1 | #include "mbed.h" |
tomhillman | 0:1dc6b238aeb5 | 2 | #include "USBHostSerial.h" |
tomhillman | 0:1dc6b238aeb5 | 3 | |
tomhillman | 0:1dc6b238aeb5 | 4 | DigitalOut led(LED1); |
tomhillman | 0:1dc6b238aeb5 | 5 | Serial pc(USBTX, USBRX); |
tomhillman | 0:1dc6b238aeb5 | 6 | |
tomhillman | 0:1dc6b238aeb5 | 7 | |
tomhillman | 0:1dc6b238aeb5 | 8 | long i; |
tomhillman | 0:1dc6b238aeb5 | 9 | long j; |
tomhillman | 0:1dc6b238aeb5 | 10 | long k; |
tomhillman | 0:1dc6b238aeb5 | 11 | long start; |
tomhillman | 0:1dc6b238aeb5 | 12 | int l; |
tomhillman | 0:1dc6b238aeb5 | 13 | long m; |
tomhillman | 0:1dc6b238aeb5 | 14 | int myArray[8] = { 46, 47, 48, 52, 61, 62, 63, 67}; |
tomhillman | 0:1dc6b238aeb5 | 15 | int8_t sendTest[8]; |
tomhillman | 0:1dc6b238aeb5 | 16 | int main() { |
tomhillman | 0:1dc6b238aeb5 | 17 | pc.printf("\nMain started \r\n"); |
tomhillman | 0:1dc6b238aeb5 | 18 | CAN can1(p30, p29); |
tomhillman | 0:1dc6b238aeb5 | 19 | can1.frequency(500000); |
tomhillman | 0:1dc6b238aeb5 | 20 | USBHostSerial serial; |
tomhillman | 0:1dc6b238aeb5 | 21 | |
tomhillman | 0:1dc6b238aeb5 | 22 | char buf2[1024]; |
tomhillman | 0:1dc6b238aeb5 | 23 | while(1) { |
tomhillman | 0:1dc6b238aeb5 | 24 | |
tomhillman | 0:1dc6b238aeb5 | 25 | pc.printf("Start\r\n"); |
tomhillman | 0:1dc6b238aeb5 | 26 | |
tomhillman | 0:1dc6b238aeb5 | 27 | |
tomhillman | 0:1dc6b238aeb5 | 28 | // try to connect a serial device |
tomhillman | 0:1dc6b238aeb5 | 29 | while(!serial.connect()) |
tomhillman | 0:1dc6b238aeb5 | 30 | { |
tomhillman | 0:1dc6b238aeb5 | 31 | pc.printf("Trying to connect \r\n"); |
tomhillman | 0:1dc6b238aeb5 | 32 | wait(1); |
tomhillman | 0:1dc6b238aeb5 | 33 | } |
tomhillman | 0:1dc6b238aeb5 | 34 | |
tomhillman | 0:1dc6b238aeb5 | 35 | pc.printf("Connected \r\n"); |
tomhillman | 0:1dc6b238aeb5 | 36 | wait(1); |
tomhillman | 0:1dc6b238aeb5 | 37 | LPC_UART0->FCR |= 0x06; |
tomhillman | 0:1dc6b238aeb5 | 38 | wait(1); |
tomhillman | 0:1dc6b238aeb5 | 39 | while (1) { |
tomhillman | 0:1dc6b238aeb5 | 40 | i = 0; |
tomhillman | 0:1dc6b238aeb5 | 41 | int test = 0; |
tomhillman | 0:1dc6b238aeb5 | 42 | led=!led; |
tomhillman | 0:1dc6b238aeb5 | 43 | serial.flush(); |
tomhillman | 0:1dc6b238aeb5 | 44 | wait(0.1); |
tomhillman | 0:1dc6b238aeb5 | 45 | |
tomhillman | 0:1dc6b238aeb5 | 46 | for(m=0;m<8;m++){ |
tomhillman | 0:1dc6b238aeb5 | 47 | i = 0; |
tomhillman | 0:1dc6b238aeb5 | 48 | serial.flush(); |
tomhillman | 0:1dc6b238aeb5 | 49 | wait(0.1); |
tomhillman | 0:1dc6b238aeb5 | 50 | serial.printf("NUM:NORM:VAL? %d\r\n", myArray[m]); // send SCPI command // just \n works |
tomhillman | 0:1dc6b238aeb5 | 51 | wait(0.1); |
tomhillman | 0:1dc6b238aeb5 | 52 | |
tomhillman | 0:1dc6b238aeb5 | 53 | test = 1; |
tomhillman | 0:1dc6b238aeb5 | 54 | while (i<=30) { |
tomhillman | 0:1dc6b238aeb5 | 55 | test = serial.available(); |
tomhillman | 0:1dc6b238aeb5 | 56 | buf2[i] = serial.getc(); |
tomhillman | 0:1dc6b238aeb5 | 57 | pc.printf("%c", buf2[i], test); |
tomhillman | 0:1dc6b238aeb5 | 58 | i++; |
tomhillman | 0:1dc6b238aeb5 | 59 | } |
tomhillman | 0:1dc6b238aeb5 | 60 | serial.flush(); |
tomhillman | 0:1dc6b238aeb5 | 61 | |
tomhillman | 0:1dc6b238aeb5 | 62 | j = 0; |
tomhillman | 0:1dc6b238aeb5 | 63 | |
tomhillman | 0:1dc6b238aeb5 | 64 | |
tomhillman | 0:1dc6b238aeb5 | 65 | for(j=0;j<i;j++){ |
tomhillman | 0:1dc6b238aeb5 | 66 | if(buf2[j]==0x23){ // look for "#" that marks start of data |
tomhillman | 0:1dc6b238aeb5 | 67 | break; |
tomhillman | 0:1dc6b238aeb5 | 68 | } |
tomhillman | 0:1dc6b238aeb5 | 69 | } |
tomhillman | 0:1dc6b238aeb5 | 70 | start = j+7; |
tomhillman | 0:1dc6b238aeb5 | 71 | i = start-1;k=1; |
tomhillman | 0:1dc6b238aeb5 | 72 | pc.printf("Item(%d): 0x%X.%X.%X.%X ",myArray[m],buf2[i],buf2[i+1],buf2[i+2],buf2[i+3]); |
tomhillman | 0:1dc6b238aeb5 | 73 | |
tomhillman | 0:1dc6b238aeb5 | 74 | for(l=0;l<4;l++){ |
tomhillman | 0:1dc6b238aeb5 | 75 | |
tomhillman | 0:1dc6b238aeb5 | 76 | sendTest[l] = (int8_t)buf2[i+l]; |
tomhillman | 0:1dc6b238aeb5 | 77 | } |
tomhillman | 0:1dc6b238aeb5 | 78 | |
tomhillman | 0:1dc6b238aeb5 | 79 | if(can1.write(CANMessage((1024+m+1), (const char *) &sendTest[0], 8))){pc.printf(" Can Sent..\r\n");} |
tomhillman | 0:1dc6b238aeb5 | 80 | //can1.write(CANMessage((1024+m+1), (const char *) &sendTest[0], 8)); |
tomhillman | 0:1dc6b238aeb5 | 81 | |
tomhillman | 0:1dc6b238aeb5 | 82 | |
tomhillman | 0:1dc6b238aeb5 | 83 | |
tomhillman | 0:1dc6b238aeb5 | 84 | } |
tomhillman | 0:1dc6b238aeb5 | 85 | |
tomhillman | 0:1dc6b238aeb5 | 86 | // if device disconnected, try to connect it again |
tomhillman | 0:1dc6b238aeb5 | 87 | if (!serial.connected()){ |
tomhillman | 0:1dc6b238aeb5 | 88 | pc.printf("Connection Lost!\r\n"); |
tomhillman | 0:1dc6b238aeb5 | 89 | break; |
tomhillman | 0:1dc6b238aeb5 | 90 | } |
tomhillman | 0:1dc6b238aeb5 | 91 | |
tomhillman | 0:1dc6b238aeb5 | 92 | wait(1); |
tomhillman | 0:1dc6b238aeb5 | 93 | } |
tomhillman | 0:1dc6b238aeb5 | 94 | } |
tomhillman | 0:1dc6b238aeb5 | 95 | |
tomhillman | 0:1dc6b238aeb5 | 96 | |
tomhillman | 0:1dc6b238aeb5 | 97 | |
tomhillman | 0:1dc6b238aeb5 | 98 | } |