Facebook  -  Twitter      

Questo forum fa uso dei cookie
Questo forum utilizza i cookie per memorizzare i dettagli del tuo login o della tua ultima visita. I cookie sono piccoli files di testo salvati nel computer; i cookie da noi utilizzati sono relativi unicamente ai servizi da noi forniti direttamente o dai banner pubblicitari. I cookie su questo forum salvano inoltre i dettagli relativi alle discussioni lette e alle tue preferenze personali. Sei pregato di selezionare il tasto OKAY se sei consapevole della presenza di questi files e ci autorizzi ad utilizarli per le informazioni specificate.

Indipendentemente dalla tua scelta un cookie verrà salvato per memorizzare nel tuo pc la risposta a questo form. Puoi modificare le impostazioni relative ai cookie nelle preferenze del tuo browser.

  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
LCD con Arduino

#1
Con questo tutorial inizio un anticipazione di un progetto che sto realizzando e che presenterò nei prossimi mesi su "l'internet delle cose". Vediamo ora come interfacciare un display con modulo HD4470 (Hitachi) o compatibile alla nostra scheda arduino e realizzare qualche semplice esempio:

[hide]
1. Scrittura di una stringa su LCD mediante pulsanti
usiamo due pulsanti che portano un segnale HIGH a degli ingressi digitali. Con un tasto andremo ad incrementare la lettera (a,b,c,d....) e con l'altro la colonna dell'LCD.

In questo tutorial andremo a realizzare una struttura composta da:
- Arduino UNO
- Display 16x2
- 2 pulsanti + 2 R di pull-down


.png   LCD_bb.png (Dimensione: 45,81 KB / Download: 2)

Sketch:

Codice:
#include <LiquidCrystal.h>
int Av=8; //AVANTI
int Ca=7; //CAMBIO LETTERA


int a = 0;
int b = 0;
int c= 0;
int avanti = 0;
int cambio = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  pinMode(Av,INPUT); //dichiarazione dei tasti come ingressi
  pinMode(Ca,INPUT);
  pinMode(13,OUTPUT); //utilizzo del led integrato come uscita
  digitalWrite(13,HIGH);  //accensione del led
  lcd.begin(16, 2); //dimensione del display
  lcd.print(" www.routerositalia.it ");
  delay(3000);
  lcd.clear(); //svuoto lo schermo
  lcd.setCursor(0, 0); //imposto il cursore a capo
  lcd.print("Mi chiamo:");
  
}

void loop() {
  avanti = digitalRead(Av); //leggo lo stato dei tasti
  cambio = digitalRead(Ca);
  
  if (cambio == 1){
  b=b +1;
  
  lcd.setCursor(a, 1);
  
  if (b == 1){lcd.print("a");  }
  if (b == 2){lcd.print("b");  }
  if (b == 3){lcd.print("c");  }
  if (b == 4){lcd.print("d"); }
  if (b == 5){lcd.print("e"); }
  if (b == 6){lcd.print("f");  }
  if (b == 7){lcd.print("g");  }
  if (b == 8){lcd.print("h");  }
  if (b == 9){lcd.print("i");  }
  if (b == 10){lcd.print("l");  }
  if (b == 11){lcd.print("m");}
  if (b == 12){lcd.print("n");  }
  if (b == 13){lcd.print("o");  }
  if (b == 14){lcd.print("p"); }
  if (b == 15){lcd.print("q");  }
  if (b == 16){lcd.print("r"); }
  if (b == 17){lcd.print("s");  }
  if (b == 18){lcd.print("t");}
  if (b == 19){lcd.print("u");  }
  if (b == 20){lcd.print("v");  }
  if (b == 21){lcd.print("z"); }
  if (b > 21){b=0;  }

  }
  
  if (avanti == 1){
    a = a + 1;
    b=0;
    delay(250);
  }
delay(150);
  
}

2. Spiegazione della libreria

LiquidCrystal();
Codice:
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Con questa istruzione definiamo i pin connessi ad Arduino. Un errore in questa istruzione potrebbe portare a non visualizzare nulla sul display, quindi attenzione.
Codice:
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

