Arduino Uno LCD skydas 2017.01.19 at 14:40

Noriu išmokti saugoti duomenis Atmegos pastovioje atmintyje, kad išjungus ir vėl įjungus nuskaitytų ir veiktų toliau. Tuo pačiu ir pasitreniruosiu „gaminti” meniu. Pigiausiais sprendimas 0 2×16 LCD skydas iš eBay, kainavo apie 2,5 € su siuntimu. Atvažiavo toks pabraižytas, tai dar uždisputinau su pardavėju.

Kontaktai nesurašyti, bet turėtų būti taip:

Aprašymas toks, vadinamąja, Chinglish kalba:

Features:
This is a basic 16 character by 2 line display.
Utilizes the extremely common HD44780 parallel interface chipset.
Interface code is freely available.
Blue Backlight with white words.
uses 4 Bit Arduino LCD Library.

Size:8cm x 5.9cm - 3.15inch x 2.32inch.

Quantity:1pc
 
LCD Keypad Shield input and output expansion board with 2-line, 16-character LCD with contrast
 adjustment and backlight
Use an analog port will complete five key input, a reset button, the unused spare IO ports
 are extended out, take advantage of IO ports
Occupation digital ports: PIN4 (DB4), 5 (DB5), 6 (DB6), 7 (DB7), 8 (RS), 9 (E), 10 (backlight
 control), analog buttons port A0. Used in conjunction with the Arduino
Module debugging:
1.The LCD Keypad Shield Arduino controller plugged,Then you need to download LCD4Bit_mod.h 
library file to arduino-0015 \ hardware \ libraries in
2.Then compile the following test program will be downloaded to an Arduino in
3.Initial use LCD Keypad Shield, the first observation LCD has no display characters, 
characters may be displayed if there is no contrast is not correct, you can use the 
screwdriver adjust RP1 (clockwise rotation), characters can be transferred to emerge clearly.
Ranging code GP2D12:
#include <LCD4Bit_mod.h> 
LCD4Bit_mod lcd = LCD4Bit_mod(2); 
char GP2D12;
char a,b;
char str1[]="Renge:";
char str2[]=" Renge Over ";
char str3[]="cm"; 
void setup()
{
lcd.init();
lcd.clear();
lcd.printIn("GP2D12 testing..."); 
} 
void loop()
{
GP2D12=read_gp2d12_range(1);
if(GP2D12>80||GP2D12<10)
{
lcd.cursorTo(2,0); 
lcd.printIn(str2); 
}
else
{
a=0x30+GP2D12/10;
b=0x30+GP2D12%10; 
lcd.cursorTo(2, 3); 
lcd.printIn(str1); 
lcd.print(a); 
lcd.print(b);
lcd.printIn(str3); 
} 
delay(50);
}

float read_gp2d12_range(byte pin)
{
int tmp;
tmp = analogRead(pin);
if (tmp < 3)return -1; 
return (6787.0 /((float)tmp - 3.0)) - 4.0;

Reiks bandyt susigaudyt apie ką čia kalba eina :D. Iššifruoju pats sau, kad nepamirščiau ir nereiktų vėl iš naujo galvot:

LCD pajungimas: PIN4 (DB4), 5 (DB5), 6 (DB6), 7 (DB7), 8 (RS), 9 (E), 10 (backlight control)
Mygtukai: A0.

LCD, panašu, pajungtas pagal 4 bitų schemą, gerai, bus galima greitai sumesti programą su LiquidCrystal biblioteka. O mygtukas prijungti prie vieno kontakto… Iš pradžių nusistebėjau, nes nesimatė rezistorių. Paskui radau ir juos ;).

LCD valdomas standartiniu HD44780 valdikliu, taigi, pravers jo aprašymas. Ypač – visokių ne standartinių simbolių „žemėlapis”:

Taigi, norint parašyti kokį nors ypatingesnį simbolį, tarkim juodą stačiakampį █ galima nupaišyti viena eilute – lcd.print(char(255));. Kodėl 255 ? Nes juodojo kvadrato adresas yra 1111 1111 (bin) = 255 (dec). Tas pats galiotų, pavyzdžiui, laipsnio simboliui lcd.print((char)223); – adresas 1101 1111 (bin) = 223 (dec). Galima sukrti ir savo simbolį, jeigu jo nėra lentelėje. Bet apie tai kada nors kitą kartą.

Toliau vat ir bandymas, nuskaitant ADC vertes.


Tai ir matom tokias paspaustų mygtukų ADC reikšmes:

Select – 722
Left – 480
Up – 131 (tuo pačiu dar ir šviesina LCD pašvietimą)
Down – 308 (tuo pačiu dar ir tamsina LCD pašvietimą)
Right – 0
Reset – reikšmės nėra, tiesiog perkrauna uCPU.

Toliau fantazijos reikalas, o šita programėlė štai:

 

#include <LiquidCrystal.h>               //Naudojama biblioteka

// Įėjimai

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    //Inicializuojami prijungti LCD ekraniuko kontaktai
                                        //LiquidCrystal(rs, enable, d4, d5, d6, d7)
             //PIN4 (DB4), 5 (DB5), 6 (DB6), 7 (DB7), 8 (RS), 9 (E), 10 (backlight control)
const int mygtukai = A0;

// Išėjimai

// Kintamieji

int paspaustas = 0;
int i = 0;

void setup() {
  lcd.begin(16, 2);                     //Inicializuojamas LCD (irgi is bibliotekos default komandu)
  lcd.noCursor();                       // Nustatome, kad kursorius ekrane nebus rodomas
  pinMode(A0, INPUT);                   //Mygtukų įėjimas
  pinMode(10, OUTPUT);                  //Pinas ekrano pašvietimo ryškumui nustatyti (PWM)
  analogWrite(10, 0);                   //*********************************
  for (i = 0; i <= 255; i++) {          //* Užgesinam pašvietimą          *
    analogWrite(10, i);                 //* Nedidelis cikliukas           *
    delay (3);                          //* kad pašvietimas iš lėto       *
  }                                     //* užsidegtų iki pilno galingumo *
}                                       //*********************************

void loop() {
  lcd.setCursor(0, 0);                  //Perjungiam kursorių į pirmą eilutę (0 - stulpelis, 0 - eilutė)
  lcd.print("Mygt. indikacija");        //Pirmos eilutės tekstas

  paspaustas = (analogRead(mygtukai));  //Nuskaitom mygtuko reikšmę iš ADC ir priskiriam kintamajam

  if (paspaustas > 1010) {              //Nieko nepaspaudus ADC reikšmė 1023
    lcd.setCursor(0, 1);                //Antros eilutės adresas
    lcd.print("            ");          //Rašom tuščius simbolius info ištrynimui
  }
  if (paspaustas >= 710 && paspaustas <= 730) {
    lcd.setCursor(0, 1);                //Perjungiam kursorių į antrą eilutę (0 - stulpelis, 1 - eilutė)
    lcd.print (paspaustas);             //Nuskaitom ir rašom į ekraną A0 ADC reikšmę
    lcd.print(" - Select");             //Antros eilutės tekstas
  }
  if (paspaustas >= 470 && paspaustas <= 490) {
    lcd.setCursor(0, 1);                //Perjungiam kursorių į antrą eilutę (0 - stulpelis, 1 - eilutė)
    lcd.print (paspaustas);             //Nuskaitom ir rašom į ekraną A0 ADC reikšmę
    lcd.print(" - Left");               //Antros eilutės tekstas
  }
  if (paspaustas >= 120 && paspaustas <= 140) {
    lcd.setCursor(0, 1);                //Perjungiam kursorių į antrą eilutę (0 - stulpelis, 1 - eilutė)
    lcd.print (paspaustas);             //Nuskaitom ir rašom į ekraną A0 ADC reikšmę
    lcd.print(" - Up");                 //Antros eilutės tekstas
    if (i <= 250) {
      i = i + 1;
      analogWrite(10, i);
    }
  }
  if (paspaustas >= 300 && paspaustas <= 320) {
    lcd.setCursor(0, 1);                //Perjungiam kursorių į antrą eilutę (0 - stulpelis, 1 - eilutė)
    lcd.print (paspaustas);             //Nuskaitom ir rašom į ekraną A0 ADC reikšmę
    lcd.print(" - Down");               //Antros eilutės tekstas
    if (i >= 5) {
      i = i - 1;
      analogWrite(10, i);
    }
  }
  if (paspaustas <= 10) {
    lcd.setCursor(0, 1);                //Perjungiam kursorių į antrą eilutę (0 - stulpelis, 1 - eilutė)
    lcd.print (paspaustas);             //Nuskaitom ir rašom į ekraną A0 ADC reikšmę
    lcd.print(" - Right");              //Antros eilutės tekstas
  }
}

Leave a Reply

*