nulla

Dependencies:   mbed mcp2515

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?

UserRevisionLine numberNew 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 }