สารบัญ:

เครื่องคิดเลข Arduino: 6 ขั้นตอน
เครื่องคิดเลข Arduino: 6 ขั้นตอน

วีดีโอ: เครื่องคิดเลข Arduino: 6 ขั้นตอน

วีดีโอ: เครื่องคิดเลข Arduino: 6 ขั้นตอน
วีดีโอ: สอน เขียนโปรแกรม Tinkercad+Arduino | Uno R3 สร้างเครื่องคิดเลข KEYPAD #input #output #EP20 2024, พฤศจิกายน
Anonim
เครื่องคิดเลข Arduino
เครื่องคิดเลข Arduino

การเขียนโปรแกรมเป็นเรื่องสนุกอยู่เสมอ และ Arduino เป็นแพลตฟอร์มที่ยอดเยี่ยม หากคุณเพิ่งเริ่มต้นกับการเขียนโปรแกรมแบบฝังตัว ในบทช่วยสอนนี้ เราจะสร้างเครื่องคิดเลขของเราเองด้วย Arduino ค่าสามารถส่งผ่านปุ่มกด (ปุ่มกด 4×4) และดูผลลัพธ์ได้บนหน้าจอ LCD (16×2 Dot-matrix) เครื่องคิดเลขนี้สามารถดำเนินการอย่างง่าย ๆ เช่น การบวก การลบ การคูณ และการหารด้วยจำนวนเต็ม แต่เมื่อคุณเข้าใจแนวคิดนี้แล้ว คุณสามารถใช้ฟังก์ชันทางวิทยาศาสตร์กับ Arduino ได้ ในตอนท้ายของโครงการ คุณจะรู้วิธีใช้ LCD ขนาด 16x2 และปุ่มกดกับ Arduino และยังง่ายต่อการตั้งโปรแกรมสำหรับพวกเขาโดยใช้ปุ่มลัด ห้องสมุดที่มีอยู่ คุณจะเข้าใจวิธีการตั้งโปรแกรม Arduino ของคุณสำหรับการทำงานเฉพาะให้สำเร็จ

ขั้นตอนที่ 1: สิ่งที่จำเป็น

Arduino Uno (ทุกรุ่นใช้งานได้) จอแสดงผล LCD 16 × 2 ปุ่มกด 4 × 4 แบตเตอรี่ 9V บอร์ดทดลองและสายเชื่อมต่อ

ขั้นตอนที่ 2: แผนภาพวงจร

แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

ขั้นตอนที่ 3: โปรแกรมเครื่องคิดเลข Arduino

โปรแกรม Arduino ที่สมบูรณ์สำหรับโครงการนี้มีให้เมื่อสิ้นสุดโครงการ รหัสถูกแบ่งออกเป็นชิ้นเล็ก ๆ ที่มีความหมายและอธิบายไว้ด้านล่าง ดังที่ได้กล่าวไว้ก่อนหน้านี้ว่าเราจะเชื่อมต่อ LCD และแป้นพิมพ์กับ Arduino โดยใช้ไลบรารี ให้เพิ่มลงใน Arduino IDE ของเราก่อน ไลบรารีสำหรับ LCD นั้นรวมอยู่ใน Arduino ของคุณโดยค่าเริ่มต้นแล้ว ดังนั้นเราจึงไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ สำหรับไลบรารีปุ่มกด คลิกที่ลิงค์เพื่อดาวน์โหลดจาก Github คุณจะได้รับไฟล์ ZIP จากนั้นเพิ่ม lib นี้ไปยัง Arduino โดย Sketch -> รวมไลบรารี -> เพิ่มไฟล์. ZIP และชี้ตำแหน่งไปยังไฟล์ที่ดาวน์โหลดนี้ เมื่อเสร็จแล้ว เราก็พร้อมสำหรับการเขียนโปรแกรม แม้ว่าเราจะใช้ไลบรารี่สำหรับการใช้ปุ่มกด เราต้องพูดถึงรายละเอียดเล็กน้อย (แสดงด้านล่าง) เกี่ยวกับปุ่มกดไปยัง Arduino ตัวแปร ROWS และ COLS จะบอกจำนวนแถวและคอลัมน์ของปุ่มกดของเรา และคีย์แมปจะแสดงลำดับของปุ่มที่ปรากฏบนแป้นพิมพ์ แป้นพิมพ์ที่ฉันใช้ในโปรเจ็กต์นี้ดูเหมือนว่าด้านล่างของแผนผังคีย์ก็เหมือนกัน ด้านล่างนี้ เราได้กล่าวถึงพินที่เชื่อมต่อแป้นพิมพ์โดยใช้ตัวแปรอาร์เรย์ rowPins และ colPins.const ไบต์ ROWS = 4; // สี่แถวconst ไบต์ COLS = 4; // สามคอลัมน์ // กำหนดคีย์ Keymapchar [ROWS][COLS] = { {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}};ไบต์ rowPins[ROWS] = { 0, 1, 2, 3 }; // เชื่อมต่อปุ่มกด ROW0, ROW1, ROW2 และ ROW3 กับ Arduino pins.byte colPins[COLS] = { 4, 5, 6, 7 }; // เชื่อมต่อปุ่มกด COL0, COL1 และ COL2 กับหมุด Arduino เหล่านี้ เมื่อเราได้กล่าวถึงประเภทของปุ่มกดที่เราใช้และวิธีการเชื่อมต่อ เราสามารถสร้างปุ่มกดโดยใช้รายละเอียดเหล่านั้นโดยใช้บรรทัดด้านล่างKeypad kpd = Keypad(makeKeymap(keys)), rowPins, colPins, ROWS, COLS); // สร้างคีย์แพด ในทำนองเดียวกัน เรายังต้องบอกว่าพินของ Arduino ที่ LCD เชื่อมต่ออยู่ด้วย ตามแผนภาพวงจรของเรา คำจำกัดความจะเป็นดังนี้const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //พินที่เชื่อมต่อ LCDLiquidCrystal lcd(rs, en, d4, d5, d6, d7); //สร้าง LCD ภายในฟังก์ชันการตั้งค่า เราแค่แสดงชื่อโครงการแล้วดำเนินการวนรอบที่โครงการหลักอยู่ โดยทั่วไปเราต้องตรวจสอบว่ามีการพิมพ์อะไรบนปุ่มกดหรือไม่ หากพิมพ์เราต้องจดจำ สิ่งที่กำลังพิมพ์แล้วแปลงเป็นตัวแปรเมื่อกด "=" เราต้องคำนวณผลลัพธ์แล้วแสดงผลบน LCD ในที่สุด นี่คือสิ่งที่ทำในฟังก์ชันลูปดังที่แสดงด้านล่างคีย์ = kpd.getKey(); //การจัดเก็บค่าคีย์ที่กดไว้ใน charif (key!=NO_KEY)DetectButtons();if (result==true)CalculateResult();DisplayResult(); อธิบายสิ่งที่เกิดขึ้นในแต่ละฟังก์ชันโดยใช้บรรทัดความคิดเห็น ทำตามโค้ดด้านล่างทั้งหมด เล่นซอเพื่อทำความเข้าใจวิธีการทำงานจริง หากคุณมีข้อสงสัยเกี่ยวกับบรรทัดใดโดยเฉพาะ โปรดใช้ส่วนความคิดเห็นหรือฟอรัม

ขั้นตอนที่ 4:

ขั้นตอนที่ 5: การทำงานของเครื่องคิดเลข Arduino

การทำงานของเครื่องคิดเลข Arduino
การทำงานของเครื่องคิดเลข Arduino

