nulla

Dependencies:   mbed mcp2515

Revision:
1:fc463dd04a7f
Parent:
0:b40deb141f99
Child:
2:67223774f668
--- 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++;
-                }
-            }                   
-        }           
-        
-    }
-    
-        
 }