Ciao, io non sono un'esperto anzi sono alle prime armi con arduino e la sua programmazione, ma credo di avere un suggerimento al riguardo perchè l'ho sperimentato qualche settimana fa e funziona bene:
void loop(){
if (Serial.available()) {
ser = Serial.read(); //ser è la variabile che raccoglie il contenuto del buffer seriale in ingresso dell'arduino.
if(ser == 'a'){
Trasmissione_Dati_a_PC(); //<----trasmette un dato al pc... o qualsiasi valore letto sulle porte ADC/digitali per esempio...
}
else if(ser == 'c'){
Rx_New_Data_da_PC(); //<----riceve i dati trasmessi dal pc da memorizzare nellèarray...
}
}
poi, in una function chiamata Rx_New_Data_da_PC() inserisco il seguente codice:
void Rx_New_Data_da_PC){ //questa function riceve dei dati ... poi modifica l'array con i nuovi valori...
Azzera_Valori(); //function dove vengono azzerati i vari contatori e/o variabili global usate.
Rx_Data(); //function che receve i dati...
Value1 = Value;
Rx_Data();
Value2 = Value;
Rx_Data();
Value3 = Value;
Rx_Data();
Value4 = Value;
//Errore_RX è un contatore di errore, se i dati ricevuti non sono compresi da byte da 0 a 9 ovvero riceve "m" invece di "1" viene
//incrementato il contatore da 0 (nessun errore) a 1 e il seguente if provvede a inmettere dei valori di default, ma l'uso che se
//ne può fare dipende dalla singola applicazione...
if (Errore_Rx==1) {(Value1 = Linearizzazione_Sensore[0]); (Value2=Linearizzazione_Sensore[1]);
(Value3= Linearizzazione_Sensore[2]); (Value4=Linearizzazione_Sensore[3]);}
Linearizzazione_Sensore[0] = Value1 ; //modifica l'array con il nuovo dato...
Linearizzazione_Sensore[1] = Value2;
Linearizzazione_Sensore[2] = Value3;
Linearizzazione_Sensore[3] = Value4;
}
e questa la function che ci consente di prendere ogni valore arrivato nel buffer:
void Rx_Data(){
delay(50); ////<------------------questo delay è indispensabile!!
if (Serial.available()) {
Ser2 = Serial.read(); //legge il primo byte arrivato dopo in byte "comando"
if (Ser2<48 || Ser2>57) (Errore_Ricezione() ); //una sorta di check, se non incluso nei caratteri 0@9 da errore.
Ser3 = Serial.read(); //secondo byte ricevuto,
if (Ser3<48 || Ser3>57) ( Errore_Ricezione() );
Ser4 = Serial.read(); //terzo byte ricevuto
if (Ser4<48 || Ser4>57) (Errore_Ricezione() );
Ser5 = Serial.read(); //quinto byte ricevuto (una virgola ma per uso separatore)
if (Ser5!=',') (Errore_Ricezione() );
Ser2 = Ser2 - 48;
Ser3 = Ser3 - 48;
Ser4 = Ser4 - 48;
Value = ((Ser2 * 100) + (Ser3 * 10) + (Ser4 * 1) ); //questa semplice formuletta trasformerà i singoli caratteri
//numerici in una cifra int che poi potrà essere trattata nei
//calcoli dell'arduino se necessari...
}
}
ovviamente, le variabili sono global, se sai come passarle tra funzioni potresti fare di meglio, a me va bene così per ora. Spero di essere stato d'aiuto.
Ciao,
Antonio