ทำการเชื่อมต่อตามแผนภาพวงจรและอัปโหลดรหัสด้านล่าง หากแสดงข้อผิดพลาด ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มไลบรารี่ตามคำแนะนำที่ให้ไว้ด้านบน คุณยังสามารถลองใช้การจำลองเพื่อตรวจสอบว่าปัญหาอยู่ที่ฮาร์ดแวร์ของคุณหรือไม่ หากทุกอย่างเสร็จสิ้นตามที่ควรจะเป็น ฮาร์ดแวร์ของคุณจะมีลักษณะดังนี้ด้านล่างโดยมีจอ LCD แสดงเครื่องคิดเลข Arduino โดยใช้แป้นพิมพ์ 4x4 เนื่องจากแป้นพิมพ์ที่ใช้ในที่นี้ไม่มีเครื่องหมายที่ถูกต้อง ฉันจึงถือว่าตัวอักษรเป็นตัวดำเนินการ รายการด้านล่างอักขระบนแป้นกดสมมติว่าเป็น "A" บวก (+) "B" การลบ (-) "C" คูณ (*) "D" หาร (/) "*" ล้าง (C) "#" เท่ากับ (=) คุณสามารถ ใช้เครื่องหมายเพื่อเขียนทับว่าแต่ละปุ่มแสดงถึงอะไร เมื่อเสร็จแล้ว คุณสามารถเริ่มใช้เครื่องคิดเลขได้โดยตรง พิมพ์ตัวเลขและจะปรากฏบนบรรทัดที่สองโดยกดตัวถูกดำเนินการและพิมพ์หมายเลขที่สองของคุณในที่สุดกดปุ่ม "#" เพื่อให้ได้ผลลัพธ์ คุณยังสามารถลองสร้างเครื่องคิดเลข Arduino ที่ใช้หน้าจอสัมผัสนี้

ขั้นตอนที่ 6: รหัส

