Buongiorno.
Sto portando avanti un progettino, nulla di particolare, ma cercando in rete gli aiuti necessari ho imparato una cosa, la condivisione è ancora una cosa molto personale.
Inizialmente volevo realizzare un affarino, arduino e accessori, per visualizzare in auto, alcuni parametri interessanti del mezzo, attraverso il canbus, ormai presente su tutte le vetture, almeno dal 2003 in poi.
Pareva tutto semplice, ma in Italiano non c'è nulla e se c'è si COMPRA.
Quello che voglio realizzare è un display, semplice ed economico, tipo un 20X4 basato su 44780 o seriale.
Si impostano nel programma cosa vuoi visualizzare e lo monti sulla vettura, 4 FILI, + - e canbus.
Ho realizzato il ricevitore, 'sniffer' per il momento, ma se necessario diventa interattivo richiedendo il PID richiesto.
Ma non so bene scrivere un codice, incappo in errori e non sono il personaggio adatto a comprendere bene.
A breve, ora sono al lavoro, allego il codice in uso che al momento visualizza i dati ricevuti.
Ora, il mio problema è questo.
Devo estrarre dalle stringhe ricevute il dato necessrio, a volte devo fare dei calcoli per rendere il valore reale e poi inviarlo al display.
Magari a molti potrebbe sembrare una stupidata ma ho notato che è molto richiesto, specie tra giovani pasticciatori di auto.
Si potrebbe poi fare un bel progetto, completo, ITALIANO, magari al 1° livello per noi ed attirare un pò di iscritti.
Ovvio chiaro, ovvero se lo comprendo IO lo capiranno TUTTI.
Il mio materiale :
Arduin Nano
Breakout MCP2515
Display 4X20
Il tutto dovrebbe funzionare su quasi tutti i modelli di vetture, il protocollo su dati standard è sempre quello.
Che ve ne pare?
Grazie per la lettura.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
double_wrap
postato il: 15.09.2020, alle ore 12:12
FrancoGual: [CUT] Ora, il mio problema è questo. Devo estrarre dalle stringhe ricevute il dato necessrio, a volte devo fare dei calcoli per rendere il valore reale e poi inviarlo al display [CUT] .
Per passare da un valore sotto forma di stringa (serie di caratteri) ad un valore numerico (int, float, ecc) ci sono delle funzioni apposta gia' pronte
Ovvio che non posso allegare il codice poicè gli apici mandano in crash il sistema
E' un codice preso negli esempi, una volta scaricato le librerie relative al MCP2515.
E mi funziona, vedo il traffico di dati, ma non so esattamente come compilare la mascheratura. E successivamente prelevare il dato.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
double_wrap
postato il: 17.09.2020, alle ore 18:59
provo a dare una risposta, magari sbaglio e quelli bravi mi correggeranno.
Ad ogni lettura la libreria restituisce tre entita'(!)
CAN0.readMsgBuf(&rxId, &len, rxBuf);
1) rxID (unsigned long quindi 4 bites) che viene stampato in esadecimale
2) len (unsigned char quindi 1 bite) -> e' il numero di byte ricevuti nell'array
3) rxBuf -> (unsigned char) e' un array di bites che contiene fino ad 8 bites che poi vengono stampati in esadecimale
Ora servirebbe sapere cosa siano quegli 8 bites nell'array, se sono caratteri (un bit ciascuno), interi (due bytes assieme), ecc
Per estrarli uno alla volta dal'array basta fare
unsigned char pippo=rxBuf[0];
unsigned char pluto=rxBuf[1];
unsigned char topol=rxBuf[2];
ecc
poi vanno convertiti nel formato voluto, ad esempio se ci fossero DUE bytes affiancati (pippo =high_byte, plut0=low_byte) che formano un intero si puo' fare
int clarabella= (int)pippo*256+(int)pluto
pero' serve sapere cosa sono quegli 8 bytes!
Se ho fatto casino, abbi pazienza....
"se peso cado, ma se cado non peso"
adamatj.altervista.org
Grazie sempre, oltretutto sei l'unico che mi risponde, chiarendomi sempre qualcosa.
Intanto ho provato numerosi altri sketch.. tutti una boiata...
Quindi insisto su questo, intanto ho aggiunto una scrittura su display,
Sono swempre a caccia di qualcuno che mi dica cosa sono appunto gli 8 bytes.
Essndo un vecchio rinco, ti faccio la domanda di pappa pronta.
Allego un pezzo di dati ricevuti.
Spiego con parole mie, oltre all'ID che mi dice chi sta parlando, gli 8 bytes indicano cosa sta succedendo.
Quindi immaginiamo che devo prendere SOLO il terzo byte e poi farci su dei calcoli.
Considera che i dati sono veri ma della macchina chiusa, i dati appaiono quando apro la porta e non faccio null'altro.
Ma per imparare va benissimo.
Non so se sono stato comprensibile.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
double_wrap
postato il: 18.09.2020, alle ore 18:11
proviamo...
Per prendere il TERZO byte si puo' fare ad esempio
unsigned char dato3A;
..
dato3A= rxBuff[2]; // prende il 3^ byte (0,1,2)
Serial.print(dato3A, HEX); // per vedere se corrisponde
Ipotizziamo che il terzo byte sia un numero fra 0-255, per usarlo nei calcoli serve un <casting> (conversione del tipo di variabile lasciando inalterato il contenuto)
int dato3B;
...
dato3B= int(dato3A); // converte il tipo di variabile da char ad int
Serial.println(dato3B); // stampa il dato in formato decimale
la sequenza stampata in esadecomale
34,14,34,14,3C,1C,14,1C,3C,1C,3C,24,4,24,4,24,4,24,0C,2C
diventa decimale nei calcoli
52,20,52,20,60,28,20,28,60,28,60,36,4,36,4,36,4,36,12,44
Prova a vedere se co ho preso
Purtoppo non conosco il protocollo canbus delle auto, quindi ID, filtri, mask e valori. Magari e' la volta che imparo qualcosa.
ps. intanto grazie per la board col MCP2515, quindi basta collegare i 4 fili <+>,<gnd>,<canL>, <canH> al connettore per leggere i flussi?
"se peso cado, ma se cado non peso"
adamatj.altervista.org
5 fili, non dimenticare il filo interrupt. che alla fine gestisce la ricetrasmissione.
Intanto grazie.. io provo.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
Perdona l'ottusità binaria...
Ma sai dove dovrei collocare i comandi che mi hai consigliato?
Suppongo il loop, ma ho qualche errore e non so se sono io o io..
Scusa.
Dovremmo trovare un modo per scambiare i files.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
double_wrap
postato il: 18.09.2020, alle ore 20:27
cosi' dovrebbe andare salvo mettere a posto le stampe, se sbaglio che qualcuno mi corregga!
unsigned char dato3A;
int dato3B;
void setup() {
....
}
void loop(){
if(!digitalRead(2)) {
CAN0.readMsgBuf(&rxId, &len, rxBuf);
....
....
dato3A= rxBuff[2]; // prende il 3^ byte (0,1,2)
Serial.print(dato3A, HEX); // per vedere se corrisponde
dato3B= int(dato3A); // converte il tipo di variabile da char ad int
Serial.println(dato3B); // stampa il dato in formato decimale
....
// fai qualcosa con <dato3B>
....
} // fine dati canbus presenti
...
} // fine loop
la settimana prossima faccio l'ordine per la basetta MCP2515 e cerco qualcosa sul protocollo canbus, mi serve per tenermi attivo... intanto qui c'e' un corso da ben 100 pagine (serve registrarsi gratuitamente), magari spiega qualcosa sui dati!
https://www.elettronicain.it/prodotto/alla-scoperta-del-can-…
"se peso cado, ma se cado non peso"
adamatj.altervista.org
Grazie, mi iscrivo perchè in ITAGLIANO! Almeno leggo bene e non da google.
Grazie sempre.
Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito