salve , vorrei spingere un pulsante e attivare un led e far comparire sul display un messaggio pre impostato
non riesco propio a capire come fare c'e qualche volontario che mi aiuti a capire??
o provato a cercare ma non trovo nulla
il codice per il pulsante ed il led ci sono ma non capisco come far apparire il messaggio
grazie a tutti e scusate la mia ignoranza
sono riuscito a far attivare il messaggio adesso il problema e che quando ripremo il pulsante per disattivare l'uscita mi compare di nuovo il messaggio insieme al precedente
mi sapreste dire come posso risolvere
il codice che sono riuscito a fare e questo
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int led1_pin = 8;
int btn1_pin = 1;
int stato1 = LOW;
void setup() {
pinMode(led1_pin, OUTPUT);
pinMode(btn1_pin, INPUT);
lcd.begin(16, 2);
}
void loop()
{
int in1 = digitalRead(btn1_pin);
if (in1 == HIGH){
stato1=!stato1;
digitalWrite(led1_pin, stato1);
}
if (in1 == HIGH){
lcd.print ( " prova 1 ");
}
delay(2000);
}
grazie
Se compaiono messaggi sovrapposti è dovuo al fatto che non svuoti il display prima di passargli un altro messaggio oppure perchè mandi in esecuzione due messaggi contemporaneamente. Per svuotare il display usa: lcd.clear();
Se devi cambiare spesso i messaggi, ad esempio per far visualizzare scritte scorrevoli od altro, in genere evito ricorrere alla funzione clear perchè svuota completamente il display e può dare l'effetto pulsazione al messaggio. Una soluzione che ho adottato per questo inconveniente è stata quella di inviare sempre messaggi con l'esatto numero di caratteri del display; se il messaggio non è abbastanza lungo basta inserire degli spazi in modo che il messaggio vecchio venga totalmente sovrascritto. Spero di esserti stato d'aiuto
pelletta grazie per la risposta e grazie che alle 5:00 di mattina hai avuto il corragio di rispondermi
ma devo mettere sempre la funzione lcd.clear hai magari qualche esempio su come fare?
(perche io ho una decina di pulsanti e volevo fare che quando ne pigiavo uno mi dava un testo poi se ne pigiavo un altro mi cancellava il testo precedente e immetteva quello nuovo e cosi via..... )
grazie ancora
Ciao, stavolta ti rispondo un pò prima delle 5 di mattina, spero sia lo stesso
Ho visto l'esempio di codice che hai postato, l'lcd è collegato e funzionante? Riesci a vedere dei caratteri? Ti faccio un esempio molto basilare per farti vedere come si può scrivere su un lcd, ti premetto che sono anche io un novellino ma voglio provarci ugualmente visto che è bello condividere con gli altri ciò che si è imparato. Allora, ti posto un piccolo esempio su come far visualizzare una scritta su un display, lo scrivo così senza testarlo ma dovrebbe andare. Potresti farti una funzione esterna al void loop contenente il messaggio da inviare al display e successivamente la richiami quando premi il pulsante:
void pulsante1Press()
{
lcd.setCursor(0,0); // scrivo sulla prima riga del display
lcd.print("Il pulsante 1 è ");
lcd.setCursor(0,1); // scrivo sulla seconda riga del display
lcd.print("stato premuto ");
}
void pulsante2Press()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Il pulsante 2 è");
lcd.setCursor(0,1);
lcd.print("stato premuto");
}
come vedi nella prima funzione non c'è lcd clear perchè ho messo degli spazi in modo da scrivere ugualmente su tutta la riga del display andando così a sovrascrivere il messaggio precedente. Una volta che hai preparato le funzioni, le vai a richiamare nella parte dello script che gestisce i pulsanti:
#define pulsante1 11 // il pin dove è collegato il pulsante
#define pulsante2 12
void setup()
{
lcd.begin(16,2);
pinMode(pulsante1, INPUT);
pinMode(pulsante2, INPUT);
}
void loop()
{
pinPulsante1 = digitalRead(Pulsante1);
if (pinPulsante1 == HIGH)
{
pulsante1Press();
}
pinPulsante2 = digitalRead(Pulsante2);
if (pinPulsante2 == HIGH)
{
pulsante2Press();
}
}
L'ho buttato giù senza testarlo ma dovrebbe andare, comunque sappi che sono un extraMegaUltraPrincipiante sia in elettronica e programmazione, quindi speriamo di averci preso.... Comunque non disperare, se ci sono problemi attrezzo la breadboard e proviamo. Saluti
woowww o provato la funzione lcd,clear e sembra funzionare solo che adesso e sorto un altro problema
per il momento ho provato con soli due pulsanti e due led, il problema e che quando attivo il btn1 accende il led e manda il messaggio e fin qui tutto ok invece se dopo attivo il btn 2 cambia si il messaggio ma rimangono attivati tutti e due i led invece io vorrei attivare o uno o l'altro ovvero se premo btn1 attiva l'uscita led1 e se premo btn2 mi deve disattivare led1 e attivare led2 e cosi via
ragazzi per favore datemi una mano che non ci arrivo sono ancora alle primissime armi
questo e il codice che o provato
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int led1_pin = 8;
int led2_pin = 9;
int btn1_pin = 1;
int btn2_pin = 7;
int stato1 = LOW;
int stato2 = LOW;
void setup() {
pinMode(led1_pin, OUTPUT);
pinMode(led2_pin, OUTPUT);
pinMode(btn1_pin, INPUT);
pinMode(btn2_pin, INPUT);
lcd.begin(20, 4);
}
void loop()
{
int in1 = digitalRead(btn1_pin);
int in2 = digitalRead(btn2_pin);
if (in1 == HIGH){
stato1=!stato1;
digitalWrite(led1_pin, stato1);
}
if (in2 == HIGH){
stato2=!stato2;
digitalWrite(led2_pin, stato2);
}
if (in1 == HIGH){
lcd.clear();
lcd.setCursor (4,1);
lcd.print ( "ABILITAZIONE");
lcd.setCursor (2,2);
lcd.print ("Doccia Tropicale");
}
if (in2 == HIGH){
lcd.clear();
lcd.setCursor (4,1);
lcd.print ( "ABILITAZIONE");
lcd.setCursor (2,2);
lcd.print ("Cromoterapia");
}
delay(2000);
}
grazie
pelletta grazie moltissimo mi hai risolto un gran problema