/* * โปรแกรมเครื่องคิดเลข Arduino Keypad */#include // ไฟล์ส่วนหัวสำหรับ LCD จาก https://www.arduino.cc/en/Reference/LiquidCrystal#include // ไฟล์ส่วนหัวสำหรับ Keypad จาก https://github.com/ Chris--A/Keypadconst ไบต์ ROWS = 4; // สี่แถวconst ไบต์ COLS = 4; // สามคอลัมน์ // กำหนดคีย์ Keymapchar [ROWS][COLS] = { {'7', '8', '9', 'D'}, {'4', '5', '6', ' C'}, {'1', '2', '3', 'B'}, {'*', '0', '#', 'A'}};ไบต์ rowPins[ROWS] = { 0, 1, 2, 3 }; // เชื่อมต่อปุ่มกด ROW0, ROW1, ROW2 และ ROW3 กับ Arduino pins.byte colPins[COLS] = { 4, 5, 6, 7 }; // เชื่อมต่อปุ่มกด COL0, COL1 และ COL2 กับหมุด Arduino เหล่านี้ ปุ่มกด kpd = ปุ่มกด (makeKeymap (คีย์), rowPins, colPins, ROWS, COLS); // สร้าง Keypadconst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //พินที่เชื่อมต่อ LCDLiquidCrystal lcd(rs, en, d4, d5, d6, d7); ยาว Num1, Num2, จำนวน; ปุ่มถ่าน, การกระทำ; ผลลัพธ์บูลีน = false; เป็นโมฆะการตั้งค่า () { lcd.begin (16, 2); //เรากำลังใช้จอ LCD ขนาด 16*2 LCD.print("เครื่องคิดเลข DIY"); //แสดงข้อความแนะนำ lcd.setCursor(0, 1); // ตั้งค่าเคอร์เซอร์ไปที่คอลัมน์ 0, บรรทัดที่ 1 lcd.print("-CircuitDigest"); //แสดงการหน่วงเวลาข้อความแนะนำ (2000); //รอให้หน้าจอแสดงข้อมูล lcd.clear(); //จากนั้นทำความสะอาด}void loop() {key = kpd.getKey(); //การจัดเก็บค่าคีย์ที่กดไว้ใน charif (key!=NO_KEY)DetectButtons();if (result==true)CalculateResult();DisplayResult(); }เป็นโมฆะ DetectButtons(){ lcd.clear(); //จากนั้นทำความสะอาด if (key=='*') //หากปุ่มยกเลิกถูกกด {Serial.println ("Button Cancel"); ตัวเลข=Num1=Num2=0; result=false;} if (key == '1') // ถ้ากดปุ่ม 1 {Serial.println ("Button 1"); ถ้า (จำนวน==0) จำนวน=1; อื่น จำนวน = (หมายเลข * 10) + 1; //กดสองครั้ง } if (key == '4') //หากกดปุ่ม 4 {Serial.println ("Button 4"); ถ้า (จำนวน==0) จำนวน=4; อื่น จำนวน = (หมายเลข * 10) + 4; // กดสองครั้ง } if (key == '7') // ถ้ากดปุ่ม 7 {Serial.println ("Button 7"); ถ้า (จำนวน==0) จำนวน=7; อื่น จำนวน = (หมายเลข * 10) + 7; //กดสองครั้ง } ถ้า (คีย์ == '0') {Serial.println ("ปุ่ม 0"); // ปุ่ม 0 ถูกกด ถ้า (หมายเลข ==0) หมายเลข = 0; อื่น จำนวน = (หมายเลข * 10) + 0; //กดสองครั้ง } if (key == '2') //กดปุ่ม 2 {Serial.println ("Button 2"); ถ้า (Number==0) Number=2; อื่น จำนวน = (หมายเลข * 10) + 2; //กดสองครั้ง } if (คีย์ == '5') {Serial.println ("ปุ่ม 5"); ถ้า (Number==0) Number=5; อื่น จำนวน = (หมายเลข * 10) + 5; //กดสองครั้ง } if (คีย์ == '8') {Serial.println ("ปุ่ม 8"); ถ้า (จำนวน==0) จำนวน=8; อื่น จำนวน = (หมายเลข * 10) + 8; //กดสองครั้ง } if (key == '#') {Serial.println ("Button Equal"); Num2=จำนวน; ผลลัพธ์ = จริง; } if (คีย์ == '3') {Serial.println ("ปุ่ม 3"); ถ้า (Number==0) Number=3; อื่น จำนวน = (หมายเลข * 10) + 3; //กดสองครั้ง } if (คีย์ == '6') {Serial.println ("ปุ่ม 6"); ถ้า (จำนวน==0) จำนวน=6; อื่น จำนวน = (หมายเลข * 10) + 6; //กดสองครั้ง } if (คีย์ == '9') {Serial.println ("ปุ่ม 9"); ถ้า (Number==0) Number=9; อื่น จำนวน = (หมายเลข * 10) + 9; //กดสองครั้ง } if (key == 'A' || key == 'B' || key == 'C' || key == 'D') // การตรวจจับปุ่มบนคอลัมน์ 4 { Num1 = Number; จำนวน =0; ถ้า (คีย์ == 'A') {Serial.println ("เพิ่มเติม"); การกระทำ = '+';} ถ้า (คีย์ == 'B') {Serial.println ("การลบ"); การกระทำ = '-'; } if (คีย์ == 'C') {Serial.println ("การคูณ"); action = '*';} if (คีย์ == 'D') {Serial.println ("Devesion"); การกระทำ = '/';} ล่าช้า (100); }} เป็นโมฆะ CalculateResult(){ if (action=='+') Number = Num1+Num2; ถ้า (action=='-') Number = Num1-Num2; ถ้า (action=='*') Number = Num1*Num2; ถ้า (action=='/') Number = Num1/Num2; }เป็นโมฆะ DisplayResult(){ lcd.setCursor(0, 0); // ตั้งค่าเคอร์เซอร์ไปที่คอลัมน์ 0, บรรทัดที่ 1 lcd.print(Num1); lcd.print (การกระทำ); lcd.print(Num2); ถ้า (ผลลัพธ์==จริง) {lcd.print(" ="); lcd.print(Number);} //แสดงผล lcd.setCursor(0, 1); // ตั้งค่าเคอร์เซอร์ไปที่คอลัมน์ 0, บรรทัดที่ 1 lcd.print(Number); //แสดงผล}

แนะนำ: