nulla

Dependencies:   mbed mcp2515

main.cpp

Committer:
ironidio
Date:
2018-07-30
Revision:
1:fc463dd04a7f
Parent:
0:b40deb141f99
Child:
2:67223774f668

File content as of revision 1:fc463dd04a7f:

#include "mbed.h"
#include <string>
#include <algorithm>
using namespace std;

RawSerial pc(USBTX,USBRX);
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 '-'

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());
    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++;
                        }
                
                
                }
            
            
            
            
            }
}

int main() {
    pc.attach(&rxCallback, RawSerial::RxIrq);
    //TODO: trova un modo per uscire dal ciclo while della lettura CAN
    while(true){
        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;
                }
            
        }
}