Mục lục:
Video: Arduino UNO (tạo menu và chức năng): 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Trong phần hướng dẫn này, chúng ta sẽ khám phá cách tạo menu, đọc nhiệt độ từ cảm biến TC74A0 và hiển thị "giá trị" (trong trường hợp này là số điện thoại di động) theo cách vô hạn, nhưng giới hạn ở bộ nhớ trên bo mạch của arduino.
Chúng tôi sẽ sử dụng
-Arrays
-Màn hình tinh thể lỏng
-Keypad
Hướng dẫn sử dụng bao gồm trong bước cuối cùng.
Bước 1: Các thành phần
Arduino Uno
· Bàn phím 4x4
· Cảm biến nhiệt độ kỹ thuật số TC74A0
· Mô-đun LCD I2c 16x2
· Màn hình tinh thể lỏng 16x2
· Dây nhảy
· Breadboard
· Máy tính cá nhân
· Arduino IDE
· Cáp chuyển
Bước 2: Nối dây thành phần
CẢM BIẾN TEMP VÀ LCD ĐƯỢC KẾT NỐI TRÊN CÙNG MỘT DÒNG ĐẾN SDA VÀ SCL (A4, A5)
LCD (Mô-đun I2c)
o SDA đến A5 trên Arduino
o SCL sang A4 trên Arduino
o VCC đến 5V trên Arduino
o GND sang GND trên Arduino
· Bàn phím 4 x 4
o Chân 1 - 8 trên Bàn phím được kết nối với chân 9 - 2 tương ứng trên Arduino
Cảm biến nhiệt độ TC74A0
o TC74A0 chân 2 đến SDA trên Arduino
o TC74A0 chân 3 đến GND trên Arduino
o TC74A0 chân 4 đến SCL trên Arduino
o TC74A0 chân 5 đến 5V trên Arduino
Bước 3: Mã
#include // Bao gồm các thư viện khi biên dịch
#bao gồm
#bao gồm
#define Password_Lenght 5
#define Command_Lenght 3
#define CellNumber 10
int người dùng = 0;
int Hiển thị = 0;
địa chỉ int = 72; // ĐỊA CHỈ tc74a0
int I = 0;
int USER;
int X = 0;
int XY = 0;
int tạm thời;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Dữ liệu [Mật khẩu_Lenght];
char Master [Password_Lenght] = "5466"; //MẬT KHẨU MỞ KHÓA
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte ROWS = 4; // bốn hàng
const byte COLS = 4; // bốn cột
byte rowPins [ROWS] = {5, 4, 3, 2};
byte colPins [COLS] = {9, 8, 7, 6};
byte data_count = 0, master_count = 0;
bool Pass_is_good;
Màn hình LCD LiquidCrystal_I2C (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // BẮT ĐẦU BÀN PHÍM
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Keypad customKeypad = Bàn phím (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
void setup ()
{
Serial.begin (9600); // điều này tạo ra Serial Monitor
Wire.begin (); // điều này tạo ra một đối tượng Wire
lcd.begin (16, 2);
LCD đèn nền();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vui lòng đợi 3"); //ĐANG TẢI MÀN HÌNH
chậm trễ (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vui lòng đợi 2");
chậm trễ (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vui lòng đợi 1");
chậm trễ (300);
lcd.clear ();
String myString = "ARDUINO HƯỚNG DẪN";
lcd.setCursor (2, 2);
lcd.print (myString);
chậm trễ (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
chậm trễ (300);
}
lcd.clear ();
lcd.print ("Nhập Mật khẩu");
}
void loop ()
{
switch (Hiển thị) // CHÚNG TÔI ĐANG Ở ĐÂU TRONG MENU CHÍNH
{// NGƯỜI DÙNG ĐÃ BÁO A, B, C, D
trường hợp 0:
{
Mật khẩu();
}
nghỉ;
trường hợp 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Menu Chính");
Hiển thị = 2;
chậm trễ (100);
nghỉ;
}
trường hợp 2:
{
char customKey = customKeypad.getKey ();
chuyển đổi (customKey)
{
trường hợp 'A':
{
Serial.println ("A đã được nhấn");
StoreUser ();
nghỉ;
}
trường hợp 'B':
{
Serial.println ("B được nhấn");
if (người dùng == 0) {
lcd.clear ();
lcd.print ("KHÔNG CÓ NGƯỜI DÙNG TIẾT KIỆM");
chậm trễ (3000);
lcd.clear ();
Hiển thị = 1;
nghỉ;
}
DisplayUsers (); nghỉ;
}
trường hợp 'C':
{
Serial.println ("C đã được nhấn"); // KIỂM TRA TRONG THỜI GIAN ĐÃ SỬ DỤNG
int ext = 0;
trong khi (! ext) {
char ch;
temp = TempMenu ();
if (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temparature");
lcd.setCursor (0, 1);
lcd.print (tạm thời);
lcd.print ("C");
tempPre = tạm thời;
chậm trễ (500);
}
ch = customKeypad.getKey ();
if (ch == '*') // THOÁT MENU NHIỆT ĐỘ (if * PRESSED)
{
ext = 1;
lcd.clear ();
Hiển thị = 1;
}
}
nghỉ;
TempMenu ();
nghỉ;
}
trường hợp 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
chậm trễ (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("THÁNG 5, 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
chậm trễ (3000);
lcd.clear ();
Hiển thị = 1;
}
}
}
}
}
// CÁC CHỨC NĂNG TÙY CHỈNH ĐỂ GỌI GIÁ TRỊ HOẶC THỦ TỤC
void Password ()
{
char customKey = customKeypad.getKey ();
if (customKey) // đảm bảo rằng một phím thực sự được nhấn, bằng (customKey! = NO_KEY)
{
Dữ liệu [data_count] = customKey; // lưu trữ char vào mảng dữ liệu
lcd.setCursor (data_count, 1); // di chuyển con trỏ để hiển thị từng ký tự mới
lcd.print ("*"); // in char tại con trỏ đã nói
data_count ++; // tăng mảng dữ liệu lên 1 để lưu trữ các ký tự mới, đồng thời theo dõi số ký tự đã nhập
}
if (data_count == Password_Lenght-1) // nếu chỉ số mảng bằng số ký tự mong đợi, hãy so sánh dữ liệu với cái chính
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Mật khẩu là");
if (! strcmp (Data, Master)) // bằng (strcmp (Data, Master) == 0)
{
lcd.print ("Tốt");
lcd.clear ();
Hiển thị = 1;
}
khác
lcd.print ("Lỗi");
delay (1000); // đã thêm 1 giây trễ để đảm bảo mật khẩu được hiển thị hoàn toàn trên màn hình trước khi bị xóa.
lcd.clear ();
xóa dữ liệu();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Nhập Mật khẩu");
}
}
int TempMenu ()
{
Wire.beginTransmission (địa chỉ);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (địa chỉ, 1);
while (Wire.available () == 0);
int c = Wire.read ();
trả lại c;
}
void clearData ()
{
while (data_count! = 0)
{// Điều này có thể được sử dụng cho bất kỳ kích thước mảng nào, Dữ liệu [data_count--] = 0; // xóa mảng cho dữ liệu mới
}
}
void StoreUser ()
{
int ext = 0;
người dùng int;
char ch;
trong khi (! ext) {
lcd.clear ();
lcd.print ("Nhập Người dùng");
user = người dùng + 1;
lcd.print (người dùng);
int x = 0;
trong khi (! x) {
for (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [user - 1] = ch;
}
chậm trễ (500);
lcd.clear ();
lcd.print ("Tiếp tục");
lcd.setCursor (0, 1);
lcd.print ("* co # khong");
ch = customKeypad.waitForKey ();
if (ch == '*') {
x = 1;
}
if (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Hiển thị = 1;
}
}
người dùng ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <người dùng; i ++) {
lcd.print ("Người dùng đã Lưu");
lcd.print (i + 1);
for (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
chậm trễ (2000);
lcd.clear ();
Hiển thị = 1;
}
}
Bước 4: HƯỚNG DẪN SỬ DỤNG
1. Khi bật dự án, màn hình tải hoặc màn hình chào mừng sẽ xuất hiện.
2. Màn hình “Enter Password” sẽ xuất hiện, màn hình này cho phép bạn nhập 4 ký tự, chữ cái hoặc số, mật khẩu chính xác là: 5466, điều này sẽ cấp cho bạn quyền truy cập vào menu chính.
3. Sau khi nhập đúng mật khẩu, menu chính sẽ xuất hiện với 4 tùy chọn khả thi để điều hướng các chức năng khả dụng khác nhau.
· A - Nhập số điện thoại di động của người dùng.
o Nhập 10 chữ số để lưu người dùng vào hệ thống
o Sau khi nhập xong 10 chữ số, nhấn “*“để thêm người dùng khác hoặc nhấn “#” để quay lại menu chính
· B - Hiển thị người dùng đã lưu
o Người dùng sẽ cuộn qua màn hình, chúng được hiển thị trong 3 giây mỗi lần, ngay sau khi tất cả người dùng được hiển thị, trang sẽ đóng và trở lại menu chính.
o Nếu không có người dùng nào được thêm vào menu tùy chọn A, nó sẽ hiển thị “KHÔNG CÓ NGƯỜI DÙNG TIẾT KIỆM”.
· C - Hiển thị nhiệt độ trực tiếp
o Nhấn “*“để thoát trở lại menu chính
· D - Hiển thị văn bản ngắn
o Hiển thị tên của người sáng tạo và chủ đề được biên soạn cùng với ngày tháng.
Đề xuất:
Trình tạo chức năng: 12 bước (có hình ảnh)
Bộ tạo chức năng: Hướng dẫn này mô tả thiết kế của bộ tạo chức năng dựa trên mạch tích hợp Maxims's Analog MAX038. Bộ tạo chức năng là công cụ rất hữu ích cho những người mê điện tử. Nó cần thiết để điều chỉnh mạch cộng hưởng, kiểm tra âm thanh
Trình tạo chức năng di động trên WiFi và Android: 10 bước
Bộ tạo chức năng di động trên WiFi và Android: Gần cuối thế kỷ 20, nhiều đổi mới công nghệ đã xuất hiện, đặc biệt là trong lĩnh vực truyền thông; nhưng không chỉ. Đối với chúng tôi, người dùng, người tiêu dùng và kỹ sư đã phát hiện ra sự phát triển nhanh chóng của các thiết bị điện tử, có thể làm cho cuộc sống của chúng ta
Bộ tạo chức năng tự làm với MCU STC một cách dễ dàng: 7 bước (có hình ảnh)
Bộ tạo chức năng tự làm với MCU STC một cách dễ dàng: Đây là bộ tạo chức năng được làm bằng MCU STC. Chỉ cần một số thành phần và mạch rất đơn giản. Đặc điểm kỹ thuật Đầu ra: Dạng sóng vuông kênh đơn Tần số: 1Hz ~ 2MHz Dạng sóng hình sin Tần số: 1Hz ~ 10kHz Biên độ: VCC, khoảng 5V Tải abili
Giao diện người-máy tính: Chức năng một Gripper (do Kirigami tạo ra) bằng Chuyển động cổ tay sử dụng EMG.: 7 bước
Giao diện người-máy tính: Chức năng một cái kẹp (do Kirigami tạo ra) bằng Chuyển động cổ tay Sử dụng EMG: Vì vậy, đây là lần thử đầu tiên của tôi với giao diện người-máy tính. thông qua python và arduino và kích hoạt một bộ kẹp dựa trên origami
Trình tạo chức năng di động trên Arduino: 7 bước (có hình ảnh)
Trình tạo chức năng di động trên Arduino: Trình tạo chức năng là một công cụ rất hữu ích, đặc biệt khi chúng tôi đang xem xét kiểm tra phản ứng của mạch đối với một tín hiệu nhất định. Trong phần hướng dẫn này, tôi sẽ mô tả trình tự xây dựng của trình tạo hàm nhỏ, dễ sử dụng, di động