Campionare due valori a frequenze diverse

Salve, la mia idea è quella di leggere i valori provenienti da due diversi sensori a frequenze diverse attraverso le porte analogiche, e ogni qual volta avviene una lettura questa viene inviata tramite la porta seriale, differenziando i due valori con delle sigle che precedono e seguono il dato ovvero:

A
dato1
A
B
dato2
B

questo è il codice:

int tc1 = 1000;
int tc2 = 5000;
int dato1;
int dato2;
unsigned long  tempo1;
unsigned long  tempo2;


void setup() {

  Serial.begin(4800);

  tempo1 = millis();
  tempo2 = millis();

}

void loop() {
  if ((unsigned long )(millis() - tempo1) > tc1) {
    dato1 = analogRead(A3);
    tempo1 = millis();
    Serial.println('A');
    Serial.println(dato1);
    Serial.println('A');
    
}


  if ((unsigned long)(millis() - tempo2) > tc2) {
    dato2 = analogRead(A8);
    tempo2 = millis();
    Serial.println('B');
    Serial.println(dato2);
    Serial.println('B');

  }

}

Dopo 3 letture corrette di entrambi i dati ovvero:

A
dato1
A
B
dato2
B
A
dato1
A

succede questo:

A
dato1
A
B
dato1
B
A
dato1
A

Potreste aiutarmi a capire per quale motivo?? Grazie

Da così:

Serial.println('B');

a così:

Serial.println( F ( "B" ) );

Il motivo del mancato funzionamento dovrebbe essere dovuto al fatto che "B" ha un carattere terminatore non visibile '\0', e 'B' ne è privo.

Con F() salvi spazio RAM mettendo la stringa in FLASH memory.

Ciao.

Il problema si ripresenta. Ho anche provato a inserire dei numeri al posto delle lettere ma si ripresenta comunque.

Devi aggiungere una lettura a vuoto.

void loop() {
  if ((unsigned long )(millis() - tempo1) > tc1) {
    analogRead(A3);  // lettura a vuoto    
    dato1 = analogRead(A3);
    tempo1 = millis();
    Serial.println(F("A"));
    Serial.println(dato1);
    Serial.println(F("A"));
  }

  if ((unsigned long)(millis() - tempo2) > tc2) {
    analogRead(A8);  // lettura a vuoto    
    dato2 = analogRead(A8);
    tempo2 = millis();
    Serial.println(F("B"));
    Serial.println(dato2);
    Serial.println(F("B"));
   }
}

Risolto!!Ho messo una sola lettura a vuoto su uno dei due sensori. Grazie :D