PSSS
/
ReadFromSerial446
nulla
main.cpp@0:b40deb141f99, 2018-07-27 (annotated)
- Committer:
- giuseppe_guida
- Date:
- Fri Jul 27 15:52:55 2018 +0000
- Revision:
- 0:b40deb141f99
- Child:
- 1:fc463dd04a7f
ol
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
giuseppe_guida | 0:b40deb141f99 | 1 | #include "mbed.h" |
giuseppe_guida | 0:b40deb141f99 | 2 | #include "CAN3.h" |
giuseppe_guida | 0:b40deb141f99 | 3 | #include "mcp2515.h" |
giuseppe_guida | 0:b40deb141f99 | 4 | #include <string> |
giuseppe_guida | 0:b40deb141f99 | 5 | #include <algorithm> |
giuseppe_guida | 0:b40deb141f99 | 6 | using namespace std; |
giuseppe_guida | 0:b40deb141f99 | 7 | |
giuseppe_guida | 0:b40deb141f99 | 8 | RawSerial pc(USBTX,USBRX); |
giuseppe_guida | 0:b40deb141f99 | 9 | DigitalOut myled(LED1); |
giuseppe_guida | 0:b40deb141f99 | 10 | SPI spi(SPI_MOSI,SPI_MISO,SPI_SCK); |
giuseppe_guida | 0:b40deb141f99 | 11 | CAN3 can(spi,SPI_CS,PA_1); |
giuseppe_guida | 0:b40deb141f99 | 12 | |
giuseppe_guida | 0:b40deb141f99 | 13 | char data; |
giuseppe_guida | 0:b40deb141f99 | 14 | char vector[50]; |
giuseppe_guida | 0:b40deb141f99 | 15 | |
giuseppe_guida | 0:b40deb141f99 | 16 | void rxCallback(){ |
giuseppe_guida | 0:b40deb141f99 | 17 | data = char(pc.getc()); |
giuseppe_guida | 0:b40deb141f99 | 18 | } |
giuseppe_guida | 0:b40deb141f99 | 19 | |
giuseppe_guida | 0:b40deb141f99 | 20 | /*void sendID(const char* data){ |
giuseppe_guida | 0:b40deb141f99 | 21 | //pc.putc(data); |
giuseppe_guida | 0:b40deb141f99 | 22 | pc.puts(data); |
giuseppe_guida | 0:b40deb141f99 | 23 | pc.puts("\n"); |
giuseppe_guida | 0:b40deb141f99 | 24 | }*/ |
giuseppe_guida | 0:b40deb141f99 | 25 | |
giuseppe_guida | 0:b40deb141f99 | 26 | /*void sendID(const char* data1,const char* data2){ |
giuseppe_guida | 0:b40deb141f99 | 27 | //sprintf(temp,"%c,%c",data1,data2); |
giuseppe_guida | 0:b40deb141f99 | 28 | pc.puts(data1); |
giuseppe_guida | 0:b40deb141f99 | 29 | pc.puts(","); |
giuseppe_guida | 0:b40deb141f99 | 30 | pc.puts(data2); |
giuseppe_guida | 0:b40deb141f99 | 31 | pc.puts("-"); |
giuseppe_guida | 0:b40deb141f99 | 32 | //pc.puts("\n"); |
giuseppe_guida | 0:b40deb141f99 | 33 | }*/ |
giuseppe_guida | 0:b40deb141f99 | 34 | |
giuseppe_guida | 0:b40deb141f99 | 35 | int main() { |
giuseppe_guida | 0:b40deb141f99 | 36 | |
giuseppe_guida | 0:b40deb141f99 | 37 | bool start = false; |
giuseppe_guida | 0:b40deb141f99 | 38 | int i = 0; |
giuseppe_guida | 0:b40deb141f99 | 39 | int j = 0; |
giuseppe_guida | 0:b40deb141f99 | 40 | int k = 0; |
giuseppe_guida | 0:b40deb141f99 | 41 | int i_row = 0; |
giuseppe_guida | 0:b40deb141f99 | 42 | const char* FromStrToChar; |
giuseppe_guida | 0:b40deb141f99 | 43 | size_t n,pos; |
giuseppe_guida | 0:b40deb141f99 | 44 | string delimiter = ","; |
giuseppe_guida | 0:b40deb141f99 | 45 | string appoggio[n]; |
giuseppe_guida | 0:b40deb141f99 | 46 | char |
giuseppe_guida | 0:b40deb141f99 | 47 | can.frequency(125000); |
giuseppe_guida | 0:b40deb141f99 | 48 | CANMessage msg1; |
giuseppe_guida | 0:b40deb141f99 | 49 | bool leggi = false; |
giuseppe_guida | 0:b40deb141f99 | 50 | char id[1000]; |
giuseppe_guida | 0:b40deb141f99 | 51 | char payload[1000]; |
giuseppe_guida | 0:b40deb141f99 | 52 | |
giuseppe_guida | 0:b40deb141f99 | 53 | pc.attach(&rxCallback, RawSerial::RxIrq); |
giuseppe_guida | 0:b40deb141f99 | 54 | //TODO: trova un modo per uscire dal ciclo while della lettura CAN |
giuseppe_guida | 0:b40deb141f99 | 55 | while(true){ |
giuseppe_guida | 0:b40deb141f99 | 56 | |
giuseppe_guida | 0:b40deb141f99 | 57 | //rxCallback(); |
giuseppe_guida | 0:b40deb141f99 | 58 | |
giuseppe_guida | 0:b40deb141f99 | 59 | if(data == '+'){ |
giuseppe_guida | 0:b40deb141f99 | 60 | start = true; |
giuseppe_guida | 0:b40deb141f99 | 61 | myled = 1; |
giuseppe_guida | 0:b40deb141f99 | 62 | } |
giuseppe_guida | 0:b40deb141f99 | 63 | else if(data == '-'){ |
giuseppe_guida | 0:b40deb141f99 | 64 | leggi = false; |
giuseppe_guida | 0:b40deb141f99 | 65 | pc.puts("123?"); |
giuseppe_guida | 0:b40deb141f99 | 66 | //Invia tutte le frame can acquisite |
giuseppe_guida | 0:b40deb141f99 | 67 | /*for(k = 0; k < n; k++){ |
giuseppe_guida | 0:b40deb141f99 | 68 | FromStrToChar = appoggio[k].c_str(); //fa la conversione da string a char* |
giuseppe_guida | 0:b40deb141f99 | 69 | pc.puts(FromStrToChar); |
giuseppe_guida | 0:b40deb141f99 | 70 | }*/ |
giuseppe_guida | 0:b40deb141f99 | 71 | myled = 0; |
giuseppe_guida | 0:b40deb141f99 | 72 | exit(0); |
giuseppe_guida | 0:b40deb141f99 | 73 | } |
giuseppe_guida | 0:b40deb141f99 | 74 | else{ |
giuseppe_guida | 0:b40deb141f99 | 75 | if(start){ |
giuseppe_guida | 0:b40deb141f99 | 76 | if(data == '?'){ |
giuseppe_guida | 0:b40deb141f99 | 77 | leggi = true; |
giuseppe_guida | 0:b40deb141f99 | 78 | string str(vector); |
giuseppe_guida | 0:b40deb141f99 | 79 | n = count(str.begin(),str.end(),','); |
giuseppe_guida | 0:b40deb141f99 | 80 | string vett[n]; |
giuseppe_guida | 0:b40deb141f99 | 81 | pos = 0; |
giuseppe_guida | 0:b40deb141f99 | 82 | while((pos = str.find(',')) != string::npos){ |
giuseppe_guida | 0:b40deb141f99 | 83 | vett[i_row] = str.substr(0,pos); |
giuseppe_guida | 0:b40deb141f99 | 84 | appoggio[j] = vett[i_row]; |
giuseppe_guida | 0:b40deb141f99 | 85 | str.erase(0,pos+1); |
giuseppe_guida | 0:b40deb141f99 | 86 | i_row++; |
giuseppe_guida | 0:b40deb141f99 | 87 | j++; |
giuseppe_guida | 0:b40deb141f99 | 88 | } |
giuseppe_guida | 0:b40deb141f99 | 89 | |
giuseppe_guida | 0:b40deb141f99 | 90 | //begin CAN acquisition |
giuseppe_guida | 0:b40deb141f99 | 91 | while(leggi){ |
giuseppe_guida | 0:b40deb141f99 | 92 | if(can.read(&msg1)){ |
giuseppe_guida | 0:b40deb141f99 | 93 | if(msg1.id == vett[0] || msg1.id == vett[1]){ |
giuseppe_guida | 0:b40deb141f99 | 94 | //TODO: dichiara due char e poi fai conversione int-char |
giuseppe_guida | 0:b40deb141f99 | 95 | //pc.printf("Data read: %c from node %d\n\r",(char)msg1.data[0],msg1.id); |
giuseppe_guida | 0:b40deb141f99 | 96 | id = char(msg1.id); |
giuseppe_guida | 0:b40deb141f99 | 97 | payload = msg1.data[0]; |
giuseppe_guida | 0:b40deb141f99 | 98 | } |
giuseppe_guida | 0:b40deb141f99 | 99 | } |
giuseppe_guida | 0:b40deb141f99 | 100 | |
giuseppe_guida | 0:b40deb141f99 | 101 | } |
giuseppe_guida | 0:b40deb141f99 | 102 | else{ |
giuseppe_guida | 0:b40deb141f99 | 103 | vector[i] = data; |
giuseppe_guida | 0:b40deb141f99 | 104 | i++; |
giuseppe_guida | 0:b40deb141f99 | 105 | } |
giuseppe_guida | 0:b40deb141f99 | 106 | } |
giuseppe_guida | 0:b40deb141f99 | 107 | } |
giuseppe_guida | 0:b40deb141f99 | 108 | |
giuseppe_guida | 0:b40deb141f99 | 109 | } |
giuseppe_guida | 0:b40deb141f99 | 110 | |
giuseppe_guida | 0:b40deb141f99 | 111 | |
giuseppe_guida | 0:b40deb141f99 | 112 | } |