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

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
File source code Arduino
Bài viết các bạn có thể tham khảo:
- Điều Khiển Động Cơ Bước Bằng 3 Nút Nhấn với A4988
- Giới thiệu tên một số quyển sách giúp tự học arduino
- Tài liệu iot – Building Arduino Projects for the Internet of Things