Begin();
Codice:
Begin(#Colonne, #righe);
Con questa istruzione definiamo il numero di righe e di colonne del nostro display.
Codice:
lcd.begin(16,2);

Clear();
Questa istruzione pulisce il display dai caratteri scritti in precedenza
Codice:
lcd.clear();

home();
Posiziona il cursore nella casella in alto a sinistra.
Codice:
lcd.home();

SetCursor();
Codice:
setCursor(#colonne,#righe);
Setta il cursore nella posizione che vogliamo, quindi dopo questa istruzione inizieremo a scrivere in un dato punto del display.
Codice:
lcd.setcursor(0,0); // Equivalente di home.

Write();
Codice:
write(data);
Scrive sul display il carattere associato ad un certo codice HEX.

Print();
Codice:
print(data);
Si usa per scrivere sul display, può essere usata anche con la sintassi print(data,base); in cui se data è esadecimale, base sarà 16, binario base 2 ecc ecc. Data può essere un int, byte, long int, char oppure string.
Codice:
lcd.print("hello world");

cursor(); e noCursor();
cursor(); Mostra un carattere underscore nella casella in cui verrà scritto il prossimo carattere. noCursor(); nasconde il cursore.

blink(); e noBlink();
blink(); mostra un cursore lampeggiante, mentre noBlink(); lo nasconde.

display(); e noDisplay();
Abilita e disabilita il display.

scrollDisplayLeft(); e scrollDisplayRight();
Queste istruzioni si usano per shiftare a destra(right) o a sinistra(left) il testo ed il cursore di uno spazio.

autoscroll(); e noAutoscroll();
Setta il display in modalità autoscroll, questa modalità scriverà ogni nuovo carattere nella stessa posizione del precedente e il precedente sarà shiftato, se stiamo scrivendo in modalità da sinistra a destra (di default), il testo sarà shiftato a sinistra.Se stiamo scrivendo in modalità da destra a sinistra, il display scorrerà verso destra. noAutoscroll(); esce dalla modalità autoscroll.

LeftToRight(); e RightToLeft();
LeftToRight(); setta la modalità di scrittura da sinistra a destra (default), mentre RightToLeft(); setta la modalità di scrittura da destra a sinistra.

CreateChar();
Codice:
createChar(num,data);
Crea un carattere personalizzato, num varia da 0 a 7 e indicizza i caratteri personalizzati. Data è una mappa dei bit del nuovo carattere.

Esempio:

Codice:
/*
  LiquidCrystal Library - Custom Characters

Demonstrates how to add custom characters on an LCD  display.  
The LiquidCrystal library works with all LCD displays that are
compatible with the  Hitachi HD44780 driver. There are many of
them out there, and you can usually tell them by the 16-pin interface.

This sketch prints "I <heart> Arduino!" and a little dancing man
to the LCD.

  The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K potentiometer:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
* 10K poterntiometer on pin A0

created21 Mar 2011
by Tom Igoe
Based on Adafruit's example at
https://github.com/adafruit/SPI_VFD/blob/master/examples/createChar/createChar.pde

This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal

Also useful:
http://icontexto.com/charactercreator/

*/

// 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);

// make some custom characters:
byte heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

byte smiley[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b10001,
  0b01110,
  0b00000
};

byte frownie[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b00000,
  0b01110,
  0b10001
};

byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};
void setup() {
  // create a new character
  lcd.createChar(0, heart);
  // create a new character
  lcd.createChar(1, smiley);
  // create a new character
  lcd.createChar(2, frownie);
  // create a new character
  lcd.createChar(3, armsDown);  
  // create a new character
  lcd.createChar(4, armsUp);  

  // set up the lcd's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the lcd.
  lcd.print("I ");
  lcd.write(byte(0));
  lcd.print(" Arduino! ");
  lcd.write(byte(1));

}

void loop() {
  // read the potentiometer on A0:
  int sensorReading = analogRead(A0);
  // map the result to 200 - 1000:
  int delayTime = map(sensorReading, 0, 1023, 200, 1000);
  // set the cursor to the bottom row, 5th position:
  lcd.setCursor(4, 1);
  // draw the little man, arms down:
  lcd.write(3);
  delay(delayTime);
  lcd.setCursor(4, 1);
  // draw him arms up:
  lcd.write(4);
  delay(delayTime);
}
[/hide]
Cita messaggio


[-]
Condividi/Segnala (Mostra tutti)
Facebook Linkedin Twitter

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Funzionamento degli Interrupts con Arduino hamtarociaoo 0 2'170 18-12-2013, 06:35
Ultimo messaggio: hamtarociaoo
  Guida: Gestione degli Interrupts su Arduino hamtarociaoo 0 1'732 13-12-2013, 21:26
Ultimo messaggio: hamtarociaoo
  Guida: Domotica di base con Arduino hamtarociaoo 7 6'507 06-12-2013, 17:54
Ultimo messaggio: mannana93

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Utenti che stanno guardando questa discussione:
1 Ospite(i)


Powered by MyBB, © 2002-2017 MyBB Group.