LED - LCD
In the following, we will use, in addition to the development environment Visual Studio Code, where I have previously installed the PlatformIO extension, necessary for writing the code for the Sanguino platform (Atmega644P), the simulator Proteus from Labcenter Electronics.
The electrical schematic created in Proteus is shown in the image below:
and the development environment looks like the image below:
next, I will present the code used:
/*
Conectarea LCD la Sanguino
* LCD RS la pinul digital pin 22
* LCD Enable la pinul digital pin 23
* LCD D4 la pinul digital pin 24
* LCD D5 la pinul digital pin 25
* LCD D6 la pinul digital pin 26
* LCD D7 la pinul digital pin 28
* LCD R/W la masa
LED-ul
* Catodul la pinul digital 13
* Anodul la +5V printr-o rezistenta de 1k
*/
#include <Arduino.h>
#include <LiquidCrystal.h> // load the library for the LCD display
// constantele sunt variabile cu valoare fixa
const int ledPin = 13; // pinul unde este conectat LED-ul
const long interval = 500; // intervalul de timp in care se va aprinde ledul (in milliseconde)
// variabile a caror valoare se va modifica
int ledState = HIGH; // ledState utilzat pentru a seta LED-ul ON sau OFF (HiGH => LED=OFF)
unsigned long previousMillis = 0; // variabila care va stoca timpul cand starea LED-ului a fost actualizata
// intializez libraria si asociez pinii Sanguino la LCD
const int rs = 22, en = 23, d4 = 24, d5 = 25, d6 = 26, d7 = 27;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// declar functiile utilizate
void blinkLed();// fuctia care aprinde un LED
void setup() { // aceasta functie va fi rulata o data
lcd.begin(16, 2); // setez nr. de coloane si de linii ale LCD-ului
lcd.print("salut, lume!"); // Afisez un mesaj la LCD
pinMode(ledPin, OUTPUT); // setez pinul digital aferent ledPin ca iesire
}
void loop() { //acesta functie va fi rulata la infinit
lcd.setCursor(0, 1); // setez cursorul la coloana 0, linia 1 (pe randul 2)
lcd.print(millis()/1000); // afisez nr. de secunde de la ultimul reset
blinkLed(); // apelez functia ce aprinde LED-ul
}
void blinkLed() { // acesta functie va aprinde un led
// verifica daca e trecut timpul pentru a schimba satrea LED-ului (ON sau OFF)
// daca diferenta dintre timpul curent (currentMillis) si ultimul timp (previosMillis) salvat
// este mai mare decat timpul impus prin variabila (interval)
unsigned long currentMillis = millis(); // stochez in curentMillis timpul curent
if (currentMillis - previousMillis >= interval) { // verific daca s-a scurs intervalul de timp dorit
// daca da, atunci,
previousMillis = currentMillis; //salvez timpul current
if (ledState == HIGH) {// daca LED-ul este OFF atunci schimb starea lui in ON si invers
ledState = LOW;
} else {
ledState = HIGH;
}
digitalWrite(ledPin, ledState); // setez starea pinului cu variabila ledState stabilita anterior
}
}
The libraries used are:
The video with the simulation is as follows:
The entire project (source code and the file for Proteus) can be downloaded from here LCD_Blink_LED.zip