che Pasticcio !!!

raga non capisco l'errore di questo sketch un po' lunghetto :smiley: :smiley: :smiley:
sapete dirmi che errore c'è? magari controllatelo con il vostro programma arduino
l'ho preso da un sito e modificato un po'

/* PROGRAMMA DI PROVA DI INTERFACCIA SERIALE BIDIREZIONALE
 Il programma riceve comandi dalla seriale e spedisce
 letture e stati sullo stesso canale.
 Per provare lo sketch, collegare un LED al pin 9
 con un resistore adeguato ed una tensione in ingresso
 al pin A0.
 Caricato lo sketch sull'Arduino, aprire il monitor seriale
 dell'IDE di Arduino con velocità di 19200 bps.
 I comandi accettati sono i seguenti:
 l - lettura: legge il valore della tensione in ingresso al pin analogico
 a - accedi LED: accende il LED
 s - spengi LED: spenge il LED
 q - richiede lo stato del LED. Verrà spedito lo stato del pin
 a cui è collegato il LED. Possibili risposte:
 LED acceso/spento/pilotato con PWM impostato a xxx
 w xxx - scrive un valore di PWM sul pin 9. Possibili
 valori per "xxx" vanno da 0 a 255. Gli spazi sono ignorati.
 I caratteri accettati sono solo quelli numerici (da 0 a 9).
 */

 //pin
 const byte inputPin = A0; //pin analogico di ingresso
 const byte outputPin = 2; //pin di output
 const byte outpitPin = 3;
 const byte outpotPin = 4;

 //variabili globali
 byte statoLed = 0; //contiene il valore sul pin 9
 byte statLed = 0;
 byte staLed = 0;

 void setup() {
   Serial.begin(19200); // apro la seriale
   delay(1000); //attendo che l'utente faccia altrettanto
   Serial.println(F("Pronto")); //sono pronto
 }

 //programma principale
 void loop() {
   int lettura; //contiene il valore di PWM letto dalla seriale
   unsigned long tempMillis; //serve per il timeout sulla ricezione del valore di PWM
   byte caratteri; //contiene il numero di caratteri ricevuti
   byte tempChar; //contiene il carattere letto

   //controllo se c'è qualcosa in arrivo sulla seriale
   if (Serial.available()) {
     byte command = Serial.read(); //leggo il primo byte
     switch (command) { //controllo che sia un comando valido
       case 'l': //lettura
         //invio la lettura dell'ingresso
         Serial.print(F("Lettura ingresso: "));
         Serial.println(analogRead(inputPin));
         break;
       case 'a1': //accendo il LED
         statoLed = 255;
         analogWrite(outputPin, statoLed);
         Serial.println(F("LED blu acceso"));
         break;
       case 'a2': 
         statLed = 255;
         analogWrite(outpitPin, statoLed);
         Serial.println(F("LED rosso acceso"));
         break;
       case 'a3': 
         staLed = 255;
         analogWrite(outpotPin, statoLed);
         Serial.println(F("LED verde acceso"));
         break;
       case 's1': //spengo il led
         statoLed = 0;
         analogWrite(outputPin, statoLed);
         Serial.println(F("LED blu spento"));
         break;
       case 's2': //spengo il led
         statLed = 0;
         analogWrite(outpitPin, statoLed);
         Serial.println(F("LED rosso spento"));
         break;
       case 's3': //spengo il led
         staLed = 0;
         analogWrite(outputPin, statoLed);
         Serial.println(F("LED verde spento"));
         break;
       case 'q1': //l'utente vuole lo stato del LED
         Serial.print(F("LED blu "));
         if (statoLed == 0) {
           Serial.println(F("spento"));
         } else if (statoLed == 255) {
           Serial.println(F("acceso"));
         } else {
           Serial.print(F("pilotato con PWM impostato a "));
           Serial.println(statoLed, DEC);
         }
         break;
       case 'q2': //l'utente vuole lo stato del LED
         Serial.print(F("LED rosso"));
         if (statLed == 0) {
           Serial.println(F("spento"));
         } else if (statLed == 255) {
           Serial.println(F("acceso"));
         } else {
           Serial.print(F("pilotato con PWM impostato a "));
           Serial.println(statLed, DEC);
         }
         break;
       case 'q3': //l'utente vuole lo stato del LED
         Serial.print(F("LED verde"));
         if (staLed == 0) {
           Serial.println(F("spento"));
         } else if (staLed == 255) {
           Serial.println(F("acceso"));
         } else {
           Serial.print(F("pilotato con PWM impostato a "));
           Serial.println(staLed, DEC);
         }
         break;
       case 'w1': //imposto il PWM sul LED
         lettura = 0;
         tempMillis = millis();
         caratteri = 0;
         //mi servono altri caratteri
         do {
           if (Serial.available()) {
             tempChar = Serial.read();
             caratteri++;
             if ((tempChar >= 48) && (tempChar <= 57)) { //è un numero? ok
               lettura = (lettura * 10) + (tempChar - 48);
             } else if ((tempChar == 10) || (tempChar == 13)) {
               //con invio e/o nuova linea esco
               break;
             }
           }
         //esco per timeout, per un valore di PWM maggiore di 255
         //oppure per troppi caratteri senza senso ricevuti
         } while((millis() - tempMillis < 500) && (lettura <= 255) && (caratteri < 10));
         //se il valore di PWM è valido, lo imposto sul pin
         if (lettura <= 255) {
           statoLed = lettura;
           analogWrite(outputPin, statoLed);
           Serial.print(F("LED blu acceso con PWM impostato a "));
           Serial.println(statoLed, DEC);
         }
         break;
     }
   
     
         case 'w2': //imposto il PWM sul LED
         lettura = 0;
         tempMillis = millis();
         caratteri = 0;
         //mi servono altri caratteri
         do {
           if (Serial.available()) {
             tempChar = Serial.read();
             caratteri++;
             if ((tempChar >= 48) && (tempChar <= 57)) { //è un numero? ok
               lettura = (lettura * 10) + (tempChar - 48);
             } else if ((tempChar == 10) || (tempChar == 13)) {
               //con invio e/o nuova linea esco
               break;
             }
           }
         //esco per timeout, per un valore di PWM maggiore di 255
         //oppure per troppi caratteri senza senso ricevuti
         } while((millis() - tempMillis < 500) && (lettura <= 255) && (caratteri < 10));
         //se il valore di PWM è valido, lo imposto sul pin
         if (lettura <= 255) {
           statLed = lettura;
           analogWrite(outpitPin, statLed);
           Serial.print(F("LED rosso acceso con PWM impostato a "));
           Serial.println(statLed, DEC);
         }
         break;
         
         case 'w3': //imposto il PWM sul LED
         lettura = 0;
         tempMillis = millis();
         caratteri = 0;
         //mi servono altri caratteri
         do {
           if (Serial.available()) {
             tempChar = Serial.read();
             caratteri++;
             if ((tempChar >= 48) && (tempChar <= 57)) { //è un numero? ok
               lettura = (lettura * 10) + (tempChar - 48);
             } else if ((tempChar == 10) || (tempChar == 13)) {
               //con invio e/o nuova linea esco
               break;
             }
           }
         //esco per timeout, per un valore di PWM maggiore di 255
         //oppure per troppi caratteri senza senso ricevuti
         } while((millis() - tempMillis < 500) && (lettura <= 255) && (caratteri < 10));
         //se il valore di PWM è valido, lo imposto sul pin
         if (lettura <= 255) {
           staLed = lettura;
           analogWrite(outpotPin, staLed);
           Serial.print(F("LED verde acceso con PWM impostato a "));
           Serial.println(staLed, DEC);
         }
         break;
     }
     }
     //svuoto il buffer da eventuali altri caratteri che non mi servono più
     while (Serial.available()) {
       byte a = Serial.read();
     }
   }
 }

helppppp :slight_smile:

Per cominciare ...
... Arduino -> Tools -> Auto Format ... e ti accorgerai dell'errore ... ]:smiley:

Guglielmo

thanks come sempre Guglielmo :grin: :grin: :grin: :grin:

... era facile no ??? :grin: XD :grin: XD

Guglielmo