problema di codice

Ciao a tutti, spero di non disturbare.
Ho attaccato dei led ai pin 2,3,4,5,6,7,8,9,10 della mia yun e ho inserito questo codice:

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int pin = Serial.read();
  if (pin = 0 || pin > 10 || pin < 2 ) {
    Serial.println("IL NUMERO IMPOSTATO NON È UN PIN");
  }
  else{
    digitalWrite(pin, HIGH);
  }; delay(1000);
}

Si dovrebbe accendere un led a seconda del numero che scrivo nel serial monitor, ma il monitor mi continua a scrivere “IL NUMERO IMPOSTATO NON È UN PIN” . Non capisco. Aiutatemi per favore. Ah, un’ altra cosa. Sono un principiante, quindi se pensate che io vi disturbi per cose troppo semplici ditelo. Ciao!!

Ciao ti direi di modificare "pin = 0" in "pin == 0" per iniziare.

ciao Daniele

ciao Daniele, ho provato man c'è lo stesso errore. Ciao pigreco

Ciao a tutti, spero di non disturbare.

mmmm… tu hai intenzione di disturbare? non credo è allora cosa importa se c’è chi si sente disturbato?

Sono un principiante, quindi se pensate che io vi disturbi per cose troppo semplici ditelo. Ciao!!

Si si tratta di cose semplici oltre che banali a cui si deve arrivare studiano almeno le basi C++, osservando gli esempi di codice e dedicando ore e ore a ragionare.

Io non conosco la yun, quindi può essere che le cose siano leggermente differenti da come le descrivo qui.

Serial.read() restituisce un numero intero che è la rappresentazione ASCII del carattere visualizzato sul display.
Esempio per rappresentare a video il carattere A si usa il codice ASCII 65 decimale. Quindi se nel terminale premi A
Serial.read() restituisce il codice 65, per vedere a cosa corrisponde il carattere 1,2,3 ecc, cerca su wikipedia la tabella ASCII. (si tratta di nozioni di base)

if (pin = 0 || pin > 10 || pin < 2 )

=, == sono operatori differenti, = assegna da sinistra verso destra. == è un operatore logico di confronto, quindi
if ( questo == quello ) { //… } è corretto, if (questo = quello) anche se formalmente corretto si comporta diversamente dal precedente, in quanto si tratta di assegnare quello a questo e ciò è stato eseguito con successo la if viene valutata true (vera).

Cerca tra gli esempio di arduino e/o specificamente per yun cosa si deve scrivere per leggera dati da seriale,
normalmente la logica vuole che ci sia un controllo del tipo:

Se ci sono dati nel buffer della seriale allora leggi
int pin;
if (Serial.available() > 0) { // se ci sono dati nel buffer
pin = Serial.read();
}

Altrimenti Serial.read() verrebbe eseguito continuamente anche se non ci sono dati nel buffer.

Ciao.

per verificare cosa recepisce il "Serial.read();" metti un "Serial.println(pin);" prima della "if".

ciao Daniele

@pigreco, nessun disturbo, nessuno nasce “imparato”. Cercando però nel forum troveresti un pò di esempi sulla Serial.read() :smiley:

Ora, stai programmando per Arduino, quindi in C/C++ e NON in JavaScript o VBScript dove le stringhe sono semplici da gestire.
La Serial.read() ti legge dalla seriale 1 carattere alla volta e SOLO 1. Perciò sono cavolacci tuoi leggere i vari caratteri e rimetterli insieme. Inoltre scrivi e invii nel Serial monitor tu stai scrivendo il carattere ‘1’ e non il valore 1.
Arduino riceve un carattere alla volta e ‘1’ è il valore 49 ovvero il codice ascii del ‘1’.
Prova alla variabile pin a toglire il valore 48.
E come dice @MauroTec, DEVI usare Serial.available()

void loop() {
  if(Serial.available()>0)
  { int pin = Serial.read()-48;
    if (pin >= 0 && pin < 10) 
    { digitalWrite(pin, HIGH);
    }
    else
    { Serial.println("IL NUMERO IMPOSTATO NON È UN PIN");
    }
  }
  delay(500);
}

OVVIAMENTE fatto così alla carlona, NON puoi ricevere il numero 10 o 11 perchè in realtà tu spedisci 2 caratteri, ovvero ‘1’ e poi ‘0’ ad esempio, e scatteranno 2 read()
Per ovviare, puoi usare la Serial.parseInt()
http://arduino.cc/en/Serial/ParseInt