Plecand de la articolul anterior vom adauga la montaj un display LCD pentru a afisa anumite informatii in functie de butonul apasat.
Pentru a face acest lucru vom afisa pe displayul LCD un numarator cu care vom observa functionarea montajului.
Displayul folosit este unul de tip 2004 conectat la Arduino prin magistrala I2C.
La apasarea oricarui buton se va aprinde un led martor si se va afisa un mesaj pe display.
Sketchul folosit in acest caz va fi urmatorul:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int buton1 = 2;
int buton2 = 3;
int led1 = 11;
int led2 = 12;
int i = 1;
volatile int intFlag1 = 0;
volatile int intFlag2 = 0;
void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Testarea");
lcd.setCursor(3, 1);
lcd.print("intreruperilor");
lcd.setCursor(1, 3);
lcd.print("electronicstore.ro");
delay(3000);
pinMode(buton1, INPUT);
pinMode(buton2, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
attachInterrupt(digitalPinToInterrupt(buton1),butonApasat1,RISING);
attachInterrupt(digitalPinToInterrupt(buton2),butonApasat2,RISING);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Numarator: ");
lcd.print(i);
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
if (intFlag1 == 1) {
lcd.setCursor(0, 1);
lcd.print("Intrerupere 1");
}
if (intFlag2 == 1) {
lcd.setCursor(0, 2);
lcd.print("Intrerupere 2");
}
delay(1000);
i++;
}
int butonApasat1() {
int buf = digitalRead(led1);
if (buf == 1) {
intFlag1 = 0;
digitalWrite(led1, LOW);
} else {
intFlag1 = 1;
digitalWrite(led1, HIGH);
}
}
int butonApasat2() {
int buf2 = digitalRead(led2);
if (buf2 == 1) {
intFlag2 = 0;
digitalWrite(led2, LOW);
} else {
intFlag2 = 1;
digitalWrite(led2, HIGH);
}
}
Plecand de la exemplul de mai sus vom face urmatoarele modificari:
-butonul 1 va pune numaratorul pe pauza/continuare;
-butonul 2 va reseta numaratorul.
Sketchul modificat este urmatorul:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int buton1 = 2;
int buton2 = 3;
int led1 = 11;
int led2 = 12;
int i = 1;
volatile int intFlag1 = 0;
volatile int intFlag2 = 0;
void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Testarea");
lcd.setCursor(3, 1);
lcd.print("intreruperilor");
lcd.setCursor(1, 3);
lcd.print("electronicstore.ro");
delay(3000);
pinMode(buton1, INPUT);
pinMode(buton2, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
attachInterrupt(digitalPinToInterrupt(buton1),butonApasat1,RISING);
attachInterrupt(digitalPinToInterrupt(buton2),butonApasat2,RISING);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Numarator: ");
lcd.print(i);
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
if (intFlag1 == 1) {
lcd.setCursor(0, 1);
lcd.print("Pauza...");
} else {
i++;
}
if (intFlag2 == 1) {
lcd.setCursor(0, 2);
lcd.print("Resetare...");
delay(2000);
i=1;
intFlag2 = 0;
intFlag1 = 0;
digitalWrite(led1, LOW);
}
delay(1000);
}
int butonApasat1() {
int buf = digitalRead(led1);
if (buf == 1) {
intFlag1 = 0;
digitalWrite(led1, LOW);
} else {
intFlag1 = 1;
digitalWrite(led1, HIGH);
}
}
int butonApasat2() {
intFlag2 = 1;
}
Un video cu cele 2 sketchuri in functiune este mai jos: