Go Down

Topic: Accensione e spegnimento led con modulo bluetooth HC-05 tramite stesso pulsante (Read 448 times) previous topic - next topic

Ruggiero96

Salve a tutti ragazzi,
è da un po' di tempo che sto cercando di risolvere questo problema:  in pratica vorrei accendere e spegnere un led tramite lo stesso pulsante su Android utilizzando il modulo HC-05 e Arduino Uno,  specifico che l'applicazione per avere il pulsante sul telefono è stata creata con Mit app inventor 2.

Sapreste darmi dei consigli su come ottenere il risultato che voglio? Secondo voi è una cosa che devo specificare nel programma di Arduino o nella programmazione dell'app?  Inoltre vorrei chiarire che per prendere un po' di confidenza con questo modulo ho fatto delle prove e sono riuscito ad avere l'accensione e lo spegnimento del LED utilizzando però 2 pulsanti anziché 1.
Di seguito vi spiego come ho programmato l'app e vi riporto il programma Arduino dei due pulsanti:

innanzitutto su mit app inventor 2 ho creato dei blocchi per connettere il telefono al modulo HC-05 tramite bluetooth, poi ho specificato che se si preme il pulsante "on" l'app invia un messaggio di testo al modulo che in questo caso è "A"; mentre quando si preme il pulsante "off" invia un messaggio di testo che questa volta è "B".



Ringrazio tutti anticipatamente per la risposta,
Un saluto ;) ;)

Code: [Select]

char com;
int ledpin = 8;
void setup() {
pinMode(ledpin, OUTPUT);              //dichiarazione dell'OUTPUT
Serial.begin(9600);                       // inizializzazione seriale
}
void loop() {
if( Serial.available() )
{
com = Serial.read();   }                //controllo input da seriale
if( com == 'A')   {                        //se riceve 'A' dal modulo HC-05, accende il led
digitalWrite(ledpin, HIGH);
}
else {
if( com == 'B')                            //se riceve 'B' dal modulo HC-05, spegne il led
digitalWrite(ledpin, LOW);  
}
}

gpb01

Buongiorno,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... 

... poi,  in conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo
Search is Your friend ... or I am Your enemy !

Ruggiero96

ciao gpb01, grazie per la dritta...ho fatto tutto quello che lei mi ha chiesto, ora potrei avere dei consigli sul problema che sto cercando di risolvere per favore? :)

gpb01

La logica rimane la stessa, solo che devi usare una variabile come "flag" ...
... inizialmente la metti FALSE e tieni spento il led, ogni volta che ricevi quello che il pulsante invia, la inverti, quindi se FALSE -> TRUE e se TRUE -> FALSE ... e con quella comandi il tuo LED.

Guglielmo
Search is Your friend ... or I am Your enemy !

Ruggiero96

Grazie mille per avermi risposto...ci proverò e le farò sapere ;)

Ruggiero96

Ciao Guglielmo,
ho provato ad usare le variabili che lei mi ha indicato, ma, siccome variabili di tipo booleane non le ho mai utilizzate, non so precisamente come utilizzarle per raggiungere il mio scopo..  :(
sarebbe così gentile da scrivermi un esempio di codice modificando il programma da me postato nella domanda?
Mi scusi per il disturbo..
Ruggiero

gpb01

Allora,
ti dico a grandi linee come fare ed il codice lo scrivi tu ... ;)

1. dichiari una variabile di tipo byte, es. statoLED e la inizializzi a false
2. nell loop() ...
2.1 fai la digitalWrite(ledpin, statoLED);
2.2 guardi se c'è qualche cosa sulla seriale
2.3 se SI, verifichi che sia il carattere che stai aspettando. Se è lui non fai altro che fare statoLED = ~statoLED; (guardati nel reference l'operatore bitwise not)
3. fine del loop(), si ricomincia dal 2.1

... ora mettilo in pratica.

Guglielmo
Search is Your friend ... or I am Your enemy !

Ruggiero96

Grazie mille Guglielmo mi è stato molto d'aiuto, cercherò di arrivare al mio obiettivo attraverso i suoi consigli  ;)
Ruggiero

ExperimentUno

Il discorso è sul ragionamento logico.
Se la prima volta che arriva il comando, si deve memorizzare l'evento. Questo evento è stato assunto come falso.
Allora definiamo che è vero, tanto come il LED che accendiamo.
La seconda volta, si controlla se l'evento è già avvenuto, quindi si opera per invertire lo stato del led. Anche la memorizzazione dell'evento va cambiata.
A questo punto si è tornati al punto di partenza e si ripete il ciclo. ;)

Le finezze della programmazione, magari si possono mettere in atto in un secondo tempo. Che magari permettono di fare l'operazione in una sola riga.
L'importante è usare la logica.

Go Up