grazie ... uwe, leo ed astro..
che vuol dire che il file.h deve contenere i prototipi delle funzioni ... io le ho messe nel file.cpp ...
quindi ho creato la catella ComSer ... in librerie ..
poi ho creato il file ComSer.cpp e dentro ci ho messo questo...
void analizzaStringa ()
{
stringaRX_OK = false;
decode = false;
if (charRX[0] >= 11) // il messaggio ricevuto supera la lunghezza minima
{
switch (charRX[7]) // byte in posizione 7
{
case 'A': //interrogazione tipo A
switch (charRX[8]) // byte in posizione 8 ... tipo di interogazione o di comando
{
case 'A': // interrogazione tipo AA ... lettura della modalità di funzionamento richiesta
AA (); decode = true;
break;
case 'B': // interrogazione tipo AB ... lettura del tipo di modalita impostata al momento
AB (); decode = true;
break;
case 'C': // interrogazione tipo AC ... lettura dei tempi di ritardo sulla coda dei 4 tx (t1, t2, t3, t4) in mS
AC(); decode = true;
break;
}
break;
case 'B': //comando tipo B
switch (charRX[8]) // byte in posizione 8 ... tipo di interogazione o di comando
{
case 'A': // comando tipo BA .... modifica e imposta i dati di funzionamento relativi ad una modalita' richiesta
BA(); decode = true;
break;
case 'B': // comando tipo BB .... setta ed imposta il funzionamento alla modalità n ...
BB (); decode = true;
break;
case 'C': // comando tipo BC ... imposta i tempi di ritardo sulla coda dei 4 tx (t1, t2, t3, t4) in mS
BC (); decode = true;
break;
}
break;
case 'C': //comunicazione: ricevuto ok
C1 (); decode = true;
break;
}
if (!decode) // non è stato decodificata alcuna richiesta
{
C0 (1);
}
}
else // non ci sono i caratteri minimi necessari
{
C0 (2);
}
}
void AA() // interrogazione tipo AA ... lettura della modalità di funzionamento trasmessa nel byte 9
{
// il pattern è memorizzato nei byte 8 e 9 della eeprom, precisamente: address_start byte 8, mode_pattern al byte 9 ..... i varia da 1 a 3
// EEPROM.write(address_start + (mode * mode_pattern ) + (i-1) * 4 + 0, busy );
// EEPROM.write(address_start + (mode * mode_pattern ) + (i-1) * 4 + 1, azioneA );
// EEPROM.write(address_start + (mode * mode_pattern ) + (i-1) * 4 + 2, azioneB );
// EEPROM.write(address_start + (mode * mode_pattern ) + (i-1) * 4 + 3, azioneC );
// compilo il vettore di dati da spedire come risposta
charTX[7] = 'C'; //stringa contenente una risposta
charTX[11] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 0 * 4 + 0); // busy1 ..... 1° byte della risposta ....
charTX[12] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 0 * 4 + 1); // azioneA1
charTX[13] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 0 * 4 + 2); // AzioneB1
charTX[14] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 0 * 4 + 3); // AzioneC1
charTX[15] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 1 * 4 + 0); // busy2
charTX[16] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 1 * 4 + 1); // azioneA2
charTX[17] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 1 * 4 + 2); // AzioneB2
charTX[18] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 1 * 4 + 3); // azioneC2
charTX[19] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 2 * 4 + 0); // busy3
charTX[20] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 2 * 4 + 1); // azioneA3
charTX[21] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 2 * 4 + 2); // AzioneB3
charTX[22] = EEPROM.read(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9) ) + 2 * 4 + 3); // azioneC3 ..... ultimo byte della risposta ....
charTX[0] = 22; //inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void AB () // interrogazione tipo AB ... lettura del tipo di modalita impostata
{
// compilo il vettore di dati da spedire come risposta
charTX[7] = 'C'; //stringa contenente una risposta
charTX[11] = EEPROM.read(5); // mode_repeater
charTX[0] = 11; //inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void AC ()
{
charTX[7] = 'C'; //stringa contenente una risposta
charTX[11] = EEPROM.read(10); // byte basso t1
charTX[12] = EEPROM.read(11); // byte alto t1
charTX[13] = EEPROM.read(12); // byte basso t2
charTX[14] = EEPROM.read(13); // byte alto t2
charTX[15] = EEPROM.read(14); // byte basso t3
charTX[16] = EEPROM.read(15); // byte alto t3
charTX[17] = EEPROM.read(16); // byte basso t4
charTX[18] = EEPROM.read(17); // byte alto t4
charTX[0] = 18; //inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void BA () // comando tipo BA .... imposta i dati di funzionamento relativi alla modalita' trasmessa al byte 9 ... i byte da impostare sono contenuti nei byte dall'11 al 22
{
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 0 * 4 + 0, charRX[11] ); // busy1
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 0 * 4 + 1, charRX[12] ); // AzioneA1
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 0 * 4 + 2, charRX[13] ); // AzioneB1
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 0 * 4 + 3, charRX[14] ); // AzioneC1
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 1 * 4 + 0, charRX[15] ); // busy2
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 1 * 4 + 1, charRX[16] ); // AzioneA2
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 1 * 4 + 2, charRX[17] ); // AzioneB2
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 1 * 4 + 3, charRX[18] ); // AzioneC2
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 2 * 4 + 0, charRX[19] ); // busy3
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 2 * 4 + 1, charRX[20] ); // AzioneA3
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 2 * 4 + 2, charRX[21] ); // AzioneB3
EEPROM.write(EEPROM.read(8) + ((charRX[9]-65) * EEPROM.read(9)) + 2 * 4 + 3, charRX[22] ); // AzioneC3
//costruisco la risposta di conferma
charTX[7] = 'C'; // stringa contenente un messaggio di risposta
charTX[8] = 'B'; //
charTX[9] = 'A'; //
charTX[10] = 1; // conferma ricezione comando tipo BA
charTX[0] = 10; // inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void BB() // comando tipo BB .... imposta il funzionamento sulla generica modalità di funzionamento trasmessa al byte 9 ...
{
EEPROM.write(5 ,charRX[9]-65 ); // sull'indirizzo 5 della eeprom imposta la modalità operativa ...
//costruisco la risposta di conferma
charTX[7] = 'C'; // stringa contenente un messaggio di risposta
charTX[8] = 'B'; //
charTX[9] = 'B'; //
charTX[10] = 1; // conferma ricezione comando tipo BB
charTX[0] = 10; // inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void BC () // comando tipo BC ... imposta i tempi di ritardo sulla coda dei 4 tx (t1, t2, t3, t4) in mS
{
EEPROM.write(10, charRX[11]); // byte basso t1
EEPROM.write(11, charRX[12]); // byte alto t1
EEPROM.write(12, charRX[13]); // byte basso t2
EEPROM.write(13, charRX[14]); // byte alto t2
EEPROM.write(14, charRX[15]); // byte basso t3
EEPROM.write(15, charRX[16]); // byte alto t3
EEPROM.write(16, charRX[17]); // byte basso t4
EEPROM.write(17, charRX[18]); // byte alto t4
//costruisco la risposta di conferma
charTX[7] = 'C'; // stringa contenente un messaggio di risposta
charTX[8] = 'B'; //
charTX[9] = 'C'; //
charTX[10] = 1; // conferma ricezione comando tipo BC
charTX[0] = 10; // inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
void C1 () // conferma di ricezione/esecuzione dell'ordine
{
}
void C0 (int i) // non ci sono i caratteri minimi necessari
{
//costruisco la risposta di errore di invio
charTX[7] = 'C'; // stringa contenente un messaggio di risposta
charTX[10] = 0; // comunica errore di ricezione nell'ultimo invio di dati
charTX[11] = i; // contiene 1 o 2 a seconda di cosa ha generato l'errore
charTX[0] = 11; // inserisce la posizione dell'ultimo byte usato
invia_charTX ();
}
... poi nello schetch ho cercando di richiamare tutto cioò mettendo questo alll'inizio:
#include <EEPROM.h> //needed to save settings in EEPROM
#define ComSer.h
.. ma non funge nulla .....