Lập trình nút nhấn và con trỏ LCD arduino

Tại sao chúng ta cần phải dùng con trỏ lcd ?

Lcd dùng để hiểu thị một số thông tin chương trình cần thiết. Tại sao chúng ta cần phải dùng con trỏ lcd ?

Khi chúng ta dùng nút nhấn(button) để set giá trị cài đặt cho một thông số nào đó, mà dãy số cần cài tương đối quá lớn(ví dụ từ 0 đến vài ngàn). Chẳng lẽ ngồi nhấn nút vài ngàn lần chăng?. Cũng có vài giải pháp lập trình cho trường hợp này. Ví dụ: có một nút nhấn tăng cấp số nhân(x10,x100,x1000). Giải pháp mà tôi nói đến dùng con trỏ lcd.

Sơ đồ kết nối arduino với lcd và nút nhấn như thế nào?

Cần chuẩn bị những gì?

-LCD 16×2

-3 nút nhấn

-Arduino

-Một số dây dẫn

-Thư viện LiquidCrystal LCD

Sơ đồ kết nối

Lập trình nút nhấn và con trỏ LCD arduino
Lập trình nút nhấn và con trỏ LCD arduino

Chương trình code như thế nào?

#include <LiquidCrystal.h>
#define BTN1 8
#define BTN2 7
#define BTN3 6
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Setup switches
int cur=0;
int dem=8;
int var[100];
int P[100];
boolean Move;
boolean Sett=false;
boolean DIS=true;
boolean Count;
//int giam=0;
void setup() {
// set up the LCD's number of columns and rows:
pinMode(BTN1,INPUT_PULLUP);//SETTING / QUAY VE
pinMode(BTN2,INPUT_PULLUP);// DI CHUYEN CON TRO
pinMode(BTN3,INPUT_PULLUP);// TANG GIA TRI
lcd.begin(16, 2);
Serial.begin(9600);
// Print a message to the LCD.
lcd.setCursor(2,0);
lcd.print("SVTDHNLU.COM");
lcd.setCursor(0,1);
lcd.print("Xin chao cac ban!");
delay(5000);
lcd.clear();
}

void loop() {
// Turn off the cursor:
//Display();
//MoveCursor();
//if(digitalRead(BTN1)==0){
//Sett=true;
//lcd.clear();
//Setting();
//Var();

while(DIS){
lcd.setCursor(1,1);
lcd.print("START");
lcd.setCursor(8,1);
lcd.print("SETTING");
Serial.println(Number());
if(digitalRead(BTN1)==0){
delay(500);
if(Count==false){
Count=true;
} else Count=true;
Serial.println("BTN1");
}
if(Count==true){
lcd.clear();
DIS=false;
Sett=true;
}
}

while(Sett){
lcd.setCursor(1,1);
lcd.print("So Vong: ");
if(digitalRead(BTN2)==0){
delay(100);
dem=dem+1;
Move=true;
if(dem>13){
dem=9;
}
P[dem]=dem;

Serial.print("Pdem: ");
Serial.println(P[dem]);
Serial.println("BTN2");
}
for(int z=9;z<14;z++){
lcd.setCursor(z,1);
lcd.print(var[z]);
}
Serial.println(Number());
while(Move){
Move=false;
while(dem==9){ 
lcd.setCursor(P[dem],1);
Var(dem);
lcd.cursor();
delay(100);
lcd.print(var[dem]);
lcd.noCursor();
delay(100);
Serial.println("vong lap 9");
if(digitalRead(BTN2)==0) break;
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
break;
Count=false;
}else Count=false;
}
}
while(dem==10){
lcd.setCursor(P[dem],1);
Var(dem);
lcd.cursor();
delay(100);
lcd.print(var[dem]);
lcd.noCursor();
delay(100);
Serial.println("vong lap 10");
if(digitalRead(BTN2)==0) break;
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
break;
Count=false;
}else Count=false;
}
}
while(dem==11){ 
lcd.setCursor(P[dem],1);
Var(dem);
lcd.cursor();
delay(100);
lcd.print(var[dem]);
lcd.noCursor();
delay(100);
Serial.println("vong lap 11");
if(digitalRead(BTN2)==0) break;
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
break;
Count=false;
}else Count=false;
}
}
while(dem==12){ 
lcd.setCursor(P[dem],1);
Var(dem);
lcd.cursor();
delay(100);
lcd.print(var[dem]);
lcd.noCursor();
delay(100);
Serial.println("vong lap 12");
if(digitalRead(BTN2)==0) break;
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
break;
Count=false;
}else Count=false;
}
}
while(dem==13){ 
lcd.setCursor(P[dem],1);
Var(dem);
lcd.cursor();
delay(100);
lcd.print(var[dem]);
lcd.noCursor();
delay(100);
Serial.println("vong lap 13");
if(digitalRead(BTN2)==0) break;
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
break;
Count=false;
}else Count=false;
}
}
}
if(digitalRead(BTN1)==0){
delay(500);
Serial.println("BTN1");
if(Count==true){
Count=false;
}else Count=false;
}
if(Count==false){
lcd.clear();
Sett=false;
DIS=true;
}
}
}
void Var(int v){
//if(digitalRead(BTN2)==0){
//var=var+1;
//}
if(digitalRead(BTN3)==0){
delay(100);
var[v]=var[v]+1;
}
if(var[v]>9){
var[v]=0;
}
if(var[v]<0){
var[v]=9;
}
Serial.print("VAR: ");
Serial.println(var[v]);

}
double Number(){
double num;
num=10000*var[9]+1000*var[10]+100*var[11]+10*var[12]+var[13];
return num;
}

Download file

File mô phỏng Proteus

Link MediaFire Link dự phòng

File source code Arduino

Link MediaFire Link dự phòng

Bài viết các bạn có thể tham khảo:

Viết một bình luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.