รหัสล็อคผิดปกติบน Arduino

Arduino เป็นระบบที่ดีที่สุดสำหรับการคัดลอกอุปกรณ์ใด ๆ ความคิดส่วนใหญ่คงเป็นไปไม่ได้หากไม่มีเธอ เป็นเวลานานมีความคิดเช่นนี้: การสร้างการล็อคแบบพิเศษสำหรับ arduino ในการเปิดคุณต้องกดปุ่มบางปุ่มค้างไว้ ในกรณีนี้ล็อคไม่ควรเปิดแม้ว่าคุณจะรู้ว่าปุ่มขวา เพื่อเปิดมันมีความจำเป็นต้องทนต่อบางช่วงเวลาโดยใช้หน่วยความจำของกล้ามเนื้อ อาชญากรดังกล่าวจะไม่สามารถกระทำได้ แต่นี่เป็นเพียงทฤษฎี

ในการประกอบมันคุณต้องใช้อุปกรณ์พิเศษของพัลส์รูปสี่เหลี่ยมเช่นเดียวกับตัวนับจำนวนมากและฮีป แต่อุปกรณ์ที่เสร็จแล้วจะมีขนาดใหญ่โดยรวมและไม่สะดวกในการใช้ ตามกฎแล้วความคิดดังกล่าวหลอกหลอน ขั้นตอนแรกในการตระหนักถึงความฝันคือการสร้างโปรแกรมสำหรับ Arduino มันจะทำหน้าที่เป็นล็อคการรวมกัน เพื่อที่จะเปิดมันคุณจะต้องกดปุ่มเดียวไม่ได้ แต่หลาย ๆ ปุ่มและทำมันพร้อมกัน รูปแบบที่เสร็จแล้วมีลักษณะดังนี้:

กุญแจรหัส

คุณภาพของภาพไม่ดีที่สุด แต่การเชื่อมต่อนั้นทำบนพื้นดิน, D3, D5, D7, D9 และ D11

รหัสแสดงด้านล่าง:

const int ina = 3;







const int inb = 5;







const int inc = 9;







const int ledPin = 13;







int i = 1,000;







ไบต์ a = 0;







ไบต์ b = 0;







ไบต์ c = 0;







ไบต์ d = 0;







ไม่ได้ลงนามเป็นเวลานาน = 0; // อย่าลืมทุกสิ่งที่มีค่าเป็นมิลลิวินาที







temp ยาวที่ไม่ได้ลงชื่อ = 0; // เก็บในที่ไม่ได้ลงชื่อยาว







byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // รหัสจริง







byte keyb [] = {1, 1, 1, 1, 1, 0, 1, 0, 0};







byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 1, 0};







ไบต์ k = 0;







 







การตั้งค่าเป็นโมฆะ () {







pinMode (ina, INPUT_PULLUP); // 3 อินพุตเชื่อมต่อกับปุ่มต่างๆ







pinMode (inb, INPUT_PULLUP);







pinMode (inc, INPUT_PULLUP);







pinMode (ledPin, OUTPUT); // LED ในตัวบนพินที่ 13







pinMode (7, OUTPUT);







pinMode (11, OUTPUT);







digitalWrite (7, ต่ำ); // แทนที่โลก







digitalWrite (11, ต่ำ);







เวลา = มิลลิวินาที (); // จำเป็นต้องนับเวลา







}







 







เป็นโมฆะ blinktwice () {// LED กระพริบสองครั้ง







digitalWrite (ledPin, HIGH);







ล่าช้า (100);







digitalWrite (ledPin, LOW);







ล่าช้า (100);







digitalWrite (ledPin, HIGH);







ล่าช้า (100);







digitalWrite (ledPin, LOW);







ล่าช้า (200);







}







 







void loop () {







ถ้า (k == 0) {







blinktwice (); // พรอมต์สำหรับรหัส







}







ถ้า (k == 8) {







digitalWrite (ledPin, HIGH);







ล่าช้า (3000);







k คือ 0;







}







a = digitalRead (ina); // อ่านระดับสัญญาณจากปุ่ม - กด / ไม่ได้กด







b = digitalRead (inb);







c = digitalRead (inc);







ล่าช้า (100); // ถัดไปถ้า - การป้องกันผลบวกเท็จคุณไม่สามารถใช้งานได้







if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {







ถ้า (a == keya [k]) {







ถ้า (b == keyb [k]) {







ถ้า (c == keyc [k]) {







 







k ++;







}







}







}







}







ถ้า (k == 1) {







ถ้า (d == 0) {







เวลา = มิลลิวินาที ();







d ++;







}







}







temp = millis ();







temp = temp - time;







if (temp> 10,000) {







k คือ 0;







d คือ 0;







เวลา = มิลลิวินาที ();







}







}




เพื่อหลีกเลี่ยงคำถามที่ไม่จำเป็นเกี่ยวกับรหัสควรมีการแจกแจงบางประเด็น ฟังก์ชั่นตั้งค่าใช้สำหรับกำหนดพอร์ต ฟังก์ชั่นถัดไปคือ Input_Pullup ซึ่งจำเป็นในการเพิ่มแรงดันพินโดย 5 V สิ่งนี้ทำโดยใช้ตัวต้านทาน ด้วยเหตุนี้วงจรสั้น ๆ จะไม่เกิดขึ้น เพื่อความสะดวกยิ่งขึ้นขอแนะนำให้ใช้ฟังก์ชั่นกะพริบ โดยทั่วไปเมื่อสร้างโปรแกรมต่าง ๆ คุณต้องลองใช้ฟังก์ชั่นอื่น ๆ

หลังจากกำหนดฟังก์ชั่นแล้วสัญญาณจะถูกอ่านจากพอร์ต หากกดปุ่มมันจะถูกระบุด้วยหมายเลข 1 และหากไม่ใช่ - 2 ถัดไปคือการวิเคราะห์ค่าทั้งหมด ตัวอย่างเช่นมีชุดค่าผสมเช่น 0,1,1 ซึ่งหมายความว่าปุ่มแรกถูกกดและอีกสองไม่ หากค่าทั้งหมดเป็นจริงเงื่อนไข 8 ก็เป็นจริงเช่นกัน นี่คือหลักฐานโดย LED สว่างบนแผงด้านหน้า ถัดไปคุณต้องป้อนรหัสเฉพาะที่จะให้บริการเพื่อเปิดประตู

องค์ประกอบรหัสสุดท้ายจะใช้ในการรีเซ็ตค่าตัวนับ ฟังก์ชั่นดังกล่าวจะดำเนินการถ้าเกิน 10 วินาทีผ่านไปนับตั้งแต่การกดปุ่มครั้งสุดท้ายหากไม่มีรหัสนี้คุณสามารถทำตามตัวเลือกทั้งหมดที่เป็นไปได้แม้ว่าจะมีตัวเลือกมากมาย หลังจากสร้างอุปกรณ์นี้คุณจะต้องทดสอบ

 

(3 โหวต)
กำลังโหลด ...

เพิ่มความคิดเห็น