Salve a tutti.
Allego uno sketch a titolo di esempio, prima di fare la mia domanda:
#include <Bounce2.h>
const int myLed = 24; // pin led
const int myButton = 28; // pin pulsante
bool functionOnOff=1; // On/Off
unsigned long debounceDelay = 10; // debounce
Bounce myButtonBounce = Bounce();
void setup ()
{
Serial.begin(9600);
SerialUSB.begin(9600);
pinMode(myLed, OUTPUT);
pinMode(myButton, INPUT_PULLUP);
myButtonBounce.attach(myButton);
myButtonBounce.interval(debounceDelay);
}
void loop ()
{
myButtonBounce.update();
if (myButtonBounce.fell())
{
myFunction ();
}
}
void myFunction ()
{
digitalWrite(myLed, HIGH);
while (functionOnOff)
{
Serial.println("SONO NEL WHILE");
SerialUSB.println("SONO NEL WHILE");
myButtonBounce.update();
if (myButtonBounce.fell()) {
functionOnOff = !functionOnOff;
}
}
digitalWrite(myLed, LOW);
}
Sketch caricato in Arduino Due.
Come vedete nel while ho riportato due print di controllo. Il problema è questo: usando la Serial per effettuare la Serial.println, una volta premuto il pulsante di uscita dal while, in effetti sul Serial Monitor (come è giusto che sia) smette di scrivere "SONO NEL WHILE" e ritorna normalmente al loop. E fin qui tutto ok. Se invece per la verifica uso la SerialUSB.println, entro nel while, a Serial Monitor compare come atteso "SONO NEL WHILE", ma quando premo il pulsante di uscita la SerialUSB continuerà a scrivere ciclicamente nel monitor seriale "SONO NEL WHILE", come se non fosse mai uscito. Tenete presente che comunque i led di spegnimento mi confermano che il ciclo while è stato interrotto. Ma allora perché la SerialUSB continua a ricevere il comando di print?
Ripeto, a livello di codice non mi blocca, però vorrei comprendere la logica della SerialUSB, che sembra andare per conto suo...
Grazie,
saluti a tutti.