ciao a tutti, ho iniziato da poco con arduino .
ho un scker di un programma che usa un lcd 16x2
e sono indicate alcune informazioni.
ora oltre a definire il pin di ingresso (il cambio di schermata avviene con un pulsante )
quale e il codice da usare?
creare 2 pagine per un solo 2x16
23 messaggi
• Pagina 1 di 3 • 1, 2, 3
0
voti
La tua domanda non mi è chiara.
Hai già un programma demo funzionante?
Hai montato l'hardware, funziona ?
Per scrivere più pagine, riscrivi ogni volta tutte le due righe di caratteri.
Hai già un programma demo funzionante?
Hai montato l'hardware, funziona ?
Per scrivere più pagine, riscrivi ogni volta tutte le due righe di caratteri.

0
voti
MarcoD ha scritto:La tua domanda non mi è chiara.
Questo mi consola, non l' ho capita nemmeno io.
0
voti
ciao e grazie della risposta.
questo e' il codice, che ho modificato da scrivi a sinistra.
li funziona ed va bene.
ora a parte la stringa di abilitazione pin , come creo un'altra o altre usando un comando esterno?
un'altra pagina 16x2 devo ancora crearla
questo e' il codice, che ho modificato da scrivi a sinistra.
li funziona ed va bene.
ora a parte la stringa di abilitazione pin , come creo un'altra o altre usando un comando esterno?
- Codice: Seleziona tutto
void setup()
{
lcd.createChar(1, smiley);
lcd.createChar(2, sat1);
lcd.createChar(3, sat2);
lcd.createChar(4, sat3);
lcd.begin(16, 2);
lcd.clear();
gpsSerial.begin(9600);
lcd.setCursor(0, 0);
lcd.print(" Ricerca ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(" Satelliti");
lcd.setCursor(12, 1);
lcd.write(2);
lcd.write(3);
lcd.write(4);
delay(5000);
lcd.clear();
lcd.leftToRight(); //Scrivi da sinistra a destra
lcd.setCursor(0, 0); //Sposta il cursore sulla prima riga 5° colonna
lcd.write(2);
lcd.write(3);
lcd.write(4);
for (int i = 0; i < 13; i++) { //Esegui tredici volte
lcd.scrollDisplayRight(); //Sposta a destra tutte le scritte
delay(500);
}
lcd.clear();
lcd.setCursor(13, 1); //Sposta il cursore sulla prima riga 5° colonna
lcd.write(2);
lcd.write(3);
lcd.write(4);
delay(500);
for(int i = 0; i<12; i++){ //Esegui 10 volte
lcd.scrollDisplayLeft(); //Sposta a sinistra
delay(500);
}
lcd.clear();
}
// end setup
void loop()
{
int start = millis();
int now = millis();
un'altra pagina 16x2 devo ancora crearla
-

danielealfa
243 2 4 7 - Expert

- Messaggi: 1313
- Iscritto il: 27 mag 2009, 22:51
0
voti
Se vuoi fare in modo che in qualunque parte del loop ti trovi alla pressione di un tasto esterno si disegni una nuova schermata, io definirei una funzione che disegni la nuova schermata e la chiamerei con un interrupt.
0
voti
grazie delle prime informazioni.
io ho un loop(cosi si chiama , credo) che legge dei segnali da un modulo gps ,, tramite tx e rx .
credo che un interup non vada bene...almeno sono all ' inizo e sono un po ' ignorante
e volevo modificare questo progetto.
ho gia' fatto degli esperimenti...
scusate la mia mancanza in futuro
io ho un loop(cosi si chiama , credo) che legge dei segnali da un modulo gps ,, tramite tx e rx .
credo che un interup non vada bene...almeno sono all ' inizo e sono un po ' ignorante
e volevo modificare questo progetto.
ho gia' fatto degli esperimenti...
scusate la mia mancanza in futuro
-

danielealfa
243 2 4 7 - Expert

- Messaggi: 1313
- Iscritto il: 27 mag 2009, 22:51
1
voti
Il tuo codice non è scritto rispettando alcune convezioni delle API di Arduino. Nella funzione setup devi semplicemente inizializzare LCD e tutti gli altri dispositivi utilizzati, tutta la logica la metti nella funzione loop. Lo so' che in rete si trovano programmi per Arduino dove fanno tutto della funzione di setup, ma questo non giustifica scrivere codice in quel modo.
La tua domanda iniziale è quasi incompressibile, comunque la gestione di pagine multiple vengono gestiste semplicemente con una macchina a stati, dove ogni stato è una pagina, ad ogni cambio di stato viene ripulito tutto lo schermo e riscritto in base al nuovo stato.
La tua domanda iniziale è quasi incompressibile, comunque la gestione di pagine multiple vengono gestiste semplicemente con una macchina a stati, dove ogni stato è una pagina, ad ogni cambio di stato viene ripulito tutto lo schermo e riscritto in base al nuovo stato.
0
voti
questo puo essere un esempio?
- Codice: Seleziona tutto
/* ARDUINO MENU selezionabile con 4 OPZIONI e Display LCD I2C
*
* (Temperatura, Led Verde, Led Rosso, Relè)
*
* Per maggiori info visitate www.progettiarduino.com
*
* Autore Fancello Salvatore
*/
#define butUp 12 //pulsante SU al pin 12
#define butDown 11 //Pulsante GIU al pin 11
#define butP 10 //Pulsante SELEZIONA al pin 10
#define butM 9 //non utilizzato in questo esempio
#define LampRed 13 //LED Rosso al pin 13
#define LampRed2 1 //LED Verde al pin 1
#define LampRele 8 //Relè al pin 8
#define PhotoSensor A0 // sensore temperatura al pin analogico A0
//Funzioni dei vari cicli
void changeMenu();
void dispMenu();
void mostraMsg();
void controlLed();
void controlLed2();
void controlRele();
void temperatura();
//Variabili globali
char menu = 0x01;
char set1 = 0x00, set2 = 0x00 , set3 = 0x00;
boolean t_butUp, t_butDown, t_butP, t_butM;
int sensorValue = 0;
int reading = 0;
int sensorPin = A0;
//DISPLAY Mappa Hardware
#include <Wire.h> // libreria wire presente, di fault, nell'IDE
#include <LiquidCrystal_I2C.h> // libreria di gestione del display lcd
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // definisce la tipologia del display
void setup() {
lcd.begin(16, 2);
for (char i=9; i<13; i++){ //Ingresso dei pulsanti
pinMode(i, INPUT_PULLUP);
}
pinMode(LampRed, OUTPUT); //LED ROSSO
pinMode(LampRed2, OUTPUT); //LED VERDE
pinMode(LampRele, OUTPUT); //RELÈ
digitalWrite (LampRele, HIGH); //Imposto inizialmente il relè allo stato Alto (Attivo)
t_butUp = 0x00; //Inizializza le variabili come ZERO
t_butDown = 0x00;
t_butP = 0x00;
t_butM = 0x00;
}
void loop() {
changeMenu(); //Menu di scambio
dispMenu(); //Selezionare il menu
}
//Funzioni
void changeMenu(){
if(digitalRead(butUp) == 0x00){ //Setta la variabile in 1 se si preme il pulsante UP
t_butUp = 0x01;
}
if(digitalRead(butDown) == 0x00){ //Setta la variabile in 1 se si preme il pulsante DOWN
t_butDown = 0x01;
}
if(digitalRead(butUp) && t_butUp){
t_butUp = 0x00;
lcd.clear(); //Cancella Schermo lcd
menu++;
if(menu > 0x04){
menu = 0x01;
}
}
if(digitalRead(butDown) && t_butDown){
t_butDown = 0x00;
lcd.clear();
menu--;
if(menu < 0x01){
menu = 0x04;
}
}
}
void dispMenu(){
switch(menu){
case 0x01:
controlLed(); //Funzione controllo led1
break;
case 0x02:
controlRele(); //Funzione controllo relè
break;
case 0x03:
temperatura(); //Funzione controllo temperatura
break;
case 0x04:
controlLed2(); //Funzione controllo led2
break;
}
}
/*Ciclo per la funzione controllo LED1*/
void controlLed(){
lcd.setCursor(0,0);
lcd.print("ACCENSIONE LED 1");
if(digitalRead(butP) == 0x00){
t_butP = 0x01;
}
if(digitalRead(butM) == 0x00){
t_butM = 0x01;
}
if(digitalRead(butP) && t_butP){
t_butP = 0x00;
set1++;
if(set1 > 2){
set1 = 0x01;
}
switch(set1){
case 0x01:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRed, HIGH); //Accendo il Led Rosso
lcd.print("LED ROSSO ON");
break;
case 0x02:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRed, LOW); //Spengo il Led Rosso
lcd.print("LED ROSSO OFF");
break;
}
}
}
/*Ciclo per la funzione controllo Relè*/
void controlRele(){
lcd.setCursor(0,0);
lcd.print("RELE");
if(digitalRead(butP) == 0x00){
t_butP = 0x01;
}
if(digitalRead(butM) == 0x00){
t_butM = 0x01;
}
if(digitalRead(butP) && t_butP){
t_butP = 0x00;
set2++;
if(set2 > 2){
set2 = 0x01;
}
switch(set2){
case 0x01:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRele, LOW);
lcd.print("RELE ON");
break;
case 0x02:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRele, HIGH);
lcd.print("RELE OFF");
break;
}
}
}
/*Ciclo per la funzione controllo TEMPERATURA*/
void temperatura(){
reading = analogRead(sensorPin);
int celsius = reading/2;
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.setCursor(0,1);
lcd.print(celsius, DEC);
lcd.print((char)223);
lcd.print("C");
delay(10);
}
/*Ciclo per la funzione controllo Led Verde*/
void controlLed2(){
lcd.setCursor(0,0);
lcd.print("ACCENSIONE LED 2");
if(digitalRead(butP) == 0x00){
t_butP = 0x01;
}
if(digitalRead(butM) == 0x00){
t_butM = 0x01;
}
if(digitalRead(butP) && t_butP){
t_butP = 0x00;
set3++;
if(set3 > 2){
set3 = 0x01;
}
switch(set3){
case 0x01:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRed2, HIGH);
lcd.print("LED VERDE ON");
break;
case 0x02:
lcd.clear();
lcd.setCursor(0,1);
digitalWrite (LampRed2, LOW);
lcd.print("LED VERDE OFF");
break;
}
}
}
-

