Accendere un led sia da bluetooth sia da pulsante

Salve
Ho il seguente problema che non so come risolvere. Voglio accendere e spegnere un led sia tramite bluetooth con un'app per android sia da un pulsante. Per adesso riesco ad accenderlo soltanto tramite bluetooth tramite il codice che posterò più sotto. Non riesco a capire bene dove inserire il codice per l'accensione tramite pulsante (premo una volta e si accende il led e si spegne quando premo di nuovo)
Codice:

#define LED 2
int pushButton = 12
int val = 0;
int LEDState = 0;
void setup()
{
pinMode(pushButton, INPUT);
pinMode(LED, OUTPUT);

Serial.begin(9600);
delay(1000);
}

void loop()
{
while (Serial.available())
{

char dato= Serial.read();
switch(dato)
{
case 'A':
{
digitalWrite(2, HIGH);
Serial.println("Relè 1 ON");
break;
}
case 'a':
{
digitalWrite(2, LOW);
Serial.println("Relè 1 OFF");
break;
}
}
}}
Grazie per l'aiuto :slight_smile:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Il led lo dovresti accendere/spegnere in base al valore di "stato" che quindi mantiene in memoria lo stato del led, acceso/spento.
Questo ti permette di settare lo "Stato" sia da BT che da bottone.
Parti naturalmente con int stato = LOW, prevstato=LOW;

Io ti consiglierei di fare uno sketch separato per il solo pulsante. Poi dopo possiamo pensare di metterlo insieme a questo.
Sul bottone, durante la pressione, c'e' anche il problema del debounce. Se cerchi nel forum o su internet se ne parla spesso.
Per il bottone, essendo uno solo, ti conviene avere anche il concetto di "prevstato"
Servirà anche da BT perchè se arriva un comando 'A' ma il led era già acceso da un precedente comando 'A' è inutile riaccenderlo.

Ho già lo sketch separato per il pulsante, il problema è come metterli insieme.

Sono interessato anche al concetto di "prevstato", infatti mi sono posto il problema ma pensavo che dipendesse dall'app android. Grazie

aston-91:
Ho già lo sketch separato per il pulsante, il problema è come metterli insieme.

Postalo

Eccolo! Ovviamente cambierò le costanti ledState con Stato, ecc.
int pushButton = 12;
int ledState;

void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
pinMode(2, OUTPUT);

}

void loop() {
int buttonState = digitalRead(pushButton);

Serial.println(buttonState);
if (buttonState == 1) {
ledState = digitalRead (2);
if (ledState == 0)
digitalWrite (2, HIGH);
else
digitalWrite(2, LOW);
delay (300);
}

delay(1);

Up!
Stesso problema (non risolto). Devo comandare un led sia con un pulsante sia con app tramite HC-06.
Funzione OR non funziona, o meglio il pulsante si ma il comando tramite blueetooth no.
In quest'ultimo caso il Led si accende per qualche millisecondo e si spegne, immagino perchè nel loop lo stato torna a 0.
Quindi, come faccio a mantenere il led acceso col comando bluetooth?

Qui il codice

#define LED 13
#define BUTTON 8
int val=0;
int vecchioval=0;
int stato=0;

void setup() {
pinMode(LED,OUTPUT);
pinMode(BUTTON,INPUT);
Serial.begin(9600);
}

void loop(){

val=digitalRead(BUTTON);

if ((val==HIGH)&&(vecchioval==LOW)){
stato = 1-stato;
}

vecchioval=val;
char c = Serial.read();

if ((stato==1)||(c=='H')){
digitalWrite(LED,HIGH);
}

if((stato==0)||(c=='L')){
digitalWrite(LED,LOW);
}
}