สารบัญ:
- ขั้นตอนที่ 1: ตัวเข้ารหัสโรตารี่ Inside
- ขั้นตอนที่ 2: ความทุกข์ยากที่ก่อให้เกิดความเจ็บปวดอย่างแท้จริงสำหรับหลาย ๆ คน
- ขั้นตอนที่ 3: โซลูชัน Finite State Machine (FSM)
- ขั้นตอนที่ 4: รหัส Arduino
- ขั้นตอนที่ 5: การบูรณาการที่ไร้ที่ติ
วีดีโอ: โซลูชั่น Arduino Rotary ที่สมบูรณ์: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
เครื่องเข้ารหัสแบบโรตารี่เป็นปุ่มควบคุมแบบหมุนได้สำหรับโครงการอิเล็กทรอนิกส์ ซึ่งมักใช้กับไมโครคอนโทรลเลอร์ตระกูล Arduino สามารถใช้เพื่อปรับแต่งพารามิเตอร์ นำทางเมนู ย้ายวัตถุบนหน้าจอ ตั้งค่าชนิดใดก็ได้ เป็นการแทนที่ทั่วไปสำหรับโพเทนชิโอมิเตอร์ เนื่องจากสามารถหมุนได้อย่างแม่นยำและไม่จำกัด โดยจะเพิ่มหรือลดค่าที่ไม่ต่อเนื่องครั้งละหนึ่งค่า และมักจะรวมเข้ากับสวิตช์แบบกดได้สำหรับฟังก์ชันประเภทการเลือก พวกเขามาในรูปทรงและขนาดทั้งหมด แต่ช่วงราคาต่ำสุดยากที่จะติดต่อตามที่อธิบายไว้ด้านล่าง
มีบทความมากมายเกี่ยวกับรายละเอียดการทำงานและโหมดการใช้งานของ Rotary encoders และโค้ดตัวอย่างมากมายและไลบรารีเกี่ยวกับวิธีการใช้งาน ปัญหาเดียวคือไม่มีใครทำงานได้อย่างถูกต้อง 100% กับโมดูลโรตารี่จีนช่วงราคาต่ำสุด
ขั้นตอนที่ 1: ตัวเข้ารหัสโรตารี่ Inside
ส่วนหมุนของตัวเข้ารหัสมีสามพิน (และอีกสองตัวสำหรับส่วนสวิตช์เสริม) หนึ่งคือพื้นทั่วไป (GND สีดำ) อีกสองแบบใช้สำหรับกำหนดทิศทางเมื่อหมุนปุ่ม (มักเรียกว่า CLK สีน้ำเงินและ DT สีแดง) ทั้งสองสิ่งนี้ติดอยู่กับพินอินพุต PULLUP ของไมโครคอนโทรลเลอร์ ทำให้ระดับ HIGH เป็นค่าเริ่มต้นสำหรับการอ่าน เมื่อหมุนปุ่มไปข้างหน้า (หรือตามเข็มนาฬิกา) อันดับแรก CLK สีน้ำเงินจะตกลงไปที่ระดับ LOW จากนั้น DT สีแดงจะตามมา เลี้ยวต่อไป CLK สีฟ้าจะเพิ่มขึ้นกลับไปสูง จากนั้นเมื่อโปรแกรมแก้ไข GND ทั่วไปออกจากหมุดเชื่อมต่อทั้งสอง DT สีแดงก็จะเพิ่มขึ้นกลับไปเป็นสูง ดังนั้นกรอก FWD ให้ครบหนึ่งขีด (หรือตามเข็มนาฬิกา) ไปในทิศทางอื่น BWD (หรือทวนเข็มนาฬิกา) แต่ตอนนี้สีแดงตกก่อน และสีน้ำเงินขึ้นกลับสุดท้ายดังแสดงในภาพระดับสองตามลำดับ
ขั้นตอนที่ 2: ความทุกข์ยากที่ก่อให้เกิดความเจ็บปวดอย่างแท้จริงสำหรับหลาย ๆ คน
ปัญหาทั่วไปสำหรับผู้ชื่นชอบงานอดิเรก Arduino โมดูลเข้ารหัสโรตารีราคาถูกจะสะท้อนการเปลี่ยนแปลงเพิ่มเติมในระดับเอาต์พุต ทำให้เกิดการอ่านการนับทิศทางพิเศษและผิด สิ่งนี้จะป้องกันการนับอย่างไม่มีที่ติและทำให้ไม่สามารถรวมโมดูลเหล่านี้เข้ากับโปรเจ็กต์โรตารีที่แม่นยำได้ การกระดอนพิเศษเหล่านี้เกิดจากการเคลื่อนไหวทางกลของแผ่นแปะเหนือหมุดเชื่อมต่อ และแม้แต่การใช้ตัวเก็บประจุพิเศษก็ไม่สามารถขจัดสิ่งเหล่านี้ได้อย่างสมบูรณ์ การตีกลับสามารถปรากฏที่ใดก็ได้ในวัฏจักรการขีดทั้งหมด และแสดงโดยสถานการณ์จริงบนภาพ
ขั้นตอนที่ 3: โซลูชัน Finite State Machine (FSM)
รูปภาพแสดงพื้นที่สถานะทั้งหมดของการเปลี่ยนแปลงระดับที่เป็นไปได้สำหรับหมุดสองตัว (CLK สีน้ำเงินและ DT สีแดง) ทั้งสำหรับการตีกลับที่ถูกต้องและผิดพลาด โดยอาศัยเครื่องสถานะนี้ โซลูชันที่สมบูรณ์สามารถตั้งโปรแกรมให้ทำงานได้แม่นยำ 100% เสมอ เนื่องจากโซลูชันนี้ไม่จำเป็นต้องมีการหน่วงเวลากรอง จึงเป็นวิธีที่รวดเร็วที่สุด ข้อดีอีกประการของการแยกพื้นที่สถานะของพินออกจากโหมดการทำงานคือสามารถใช้ทั้งโหมดโพลหรือโหมดขัดจังหวะตามความชอบของเขาเอง โพลหรืออินเตอร์รัปต์สามารถตรวจจับการเปลี่ยนแปลงระดับบนพิน และรูทีนแยกต่างหากจะคำนวณสถานะใหม่ตามสถานะปัจจุบันและเหตุการณ์จริงของการเปลี่ยนแปลงระดับ
ขั้นตอนที่ 4: รหัส Arduino
โค้ดด้านล่างนับการขีด FWD และ BWD บนจอภาพแบบอนุกรม และยังรวมฟังก์ชันสวิตช์เสริมอีกด้วย
// ปีเตอร์ เซอร์เกย์ 2019-04-10
// พินของโรตารีที่แมปกับพอร์ต Arduino
#define SW 21 #define CLK 22 #define DT 23
// ค่าปัจจุบันและค่าก่อนหน้าของตัวนับที่ปรับโดยการหมุน
int curVal = 0; int prevVal = 0;
// เจ็ดสถานะของ FSM (เครื่องสถานะ จำกัด)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
การตั้งค่าเป็นโมฆะ () {
Serial.begin(250000); Serial.println("เริ่ม…"); // ระดับ HIGH จะเป็นค่าเริ่มต้นสำหรับพิน pinMode ทั้งหมด (SW, INPUT_PULLUP); โหมดพิน (CLK, INPUT_PULLUP); โหมดพิน (DT, INPUT_PULLUP); // ทั้ง CLK และ DT จะทริกเกอร์การขัดจังหวะสำหรับการเปลี่ยนแปลงทุกระดับ AttachInterrupt(digitalPinToInterrupt(DT), rotaryDT, CHANGE); }
วงเป็นโมฆะ () {
// การจัดการสวิตช์เสริมที่รวมอยู่ในตัวเข้ารหัสแบบโรตารี่บางตัวหาก (digitalRead (SW) == LOW) { Serial.println ("Pressed"); ในขณะที่ (!digitalRead(SW)); } // การเปลี่ยนแปลงใดๆ ของค่าตัวนับจะแสดงใน Serial Monitor ถ้า (curVal != prevVal) { Serial.println (curVal); prevVal = curVal; } }
// สถานะการเปลี่ยนเครื่องสำหรับการเปลี่ยนแปลงระดับ CLK
ถือเป็นโมฆะ rotaryCLK() { if (digitalRead(CLK)==LOW) { if (state==IDLE_11) state = SCLK_01; อื่นถ้า (state==SCLK_10) สถานะ = SCLK_00; มิฉะนั้น ถ้า (state==SDT_10) สถานะ = SDT_00; } else { if (state==SCLK_01) state = IDLE_11; อื่นถ้า (state==SCLK_00) สถานะ = SCLK_10; อื่นถ้า (state==SDT_00) สถานะ = SDT_10; อื่นถ้า (รัฐ == SDT_01) { รัฐ = IDLE_11; เคิร์ฟ--; } } }
// สถานะการเปลี่ยนเครื่องสำหรับการเปลี่ยนแปลงระดับ DT
ถือเป็นโมฆะ rotaryDT () { ถ้า (digitalRead (DT) == LOW) { ถ้า (state == IDLE_11) สถานะ = SDT_10; อื่นถ้า (state==SDT_01) สถานะ = SDT_00; อื่นถ้า (state==SCLK_01) สถานะ = SCLK_00; } อื่น ๆ { if (state==SDT_10) state = IDLE_11; อื่นถ้า (state==SDT_00) สถานะ = SDT_01; อื่นถ้า (state==SCLK_00) สถานะ = SCLK_01; อื่นถ้า (รัฐ == SCLK_10) { รัฐ = IDLE_11; curVal++; } } }
ขั้นตอนที่ 5: การบูรณาการที่ไร้ที่ติ
คุณสามารถตรวจดูในวิดีโอที่แนบมาว่าโซลูชัน FSM ทำงานได้อย่างถูกต้องและรวดเร็วแม้ในกรณีที่มีเครื่องเข้ารหัสแบบโรตารี่ช่วงต่ำที่มีเอฟเฟกต์การตีกลับแบบต่างๆ เป็นระยะๆ
แนะนำ:
Power Timer ด้วย Arduino และ Rotary Encoder: 7 ขั้นตอน (พร้อมรูปภาพ)
Power Timer ด้วย Arduino และ Rotary Encoder: Power Timer นี้อิงตามตัวจับเวลาที่แสดงที่:https://www.instructables.com/id/Timer-With-Arduin…A โมดูลจ่ายไฟและ SSR (โซลิดสเตตรีเลย์ ) ติดอยู่กับมัน สามารถสั่งงานกำลังไฟฟ้าได้ถึง 1KW และด้วยการเปลี่ยนแปลงเพียงเล็กน้อย l
โซลูชัน IOT สำหรับการแชร์จักรยาน: 6 ขั้นตอน
IOT Solution for the Sharing Bike: จักรยานแชร์เป็นที่นิยมอย่างมากในประเทศจีนในปัจจุบัน มีจักรยานแชร์มากกว่า 10 แบรนด์ในตลาด และ “mobike” มีชื่อเสียงมากที่สุด มีผู้ใช้ที่ลงทะเบียนมากกว่า 100 ล้านคน และได้แพร่กระจายไปยังเมืองอื่นๆ ท
MacOS/Hackintosh High Sierra 10.13 โซลูชัน "พิสูจน์อนาคต" ของไดรเวอร์ USB Wifi ล่าสุดโดยใช้ Raspberry Pi: 4 ขั้นตอน
โซลูชัน "พิสูจน์อนาคต" ของ MacOS/Hackintosh High Sierra 10.13 Usb Wifi ล่าสุดโดยใช้ Raspberry Pi: หนึ่งในปัญหาที่น่าผิดหวังที่สุดกับ macOS/Hackintosh ล่าสุดคือความพร้อมใช้งานของไดรเวอร์ usb wifi ฉันมี 3 wifi usb ที่ไม่สามารถใช้งานได้ล่าสุด macOS High Sierra 10.13 usb wifi ล่าสุดของฉันคือ panda wireless แต่ไดรเวอร์รองรับ macO
Microdrive Madness: โซลูชัน $ 15 สำหรับ Microdrives พิเศษของคุณ: 3 ขั้นตอน
Microdrive Madness: โซลูชัน $ 15 สำหรับ Microdrives พิเศษของคุณ: สำหรับผู้ที่มาจากคำแนะนำอื่น ๆ ของฉันในการอัปเกรด iPod ยินดีต้อนรับ! คุณไม่รู้ว่าจะทำอย่างไรกับไมโครไดรฟ์พิเศษของคุณ ที่นำมาจากเครื่องเล่น mp3 เก่า iPod กล้อง ฯลฯ … ฉันมีทางออกที่ยิ่งใหญ่ที่สุดสำหรับคุณ
โซลูชัน Media Center ที่แม้แต่ภรรยาและลูกก็ใช้: 9 ขั้นตอน
โซลูชัน Media Center ที่แม้แต่ภรรยาและลูกก็ใช้: คำแนะนำนี้เป็นบทสรุปของประสบการณ์ของฉันในการลองใช้แอพ Media Center, OS, ฮาร์ดแวร์และรูปแบบไฟล์ที่หลากหลาย นี่ไม่ใช่วิธี PVR และไม่อนุญาตให้คุณบันทึกหรือหยุดรายการทีวีสดชั่วคราว แม้ว่าฉันจะแนะนำทางเลือกที่ดีบางอย่าง