Nội Dung Bài Viết
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?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | #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