PSSS
/
ReadFromSerial446
nulla
Diff: main.cpp
- Revision:
- 1:fc463dd04a7f
- Parent:
- 0:b40deb141f99
- Child:
- 2:67223774f668
diff -r b40deb141f99 -r fc463dd04a7f main.cpp --- a/main.cpp Fri Jul 27 15:52:55 2018 +0000 +++ b/main.cpp Mon Jul 30 09:39:42 2018 +0000 @@ -1,112 +1,91 @@ #include "mbed.h" -#include "CAN3.h" -#include "mcp2515.h" #include <string> #include <algorithm> using namespace std; RawSerial pc(USBTX,USBRX); -DigitalOut myled(LED1); -SPI spi(SPI_MOSI,SPI_MISO,SPI_SCK); -CAN3 can(spi,SPI_CS,PA_1); +DigitalOut myled(LED2); +//SPI spi(SPI_MOSI,SPI_MISO,SPI_SCK); +//CAN3 can(spi,SPI_CS,PA_1); + +char data='A'; +char vrx[1000]; //memorizzo i caratteri ricevuti dopo il comando di start '+' + +bool start=false; // true quando ho ricevuto il comando di start '+' +bool stop=false; // true quando ho ricevuto il comando di stop '-' -char data; -char vector[50]; +bool canread=false; //true per abilitare la lettura da can + +int i = 0; +int j = 0; +int k = 0; +int i_row = 0; +const char* FromStrToChar; +size_t n,pos; +string delimiter = ","; +string paramlist[10]; void rxCallback(){ - data = char(pc.getc()); + data = char(pc.getc()); + if (data == '+'){ + myled = 1; + i=0; + j=0; + start=true; + }else if(data == '-'){ + myled=0; + stop=true; + start=false; + canread=false; //disabilito la lettura da CAN + //pc.puts("123?"); + }else{ + if(start){ + //quando ricevo il terminatore del messaggio '?' + if(data == '?'){//quando ricevo il terminatore del messaggio '?' + + //converto il vettore di char in string + string strrx(vrx); + //contro il numero di id che sono stati ricevuti contando le ',' + n = count(strrx.begin(),strrx.end(),','); + + pos = 0; + + //faccio il parsing della stringa, salvando i diversi Id ricevuti in un vettore di stringhe + while((pos = strrx.find(',')) != string::npos){ + paramlist[i_row] = strrx.substr(0,pos); + //temp[j] = paramlist[i_row]; + strrx.erase(0,pos+1); + i_row++; + } + canread=true; //abilito la lettura da CAN + + }else { //altrimenti memorizzo il carattere ricevuto + vrx[i]=data; + i++; + } + + + } + + + + + } } -/*void sendID(const char* data){ - //pc.putc(data); - pc.puts(data); - pc.puts("\n"); -}*/ - -/*void sendID(const char* data1,const char* data2){ - //sprintf(temp,"%c,%c",data1,data2); - pc.puts(data1); - pc.puts(","); - pc.puts(data2); - pc.puts("-"); - //pc.puts("\n"); -}*/ - int main() { - - bool start = false; - int i = 0; - int j = 0; - int k = 0; - int i_row = 0; - const char* FromStrToChar; - size_t n,pos; - string delimiter = ","; - string appoggio[n]; - char - can.frequency(125000); - CANMessage msg1; - bool leggi = false; - char id[1000]; - char payload[1000]; - pc.attach(&rxCallback, RawSerial::RxIrq); //TODO: trova un modo per uscire dal ciclo while della lettura CAN while(true){ - - //rxCallback(); - - if(data == '+'){ - start = true; - myled = 1; - } - else if(data == '-'){ - leggi = false; - pc.puts("123?"); - //Invia tutte le frame can acquisite - /*for(k = 0; k < n; k++){ - FromStrToChar = appoggio[k].c_str(); //fa la conversione da string a char* - pc.puts(FromStrToChar); - }*/ - myled = 0; - exit(0); + if(canread){ + //ToDo: devo leggere da CAN + }else if (stop){ + //ToDo: devo mandare tutto quello che ho letto sulla seriale + pc.puts("101,20|101,20|101,20|101,20|101,20|259,1|101,20|101,20|101,20|101,20|101,20|259,3.0?"); + stop=false; + start=false; + canread=false; + } + } - else{ - if(start){ - if(data == '?'){ - leggi = true; - string str(vector); - n = count(str.begin(),str.end(),','); - string vett[n]; - pos = 0; - while((pos = str.find(',')) != string::npos){ - vett[i_row] = str.substr(0,pos); - appoggio[j] = vett[i_row]; - str.erase(0,pos+1); - i_row++; - j++; - } - - //begin CAN acquisition - while(leggi){ - if(can.read(&msg1)){ - if(msg1.id == vett[0] || msg1.id == vett[1]){ - //TODO: dichiara due char e poi fai conversione int-char - //pc.printf("Data read: %c from node %d\n\r",(char)msg1.data[0],msg1.id); - id = char(msg1.id); - payload = msg1.data[0]; - } - } - - } - else{ - vector[i] = data; - i++; - } - } - } - - } - - }