danielealfa
243 2 4 7 - Expert

- Messaggi: 1313
- Iscritto il: 27 mag 2009, 22:51
0
voti
come da consiglio ho corretto il setup e sto rivedendo la logica.
ho un problema, con questo codice, l animazione non si ferma , e il testo dopo non e' fermo.
ho provato anche con il comando write ma si ferma tutto quanto .
dove sbaglio?[code
ho un problema, con questo codice, l animazione non si ferma , e il testo dopo non e' fermo.
ho provato anche con il comando write ma si ferma tutto quanto .
dove sbaglio?[code
- Codice: Seleziona tutto
B01110,
B00110,
};
TinyGPSPlus gps;
SoftwareSerial gpsSerial(9, 8);
const int serialTime = 200;
void setup()
{
lcd.createChar(1, smiley);
lcd.createChar(2, sat1);
lcd.createChar(3, sat2);
lcd.createChar(4, sat3);
lcd.begin(16, 2);
lcd.clear();
gpsSerial.begin(9600);
lcd.setCursor(0, 0);
lcd.print(" CAPTURING ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(" SATELLITES");
lcd.setCursor(12, 1);
lcd.write(2);
lcd.write(3);
lcd.write(4);
delay(3000);
lcd.clear();
} // end setup
void loop()
{
lcd.leftToRight(); //Scrivi da sinistra a destra
lcd.setCursor(0, 0); //Sposta il cursore sulla prima riga 5° colonna
lcd.write(2);
lcd.write(3);
lcd.write(4);
for (int i = 0; i < 13; i++) { //Esegui tredici volte
lcd.scrollDisplayRight(); //Sposta a destra tutte le scritte
delay(500);
}
lcd.clear();
lcd.setCursor(13, 1); //Sposta il cursore sulla prima riga 5° colonna
lcd.write(2);
lcd.write(3);
lcd.write(4);
delay(500);
for (int i = 0; i < 12; i++) { //Esegui 10 volte
lcd.scrollDisplayLeft(); //Sposta a sinistra
delay(500);
}
lcd.clear();
int start = millis();
int now = millis();
do {
while (gpsSerial.available() > 0) {
gps.encode(gpsSerial.read());
-

danielealfa
243 2 4 7 - Expert

- Messaggi: 1313
- Iscritto il: 27 mag 2009, 22:51
23 messaggi
• Pagina 1 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 13 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





