Salve, mi sapete dire come mai se metto un'altra scelta in questo caso il 4, non fa e non mi prende.
vi posto il codice scritto tramite esempi tra siti e tutorial.
ecco:
int led = 6;
int incomingByte = 0;
int blinking = 0;
int pulsantePin = 2;
void setup() {
pinMode(led, OUTPUT);
pinMode(pulsantePin, INPUT);
Serial.begin(115200);
Serial.println("Arduino");
Serial.println("Menu");
Serial.println("1: LED on");
Serial.println("2: LED off");
Serial.println("3: LED Blink");
Serial.println("4: LED Button");
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == '1') {
Serial.println("on LED");
delay(300);
digitalWrite(led, HIGH);
blinking = 0;
}
else if (incomingByte == '2') {
Serial.println("off LED");
delay(300);
digitalWrite(led, LOW);
blinking = 0;
}
else if (incomingByte == '3') {
Serial.println("Blinking LED");
delay(300);
blinking = 1;
}
else if (incomingByte == '4') {
int buttonState = digitalRead(pulsantePin);
Serial.println(buttonState);
delay(300);
blinking = 0;
}
while (blinking == 1) {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
if (Serial.available() > 0) {
break;
}
}
}
}
grazie mille e buona giornata.. vi ringrazio molto e spero che mi risolvete il problema.
si, gli altri funzionano .. ho testato .. ma solo che quando vorrei mettere il pulsante non funziona più..
ma se metto un semplice Serial.println("ciao"); allora funziona anche l'4 menu.
hai idee?
gigetto1982:
quasi riuscito ad far funzionare.. il 4 menu...,
cambiando int incomingByte = 0; ad char incomingByte =0;
l'unico che quando digito 4, non aspetta e mi esce subito dall'if.
Hai idea?
E cosa dovrebbe attendere? Se ti riferisci alla pressione del pulsante il digitalRead non è bloccante ma ti restituisce solo lo stato attuale, se vuoi aspettare la pressione del pulsante devi inserire un ciclo che blocchi il programma in quel punto finché la digitalread non ti restituisce HIGH (se hai colleagto il pulsante a +5V) o LOW se hai colleagto il pulsante a massa
Oltre a quanto segnalato da fabpolli, ti direi, ma perché usi la sbrodolata di "if()" con un test sulla stessa variabile invece di usare uno switch()? Inoltre con lo switch "incomingByte non ti serve più.
Inoltre abituati anche a scrivere qualche commento, che serve sia a te se dovessi riprendere il progetto tra 6 mesi, sia a noi per capire meglio.
Esempio:
...
void loop() {
if (Serial.available() > 0) {
switch ( Serial.read() )
{
case '1': // Accendo il LED
Serial.println("on LED");
delay(300);
digitalWrite(led, HIGH);
blinking = 0;
break;
case '2': // Spegno il LED
Serial.println("off LED");
delay(300);
digitalWrite(led, LOW);
blinking = 0;
break;
case'3': // LED lampeggiante
...
ok, ti ringrazio molto per l'info.. appena posso provo. ti ringrazio molto..
una cosa se metto ad esempio come il tuo codice e invece di mettere le istruzioni metto funzioni e separo il codice in più file va bene?. E poi come devo chiamarli i file sperati dal codice ino principale.
grazie mille.
ok, fatto .. ma rimane il pulsante .. e non so come far aspettare l'input.. comunque quando premo pulsante e invio il 4 .. allora rileva.. ma invece deve funzionare digito 4. e attiva pulsante e posso premere il pulsante e lui dovrebbe scrivere 0, o 1 .
vi posto il codice:
int led = 6; /* led */
int blinking = 0; /* inizialize value blink led */
int buttonPin = 2; /* button on pin 2 */
void setup() {
/**
* setup pin/io
*/
pinMode(led, OUTPUT);
pinMode(buttonPin, INPUT);
/**
* Serial iniliziazion
*/
Serial.begin(115200);
/**
*
*
* Menu
*/
Serial.println("Arduino");
Serial.println("Menu");
Serial.println("1: LED on");
Serial.println("2: LED off");
Serial.println("3: LED Blink");
Serial.println("4: LED Button");
}
/**
Button /on/off
*/
void button_led()
{
int buttonState = digitalRead(buttonPin); /* state button pin 2 */
Serial.println(buttonState); /* print value state */
delay(300);
}
/**
Led on
*/
void led_on()
{
Serial.println("on LED");
delay(300); /* time waiting 300 mills sec */
digitalWrite(led, HIGH);
blinking = 0;
}
/**
Led off
*/
void led_off()
{
Serial.println("off LED");
delay(300);
digitalWrite(led, LOW);
blinking = 0;
}
/**
Led blink
*/
void led_blink()
{
Serial.println("led_blink");
blinking = 1;
}
/**
Loop main
*/
void loop()
{
if (Serial.available() > 0) {
switch ( Serial.read() )
{
case '1': // on LED
led_on();
break;
case '2': // off LED
led_off();
break;
case '3': // blink
led_blink();
break;
case '4': /* button not working function */
button_led();
blinking = 0;
break;
}
}
/**
while blink led state=1;
*/
while (blinking == 1) {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
if (Serial.available() > 0) {
break;
}
}
}
ho scritto i commenti in inglese per imparare l'inglese ed insieme l'elettronica perché in inglese si trova più cose.
gigetto1982:
ok, fatto .. ma rimane il pulsante .. e non so come far aspettare l'input.. comunque quando premo pulsante e invio il 4 .. allora rileva.. ma invece deve funzionare digito 4. e attiva pulsante e posso premere il pulsante e lui dovrebbe scrivere 0, o 1 .
io credo che se andasse ti scriverebbe comunque 1, mai zero
se tu riuscissi a fermare il programma fino alla letture del pulsante
e non è difficile
while(digitalRead(buttonPin)==LOW)
quando hai premuto il pulsante leggerai per forza 1
sono fermamente convinto che tu debba ripensare a cosa vuoi fare nel caso 4