Help needed.

16 Replies, 4606 Views

(First Post!)
---

Similar approach to that of @no smile. Here's the wiring diagram:

 buttonCountdown_schem.png   

Here's a video showing it working:


Source: https://www.likera.com/forum/mybb/attach...?aid=38686



.mov   FullSizeRender.MOV (Size: 2.43 MB / Downloads: 418)

Code: (disregard anything with regards to LCD - it was just for demonstration purposes):
Code:
#include <SPI.h> #include <LiquidCrystal.h> #define buttonPin 2 #define magnetPin 4 #define duration 5000     // Duration of locked phase in milliseconds (1ms = 1/1000 of a second) #define preparation 5000  // Duration of preparation phase in ms unsigned long lastON = 0; unsigned long timeCounter = duration; bool finished = false; LiquidCrystal lcd(9); byte smiley[8] = {   B00000,   B10001,   B00000,   B00000,   B10001,   B01110,   B00000, }; void setup() {   pinMode(buttonPin, INPUT_PULLUP);   pinMode(magnetPin, OUTPUT);   digitalWrite(magnetPin,LOW);   Serial.begin(9600);   lcd.createChar(0, smiley);   lcd.begin(16, 2);   lcd.print("Locking in...");   unsigned long now = millis();   while (millis() - now < preparation) {     lcd.setCursor(0, 1);     lcd.print((preparation - (millis() - now))/1000 + 1);   }   digitalWrite(magnetPin, HIGH);  // power the magnet   lcd.clear();   lcd.print("Locked! Left:");   lastON = millis(); } void loop() {   if (timeCounter <= duration && !finished) {  // We catch a the absence of a rollover of timeCounter. If there is, it means we passed 0.     if (digitalRead(buttonPin) == LOW) {       timeCounter -= (millis() - lastON); // if the button is pressed, remove from counter the time that passed since the last loop iteration     }     lastON = millis();  // reset the last loop iteration timer     Serial.println(timeCounter / 1000.0);     lcd.setCursor(0, 1);     lcd.print(timeCounter / 1000.0);   } else {     Serial.println("UNLOCK");     lcd.clear();     finished = true;     lcd.print("Unlocked! Hope");     lcd.setCursor(0,1);     lcd.print("you had fun! ");     lcd.write(byte(0));     digitalWrite(magnetPin, LOW); // power off the magnet.     while (true);   } }

Even though I'm using two breadboards to do this, half of one would be enough if you omit the LCD.

The usual disclaimer: Try at your own risk, I'm not responsible for anything anyone might do with this. etc.
(This post was last modified: 10 Feb 2020, 21:22 by Like Ra.)
(10 Feb 2020, 20:26 )swswl Wrote: (First Post!)
And first welcome! 😊
(29 Jan 2020, 00:15 )Like Ra Wrote: Mains timer + 12V AC/DC adapter + door electro-magnet 😊

Yeah, just don't make the same mistake I did and leave the switch at "outlet on":

 Image-1.jpg   

I had an arduino + this mechanism and managed to mess up both. Good thing I had a 3rd safety! (padlock + iced key)
(10 Feb 2020, 23:03 )swswl Wrote: just don't make the same mistake I did and leave the switch at "outlet on"
😯

(10 Feb 2020, 23:03 )swswl Wrote: Good thing I had a 3rd safety! (padlock + iced key)
Yes! My point - https://www.likera.com/sb/time/ice-padlock4.php 😉
Cheers for that! The video isn’t displaying though?
(11 Feb 2020, 12:15 )The inspector Wrote: The video isn’t displaying though?
I bet you are trying to watch it on an Apple mobile device: https://www.likera.com/forum/mybb/showth...p?tid=2450
Yes, guilty! Forgot about the whole apple thing.