Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********* Pleasedontcode.com **********
- Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- - Terms and Conditions:
- You have a non-exclusive, revocable, worldwide, royalty-free license
- for personal and commercial use. Attribution is optional; modifications
- are allowed, but you're responsible for code maintenance. We're not
- liable for any loss or damage. For full terms,
- please visit pleasedontcode.com/termsandconditions.
- - Project: **Servo Control**
- - Source Code NOT compiled for: Arduino Uno
- - Source Code created on: 2024-11-15 06:12:59
- ********* Pleasedontcode.com **********/
- /****** SYSTEM REQUIREMENTS *****/
- /****** SYSTEM REQUIREMENT 1 *****/
- /* The system shall utilize the EasyButton library to */
- /* manage button presses on pin D2, controlling a */
- /* servo motor on pin D3 for locking mechanisms, */
- /* while interfacing with the DS3231 RTC for */
- /* timekeeping. */
- /****** END SYSTEM REQUIREMENTS *****/
- /* START CODE */
- /****** DEFINITION OF LIBRARIES *****/
- #include <Wire.h>
- #include <Servo.h> //https://github.com/arduino-libraries/Servo
- #include <DS3231.h> //https://github.com/NorthernWidget/DS3231
- #include <EasyButton.h> // Added EasyButton library
- /****** FUNCTION PROTOTYPES *****/
- void setup(void);
- void loop(void);
- /***** DEFINITION OF DIGITAL INPUT PINS *****/
- const uint8_t Button_PushButton_PIN_D2 = 2;
- /***** DEFINITION OF PWM OUTPUT PINS *****/
- const uint8_t Lock_Servomotor_PWMSignal_PIN_D3 = 3;
- const int lockPin = 9; // Added for servo lock control
- /***** DEFINITION OF OUTPUT RAW VARIABLES *****/
- uint8_t Lock_Servomotor_PWMSignal_PIN_D3_rawData = 0;
- /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/
- float Lock_Servomotor_PWMSignal_PIN_D3_phyData = 0.0;
- /****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
- RTC_DS3231 rtc; // RTC instance
- Servo myServo; // Servo instance
- EasyButton button(Button_PushButton_PIN_D2); // EasyButton instance
- // Button state variables
- bool isLocked = false;
- bool timerStarted = false;
- DateTime lockTime;
- unsigned long lastCheckTime = 0;
- const unsigned long checkInterval = 1000;
- void setup(void)
- {
- Serial.begin(9600); // Serial communication
- pinMode(Lock_Servomotor_PWMSignal_PIN_D3, OUTPUT); // Servo pin setup
- if (!rtc.begin()) {
- Serial.println("RTC not found!");
- while (1);
- }
- if (!rtc.isrunning()) {
- rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
- }
- button.begin(); // Initialize EasyButton
- // Recover lock status from RTC
- uint8_t lockStatus = rtc.readnvram(0);
- if (lockStatus == 1) {
- isLocked = true;
- lockTime = rtc.now();
- timerStarted = true;
- Serial.println("Recovered locked state from RTC.");
- } else {
- unlock();
- }
- }
- void loop(void)
- {
- button.read(); // Read button state
- if (button.wasPressed() && !timerStarted) {
- Serial.println("Button pressed, starting timer and locking.");
- lock();
- timerStarted = true;
- lockTime = rtc.now();
- rtc.writenvram(0, 1);
- }
- // Check time only every checkInterval milliseconds
- if (millis() - lastCheckTime >= checkInterval) {
- lastCheckTime = millis();
- DateTime now = rtc.now();
- if (timerStarted) {
- if (now >= lockTime + TimeSpan(30)) {
- Serial.println("30 seconds passed, unlocking.");
- unlock();
- timerStarted = false;
- rtc.writenvram(0, 0);
- }
- }
- }
- }
- void lock() {
- if (!isLocked) {
- myServo.attach(lockPin);
- myServo.write(90);
- delay(500);
- myServo.detach();
- isLocked = true;
- Serial.println("Locked.");
- }
- }
- void unlock() {
- if (isLocked) {
- myServo.attach(lockPin);
- myServo.write(0);
- delay(500);
- myServo.detach();
- isLocked = false;
- Serial.println("Unlocked.");
- }
- }
- /* END CODE */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement