Ho appena ricevuto le mie arduino uno e mi sono subito tuttato nel provarle 8) 8)
tuttavia ho grossi problemi infatti questo codice, che non mi sembra troppo complesso non mi funziona, non produce l'effetto sperato, ovvero accendere il pin se spento e contrario. L'effetto prodotto è di accendere il pin desiderato, solo che poi resta in quello stato; inoltre il monitor seriale restituisce giusto "ok" ma il low e l'high mi da solo le finali w e h. =( =(
il loop viene eseguito solo quando il serial monitor è aperto e attende nella riga di immissione il numero del pin al quale vuoi cambiare lo stato
void loop(){
if (Serial.available()){ //se la seriale è aperta
char nLed=Serial.read(); // leggi il carattere immesso e mettilo nella variab nLed
digitalWrite(int(nLed), controlla(nLed)); // commuta a 1 se è 0 o viceversa //Serial.write(int(nLed)+4);
Serial.println(controlla(nLed));
}
}
appunto, è quello il mio scopo, solo che se ho un led su mettiamo pin 2, nel serial monitor scrivo 2 e invio: lui riceve 2 controlla se quel pin è acceso o spento e agisce di conseguenza, poi rimane in quello stato fino a quando io gli scrivo di nuovo due e lui dovrebbe invertire (high e low).
Tuttavia eseguendo il programma la parte in cui il led deve di nuovo cambiare stato non va , e allo stesso modo ho problemi nella visualizzazione dei "debug" via serial
credo di aver trovato un problema con la scheda, infatti non funziona neanche con del codice che ho trovato su internet:
#define LEDPIN 13
int state = LOW;
char incomingByte = 0;
void setup() {
Serial.begin(9600);
pinMode(LEDPIN, OUTPUT);
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// we receive a char representing an integer. let's converto to int
int incomingState = (Serial.read() == '1');
// say what you got:
Serial.print("I received: ");
Serial.println(incomingState, DEC);
if(incomingState != state) {
state = incomingState;
digitalWrite(LEDPIN, state); // turns the LED on or off
Serial.print("Setting LED as: ");
Serial.println(state);
}
else {
Serial.print("Doing nothing. LED already: ");
Serial.println(state);
}
}
}
praticamente se io immetto 1 ottengo:
I received: 1
Setting LED as: 1
e subito dopo
I received: 0
Setting LED as: 0
come se dopo il char 1 venisse inviato un char 0 mentre in teoria doveva esserci solo il primo, adesso provo con un'altra scheda XD
Ci sono degli errori di sintassi: quando devi assegnare un valore ad una variabile devi usare l'operatore =, non ==
statoLed[Led]==0; // Questo è un confronto (gli chiedi se la variabile è uguale a 0)
statoLed[Led]=0; // Questa è un'assegnazione.
Inoltre le stringhe di caratteri usano con i doppi apici, mentre l'apice singolo indica un carattere, quindi è ovvio che non ti stampa la stringa intera.
Anzi mi pare strano che non ti dia errori in compilazione...
Tu cerchi anche di ritornare una stringa quando dovresti ritornare un valore intero.
Sicuramente intendevi questo:
return('HIGH'); // ERROREEE!
return HIGH; // Questo va meglio
HIGH e LOW sono dei placeholder per i valori interi 0, 1, in poche parole sono costanti, quindi vanno richiamate non tra apici.
mi sento un idiota a non aver visto i doppi ==, ormai è un anno che faccio informatica e non dovrei cascare più in questi errori, grazie per avermelo fatto notare,
grazie anche per l'info su HIGH e LOW, non avevo compreso bene come funzionassero.
Perfetto, adesso funziona, tuttavia non capisco perchè debba "stabilizzarsi", infatti le prime volte che inserisco il numero del pin ha qualche reazione strana per poi dalla 4° in poi stabilizzarsi(reazioni solo a livello di serial monitor, perchè i led si accendono giusti).