Pagina 1 di 1

Arduino vs ESP (EnOcean serial protocol)

MessaggioInviato: 20 nov 2015, 19:49
da Matteo1991
Salve, sono sempre alle prese con i protocolli enocean.
Dovendo inviare dei pacchetti dati tra due moduli tcm320, mi trovo in una situazione di stallo. Mi spiego:
date un occhiata qui:
https://www.enocean.com/fileadmin/redaktion/support/dolphin-api/esp2_page.html
Volendo mandare dei dati da un arduino, scrivendo nel modo seguente le cose non funzionano:
Codice: Seleziona tutto

Serial3.write(SYNC1);
Serial3.write(SYNC1);
Serial3.write( HEADER);
Serial3.write(DATO1);
Serial3.write(DATO2);
Serial3.write(DATO3);
Serial3.write(DATO4);
Serial3.write(DATO5);
Serial3.write(DATO6);
Serial3.write(DATO7);
Serial3.write(DATO8);
Serial3.write(DATO9);
Serial3.write(DATO10);
Serial3.write(DATO11);


Ovviamente le variabili sono opportunatamente dichiarate.

La domanda è questa: come faccio a concatenare i dati in modo da formare un solo pacchetto (come nel link) ed inviare il tutto con un unico serial.write()??

Re: Arduino vs ESP (EnOcean serial protocol)

MessaggioInviato: 23 nov 2015, 17:41
da bobina
puoi creare dichiarare una variabile che contine i dati e poi mandare la variabile.

Esempio:
Codice: Seleziona tutto
uint8_t buffer[] = {0x00,0x01,0x02,0x03,0x4};
uint8_t buffer2[10];

buffer2[0] = SYNC1;
buffer2[1] = SYNC1;
buffer2[2] = HEADER;
...
buffer2[9] = DATO11; // l'indice 9 è l'ultimo di un buffer da 10 byte

Serial3.write(buffer);
Serial3.write(buffer2);


PS
Ti conviene imparare un po' di linguaggio C prima di cominciare con questi progetti complessi.

Re: Arduino vs ESP (EnOcean serial protocol)

MessaggioInviato: 26 nov 2015, 23:31
da Matteo1991
bobina ha scritto:PS
Ti conviene imparare un po' di linguaggio C prima di cominciare con questi progetti complessi.

Grazie per avermi illuminato sull'esistenza dei vettori.

Dunque sai anche come si fa un vettore dinamico con Arduino? (il numero di byte da inviare, come vedi nel link, può variare).
Comunque il problema era "hardware", ora risolto :ok:

Re: Arduino vs ESP (EnOcean serial protocol)

MessaggioInviato: 27 nov 2015, 0:09
da TardoFreak
Con il C i vettori dinamici non si possono fare, o meglio non così come con altri linguaggi. Si può allocare della memoria dinamica ma la gestione del heap è abbastanza pesante. Meglio sarebbe prevedere un numero massimo di elementi per il vettore ed usare quello.
Però, se non ricordo male, il gcc permette di allocare un vettore locale in questo modo.
Codice: Seleziona tutto
void foo(int n) {
  int array[n];
  ...
}

Ma non ne sono sicuro, dovresti verificare.