สารบัญ:
- ขั้นตอนที่ 1:
- ขั้นตอนที่ 2:
- ขั้นตอนที่ 3:
- ขั้นตอนที่ 4:
- ขั้นตอนที่ 5:
- ขั้นตอนที่ 6:
- ขั้นตอนที่ 7: สวิตช์หลายตัว
- ขั้นตอนที่ 8:
- ขั้นตอนที่ 9:
วีดีโอ: Arduino และสวิตช์ Thumbwheel: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ในบทความนี้ เราจะตรวจสอบการใช้สวิตช์ล้อเลื่อน/ล้อเลื่อนกับระบบ Arduino ของเรา นี่คือตัวอย่างบางส่วนที่มาจาก PMD Way
ขั้นตอนที่ 1:
สำหรับผู้ที่ไม่ได้ฝึกหัด สวิตช์แต่ละตัวจะเป็นส่วนแนวตั้งหนึ่งส่วน และสามารถเชื่อมต่อเข้าด้วยกันเพื่อสร้างขนาดต่างๆ ได้ คุณสามารถใช้ปุ่มเพื่อเลือกจากตัวเลขศูนย์ถึงเก้า มีทางเลือกอื่นที่มีวงล้อที่คุณสามารถเคลื่อนที่ด้วยนิ้วโป้งแทนปุ่มเพิ่ม/ลดได้
ก่อนยุคสมัยของอินเทอร์เฟซผู้ใช้แฟนซี สวิตช์เหล่านี้เป็นวิธีที่ได้รับความนิยมในการตั้งค่าการป้อนข้อมูลตัวเลข อย่างไรก็ตาม พวกมันยังมีให้บริการอยู่ในปัจจุบัน ดังนั้นเรามาดูกันว่ามันทำงานอย่างไรและเราจะใช้งานได้อย่างไร ค่าของสวิตช์มีให้ผ่านทศนิยมแบบเลขฐานสองหรือทศนิยมแบบตรง พิจารณาด้านหลังของสวิตช์ในรูปแบบ BCD
ขั้นตอนที่ 2:
เรามีร่วมกันทางด้านซ้าย จากนั้นหน้าสัมผัสสำหรับ 1, 2, 4 และ 8 หากคุณใช้แรงดันไฟฟ้าขนาดเล็ก (เช่น 5V) กับค่าทั่วไป ค่าของสวิตช์สามารถวัดได้โดยการเพิ่มค่าของหน้าสัมผัสที่อยู่ใน รัฐสูง ตัวอย่างเช่น หากคุณเลือก 3 – หน้าสัมผัส 1 และ 2 จะอยู่ที่แรงดันไฟฟ้าที่เท่ากัน ค่าระหว่างศูนย์ถึงเก้าสามารถแสดงได้ในตาราง
ขั้นตอนที่ 3:
ถึงตอนนี้ คุณควรตระหนักว่าการอ่านค่าของสวิตช์จะเป็นเรื่องง่าย และถูกต้องแล้ว เราสามารถเชื่อมต่อ 5V กับทั่วไป เอาต์พุตไปยังพินอินพุตดิจิตอลของบอร์ด Arduino ของเรา จากนั้นใช้ digitalRead() เพื่อกำหนดค่าของแต่ละเอาต์พุต ในภาพสเก็ตช์ เราใช้คณิตศาสตร์พื้นฐานบางอย่างในการแปลงค่า BCD เป็นเลขฐานสิบ มาทำกันตอนนี้เลย
จากมุมมองของฮาร์ดแวร์ เราต้องคำนึงถึงอีกสิ่งหนึ่ง สวิตช์แบบล้อเลื่อนทำงานแบบไฟฟ้าเหมือนกับปุ่มกดสี่ปุ่มที่เปิดตามปกติ ซึ่งหมายความว่าเราจำเป็นต้องใช้ตัวต้านทานแบบดึงลงเพื่อให้มีความแตกต่างที่ชัดเจนระหว่างสถานะสูงและต่ำ ดังนั้นแผนผังของสวิตช์ตัวเดียวจึงเป็นดังที่แสดงไว้ด้านบน
ขั้นตอนที่ 4:
ตอนนี้เป็นเรื่องง่ายในการเชื่อมต่อเอาต์พุต 1, 2, 4 และ 8 กับ (เช่น) พินดิจิทัล 8, 9, 10 และ 11 เชื่อมต่อ 5V กับจุดสวิตช์ 'C' และ GND เป็น … GND ต่อไป เราจำเป็นต้องมีแบบร่างที่สามารถอ่านอินพุตและแปลงเอาต์พุต BCD เป็นทศนิยมได้ พิจารณาร่างต่อไปนี้:
/* ใช้โล่แสดงผลตัวเลข SAA1064 https://www.gravitech.us/7segmentshield.html ใช้จอภาพแบบอนุกรมหากคุณไม่มีเกราะป้องกัน SAA1064 */ #รวม "Wire.h" #define q1 8 #define q2 9 # กำหนด q4 10 #define q8 11 ตั้งค่าเป็นโมฆะ () { Serial.begin (9600); Wire.begin(); // เข้าร่วมบัส i2c (เลือกที่อยู่สำหรับมาสเตอร์) ล่าช้า (500); โหมดพิน (q1, INPUT); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' โหมดพิน (q4, INPUT); // thumbwheel '4' โหมดพิน (q8, INPUT); // thumbwheel '8' } void dispSAA1064 (int Count) // ส่งจำนวนเต็ม 'Count' ไปยัง Gravitech SAA1064 shield { const int lookup [10] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F }; int หลักพัน หลักร้อย หลักสิบ ฐาน; Wire.beginการส่ง(0x38); Wire.write(0); Wire.write(B01000111); Wire.endTransmission(); Wire.beginการส่ง(0x38); Wire.write(1); พัน = นับ/1000; ร้อย = (นับ- (พัน*1000))/100; สิบ = (นับ-((พัน*1000)+(ร้อย*100)))/10; ฐาน = นับ-((พัน*1000)+(ร้อย*100)+(สิบ*10); Wire.write (ค้นหา [ฐาน]); Wire.write(ค้นหา[สิบ]); Wire.write(ค้นหา[ร้อย]); Wire.write(ค้นหา[พัน]); Wire.endTransmission(); ล่าช้า(10); } int readSwitch () { รวมทั้งหมด = 0; ถ้า (digitalRead(q1)==HIGH) { รวม+=1; } if (digitalRead(q2)==HIGH) { รวม+=2; } if (digitalRead(q4)==HIGH) { รวม+=4; } if (digitalRead(q8)==HIGH) { รวม+=8; } ผลตอบแทนรวม; } วงเป็นโมฆะ () { dispSAA1064 (readSwitch ()); // ส่งค่าสวิตช์เพื่อแสดงโล่ Serial.println(readSwitch()); // ส่งค่าสวิตช์ไปที่กล่องมอนิเตอร์แบบอนุกรม }
ฟังก์ชั่น readSwitch() เป็นกุญแจสำคัญ โดยจะคำนวณค่าของสวิตช์โดยเพิ่มการแสดงตัวเลขของเอาต์พุตสวิตช์แต่ละรายการและคืนค่าผลรวมเป็นผลลัพธ์ สำหรับตัวอย่างนี้ เราใช้แผงแสดงผลตัวเลขที่ควบคุมโดย NXP SAA1064
ขั้นตอนที่ 5:
ฟังก์ชั่น readSwitch() เป็นกุญแจสำคัญ โดยจะคำนวณค่าของสวิตช์โดยเพิ่มการแสดงตัวเลขของเอาต์พุตสวิตช์แต่ละรายการและคืนค่าผลรวมเป็นผลลัพธ์ สำหรับตัวอย่างนี้ เราใช้แผงแสดงผลตัวเลขที่ควบคุมโดย NXP SAA1064
หากคุณไม่มี ไม่เป็นไร ผลลัพธ์จะถูกส่งไปยังจอภาพแบบอนุกรมด้วย ทีนี้มาดูการใช้งานจริงในวิดีโอกัน
ขั้นตอนที่ 6:
โอเค มันดูไม่เหมือนมาก แต่ถ้าคุณต้องการการป้อนตัวเลข มันช่วยประหยัดพื้นที่ทางกายภาพได้มาก และเสนอวิธีการป้อนที่แม่นยำ
ดังนั้นคุณมีมัน คุณจะใช้สิ่งเหล่านี้ในโครงการจริงหรือ สำหรับหนึ่งหลัก - ใช่ สำหรับสี่? อาจจะไม่ – บางทีมันอาจจะง่ายกว่าถ้าใช้ปุ่มกด 12 หลัก มีไอเดีย…
ขั้นตอนที่ 7: สวิตช์หลายตัว
ตอนนี้เราจะตรวจสอบวิธีการอ่านตัวเลขสี่หลัก – และไม่ต้องเสียหมุดดิจิทัลทั้งหมดในกระบวนการ แต่เราจะใช้ IC ตัวขยายพอร์ต 16 บิตของ Microchip MCP23017 ที่สื่อสารผ่านบัส I2C แทน มีพินอินพุต/เอาท์พุตดิจิตอลสิบหกอันที่เราสามารถใช้อ่านสถานะของสวิตช์แต่ละตัวได้
ก่อนดำเนินการต่อ โปรดทราบว่าจำเป็นต้องมีความรู้ที่สันนิษฐานไว้สำหรับบทความนี้ – บัส I2C (ส่วนที่หนึ่งและสอง) และ MCP23017 ก่อนอื่นเราจะอธิบายการเชื่อมต่อฮาร์ดแวร์ และจากนั้นเป็นภาพร่าง Arduino เรียกคืนแผนผังที่ใช้สำหรับตัวอย่างสวิตช์เดี่ยว
เมื่อสวิตช์เชื่อมต่อโดยตรงกับ Arduino เราอ่านสถานะของแต่ละพินเพื่อกำหนดค่าของสวิตช์ เราจะทำสิ่งนี้อีกครั้งในขนาดที่ใหญ่ขึ้นโดยใช้ MCP23017 พิจารณาแผนภาพพินเอาต์:
ขั้นตอนที่ 8:
เรามี 16 พิน ซึ่งอนุญาตให้เชื่อมต่อสวิตช์สี่ตัว คอมมอนส์สำหรับสวิตช์แต่ละตัวยังคงเชื่อมต่อกับ 5V และหน้าสัมผัสสวิตช์แต่ละตัวยังคงมีตัวต้านทานแบบดึงลง 10k สำหรับ GND จากนั้นเราเชื่อมต่อ 1, 2, 4, 8 พินของหลักหนึ่งกับ GPBA0~3; หลักที่สอง 1, 2, 4, 8 ถึง GPA4~7; หลักสามคือ 1, 2, 4, 8 ถึง GPB0~3 และหลักที่สี่คือ 1, 2, 4, 8 ถึง GPB4~7
ตอนนี้เราจะอ่านสวิตช์ได้อย่างไร สายไฟเหล่านั้นอาจทำให้คุณคิดว่ามันยาก แต่การร่างภาพนั้นค่อนข้างง่าย เมื่อเราอ่านค่าของ GPBA และ B จะมีการส่งคืนหนึ่งไบต์สำหรับแต่ละธนาคาร โดยมีบิตที่สำคัญที่สุดก่อน แต่ละสี่บิตจะตรงกับการตั้งค่าของสวิตช์ที่เชื่อมต่อกับพิน I/O ที่ตรงกัน ตัวอย่างเช่น หากเราขอข้อมูลสำหรับทั้งธนาคาร IO และสวิตช์ถูกตั้งค่าเป็น 1 2 3 4 – ธนาคาร A จะคืนค่า 0010 0001 และธนาคาร B จะคืนค่า 0100 0011
เราใช้การดำเนินการบิตชิฟต์เพื่อแยกแต่ละสี่บิตออกเป็นตัวแปรแยกกัน ซึ่งทำให้เรามีค่าของแต่ละหลัก ตัวอย่างเช่น หากต้องการแยกค่าของสวิตช์สี่ เราเปลี่ยนบิตจากธนาคาร B >> 4 ซึ่งจะผลักค่าของสวิตช์ออก 3 ค่า และบิตว่างทางด้านซ้ายจะกลายเป็นศูนย์
ในการแยกค่าของสวิตช์สาม เราใช้การรวมระดับบิต & – ซึ่งเหลือค่าของสวิตช์สามไว้ รูปภาพแสดงรายละเอียดของค่าสวิตช์ไบนารี โดยจะแสดงค่าดิบ GPIOA และ B ไบต์ จากนั้นค่าไบนารีของแต่ละหลัก และค่าทศนิยม
ขั้นตอนที่ 9:
มาดูภาพร่างการสาธิตกัน:
/* ตัวอย่าง 40a - อ่านสวิตช์ BCD แบบล้อเลื่อนสี่ล้อผ่าน MCP23017 แสดงบนจอแสดงผล LED 7 ส่วน SAA1064/4 หลัก */ // MCP23017 พิน 15~17 ถึง GND, ที่อยู่บัส I2C คือ 0x20 // ที่อยู่บัส SAA1064 I2C 0x38 # รวม "Wire.h" // สำหรับคำจำกัดความของตัวเลข LED ตัวเลข int [16] = { 63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; ไบต์ GPIOA, GPIOB, dig1, dig2, dig3, dig4; เป็นโมฆะ initSAA1064 () {// ตั้งค่า 0x38 Wire.beginTransmission (0x38); Wire.write(0); Wire.write(B01000111); // เอาต์พุต 12mA ไม่มีช่องว่างหลัก Wire.endTransmission(); } การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); Wire.begin(); // เริ่มต้นบัส I2C initSAA1064(); } void loop() { // อ่านอินพุตของธนาคาร A Wire.beginTransmission(0x20); Wire.write(0x12); Wire.endTransmission(); Wire.requestFrom(0x20, 1); GPIOA=Wire.read(); // ไบต์นี้มีข้อมูลสวิตช์สำหรับตัวเลข 1 และ 2 // อ่านอินพุตของธนาคาร B Wire.beginTransmission(0x20); Wire.write(0x13); Wire.endTransmission(); Wire.requestFrom(0x20, 1); GPIOB=Wire.read(); // ไบต์นี้มีข้อมูลสวิตช์สำหรับตัวเลข 3 และ 4 // แยกค่าสำหรับแต่ละสวิตช์ // dig1 LHS, dig4 RHS dig4=GPIOB >> 4; dig3=GPIOB & B00001111; dig2=GPIOA >> 4; dig1=GPIOA & B00001111; // ส่งข้อมูล GPIO และสวิตช์แต่ละรายการทั้งหมดไปยังจอภาพแบบอนุกรม // เพื่อการดีบักและประโยชน์ Serial.print("GPIOA = "); Serial.println (GPIOA, BIN); Serial.print("GPIOB = "); Serial.println (GPIOB, BIN); Serial.println(); Serial.print("หลัก 1 = "); Serial.println (dig1, BIN); Serial.print("หลัก 2 = "); Serial.println (dig2, BIN); Serial.print("หลัก 3 = "); Serial.println (dig3, BIN); Serial.print("หลัก 4 = "); Serial.println (dig4, BIN); Serial.println(); Serial.print("หลัก 1 = "); Serial.println (dig1, ธ.ค.); Serial.print("หลัก 2 = "); Serial.println (dig2, ธ.ค.); Serial.print("หลัก 3 = "); Serial.println (dig3, ธ.ค.); Serial.print("หลัก 4 = "); Serial.println (dig4, ธ.ค.); Serial.println(); // ส่งค่าสวิตช์ไปที่จอแสดงผล LED ผ่าน SAA1064 Wire.beginTransmission(0x38); Wire.write(1); Wire.write(ตัวเลข[dig4]); Wire.write(ตัวเลข[dig3]); Wire.write(ตัวเลข[dig2]); Wire.write(ตัวเลข[dig1]); Wire.endTransmission(); ล่าช้า(10); ล่าช้า (1000); }
และสำหรับผู้ไม่เชื่อ … วิดีโอสาธิต
ดังนั้นคุณมีมัน ตัวเลขสี่หลักแทนที่จะเป็นหนึ่ง และบนบัส I2C ที่ช่วยรักษาพิน I/O ดิจิทัลของ Arduino เมื่อใช้ MCP23017 แปดตัว คุณสามารถอ่านตัวเลข 32 หลักพร้อมกันได้ ขอให้สนุกกับการทำอย่างนั้น!
สั่งซื้อได้ทั้ง BCD และสวิตช์ทศนิยมในขนาดต่างๆ จาก PMD Way พร้อมจัดส่งฟรีทั่วโลก
โพสต์นี้มาถึงคุณโดย pmdway.com – ทุกอย่างสำหรับผู้ผลิตและผู้ที่ชื่นชอบอุปกรณ์อิเล็กทรอนิกส์ พร้อมบริการจัดส่งฟรีทั่วโลก
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
Thumbwheel Clock - มาเดาเวลากันเถอะ: 5 ขั้นตอน (พร้อมรูปภาพ)
Thumbwheel Clock - Let 's Guess the Time: สวัสดีทุกคน นี่คือ Instructables แรกของฉัน ดังนั้นฉันหวังว่ามันจะดี นอกจากนี้ ระดับภาษาอังกฤษของฉันค่อนข้างแย่ ดังนั้นฉันหวังว่าจะไม่ทำผิดพลาดมากเกินไป เป้าหมายของโครงการนี้คือการนำ "ล้อเลื่อน" กลับมาใช้ใหม่ กู้จากห้องแล็บเก่า e
Arduino ที่ถูกที่สุด -- Arduino ที่เล็กที่สุด -- Arduino Pro Mini -- การเขียนโปรแกรม -- Arduino Neno: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino ที่ถูกที่สุด || Arduino ที่เล็กที่สุด || Arduino Pro Mini || การเขียนโปรแกรม || Arduino Neno:…………………………… โปรดสมัครสมาชิกช่อง YouTube ของฉันสำหรับวิดีโอเพิ่มเติม……. โปรเจ็กต์นี้เกี่ยวกับวิธีเชื่อมต่อ Arduino ที่เล็กที่สุดและถูกที่สุดเท่าที่เคยมีมา Arduino ที่เล็กที่สุดและถูกที่สุดคือ arduino pro mini คล้ายกับ Arduino