Serial Monitor Input (MA FUNZIONA ???)

Ciao,

sto cercando di usare lo sketch di seguito (Sia con la IDE 023 che con la 1.0) :stuck_out_tongue_closed_eyes:

Qualunque cosa faccia, NON SI RIESCE a leggere l’input dalla tastiera (e ovviamente comportarsi di conseguenza).

Il cuore del programmino è la semplice istruzione “Serial.available()” che, invece di passare il valore del carattere premuto sulla tastiera, rimane SEMPRE A ZERO.

Per caso è necessario qualcosa di particolare - che mi sfugge :blush: - per leggere la tastiera da Serial Monitor ??? Ci ho perso una serata ma non ci levo le gambe. Qualcuno ci vede un errore ?

PS: Dimenticavo, uso Windows 7 (che niente niente fosse questo :cold_sweat: ?)

const int ledPin = 13; // pin the LED is connected to
int blinkRate; // blink rate stored in this variable

void setup()
{
Serial.begin(9600); // Initialize serial port to send and receive at 9600 baud
pinMode(ledPin, OUTPUT); // set this pin as output
}

void loop()
{
if ( Serial.available()) // Check to see if at least one character is available
** {**
** char ch = Serial.read();**
** if(ch >= ‘0’ && ch <= ‘9’) // is this an ascii digit between 0 and 9?**
** {**
** blinkRate = (ch - ‘0’); // ASCII value converted to numeric value **
blinkRate = blinkRate * 100; // actual blinkrate is 100 mS times received digit
}
}
blink();
}
// blink the LED at with the on and off times determined by blinkRate
void blink()
{
digitalWrite(ledPin,HIGH);
delay(blinkRate); // delay depends on blinkrate value
digitalWrite(ledPin,LOW);
delay(blinkRate);
}

L'unico suggerimento che mi viene di darti è di provare a sostituire questo

if ( Serial.available())

con questo

if ( Serial.available()>0)

Ieri qualcuno si lamentava di un problema simile nella gestione del buffer seriale ed aveva risolto mettendo appunto un controllo esplicito sulla presenza di byte nel buffer.

Avevo già provato ad aggiungere >0 ma a quanto pare "Serial.available()" vale NULL perchè anche dosì non riesco a leggere niente.

Vorrei sapere se qualcuno usa questa istruzione con IDE 1.0 su Windows 7, perché ho veramente il dubbio che questa combinazione non la digerisca (è uno sketch così semplice che mi fa veramente imbufalire il fatto che non vada)

che non va cosa significa? che comportamento ha?

Hai già provato a spargere in giro delle Serial.print() per capire dove sta l'errore?

Secondo me avendo buttato dentro allo sketch dei delay che possono essere anche abbastanza lunghi, potresti perdere ciò che ti arriva sulla seriale.

Non credo sia lì l'errore però, concettualmente sarebbe più corretto inizializzare la variabile "blinkRate", perchè fino a che non mandi qualcosa sulla seriale e gli attribuisci un valore quanto varrà?

Provato or ora sotto Kubuntu 11.04 con una Luigino328 e va senza problemi.

Premi "invio" dopo aver scritto il numero? Ricordati che il monitor seriale dell'IDE non invia i caratteri finché non hai premuto invio.

Ciao

mmm provato il tuo sketch su Win7, ide 1.0 e funziona sia da serial monitor che con un emulatore di terminale esterno (PuTTY). Fai una prova con quest'ultimo (lo trovi free su Internet) e vedi se va...

OK TUTTO FUNZIONA

Il problema era sicuramente nel PC, riavviato, tutto è ripreso a funzionare correttamente. GRAZIE a TUTTI


POST CHIUSO :grin: