Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/sleep.h>
- #include <avr/wdt.h>
- //Pins
- int accessory = A0; // Pin attached to car accessory wire through voltage divider
- int sensor = 2; // motion sensor
- int button = 3; // push button
- int piezo = 4; //buzzer
- int relay = 5; // Relay Pin
- int whiteLed = 6; // white LED pin
- int redLed = 7; // red led pin
- //variables
- int detect = 0; //Stores # of detections
- int buttonheld = 0; //stores length of button press
- int disarm = 0; //1 disables detection routine
- int bdisarm = 1; //1 disables detection routine (set by button press) - Disarmed by default
- int wait = 0; //stores 10 minute delay for when car is turned off or button pressed
- int honked = 0; //1 enables red blink
- int noLED = 0; //1 disables blink
- int bnoLED = 0; //1 disables blink (set by button press)
- int reset = 0; //stores 'detect' reset counter
- // watchdog interrupt
- ISR (WDT_vect)
- {
- wdt_disable(); // disable watchdog
- } // end of WDT_vect
- void wake ()
- {
- // cancel sleep as a precaution
- sleep_disable();
- } // end of wake
- void setup ()
- {
- pinMode(piezo, OUTPUT);
- pinMode(whiteLed, OUTPUT);
- pinMode(redLed, OUTPUT);
- pinMode(relay, OUTPUT);
- pinMode(accessory, INPUT);
- pinMode(button, INPUT);
- pinMode(sensor, INPUT);
- digitalWrite(relay, HIGH);
- } // end of setup
- void loop ()
- {
- digitalWrite(relay, HIGH); //Make sure relay is OFF - Not necessary, just precaution.
- //buttonpress procedure
- while(digitalRead(button) == LOW){
- buttonpress();
- }
- buttonheld = 0; //reset button timer
- blinkLED(); //Blink LED
- //Detection reset routine - Resets detect var every ~90 minutes
- reset++; //add 1 to reset counter
- if(reset > 2700){
- detect = 0;
- reset = 0; }
- //Limits how many times the horn can honk between button presses/accessory power
- //Beeps to identify limit reached
- if(honked > 4){
- disarm = 1;
- beep(50); }
- //start wait procedure
- if(wait > 1){
- disarm = 1; //disarm while waiting (running, after running, or after button press)
- noLED = 0;
- wait--; }
- if(wait == 1){
- disarm = 0;
- wait = 0; }
- //end wait procedure
- if(analogRead(accessory) > 100){
- detect = 0;
- honked = 0;
- noLED = 1;
- wait = 300;
- }
- while(digitalRead(button) == LOW){
- buttonpress();
- }
- //check to see if armed
- if((disarm == 0) && (bdisarm == 00)){
- //Then If Motion Detected
- if(digitalRead(sensor) == LOW) {
- detection();
- }
- }
- digitalWrite(whiteLed, LOW); //Make sure LEDs are OFF
- digitalWrite(redLed, LOW);
- //Start Sleep Procedure
- // clear various "reset" flags
- MCUSR = 0;
- // allow changes, disable reset
- WDTCSR = _BV (WDCE) | _BV (WDE);
- // set interrupt mode and an interval
- WDTCSR = _BV (WDIE) | _BV (WDP2) | _BV (WDP1) | _BV (WDP0); // set WDIE, and 2 second delay
- wdt_reset(); // pat the dog
- set_sleep_mode (SLEEP_MODE_PWR_DOWN);
- sleep_enable();
- attachInterrupt (0, wake, LOW); //pin 2
- attachInterrupt (1, wake, LOW); //pin 3
- sleep_cpu ();
- // cancel sleep as a precaution
- detachInterrupt (0);
- detachInterrupt (1);
- sleep_disable();
- } // end of loop
- void detection(){
- if(bnoLED == 0){
- digitalWrite (whiteLed, HIGH); }
- detect++;
- if(detect > 5){ //Beep!
- beep (150);
- beep (150);
- beep (150); } // End Beep!
- if(detect > 10){ //Honk!
- digitalWrite (relay, LOW);
- delay(150);
- digitalWrite (relay, HIGH);
- delay(50);
- honked++; } //End Honk!
- if(detect > 45){ // Reset detect counter
- detect = 0; }
- } //End Detection
- void buttonpress(){
- wait = 300;
- buttonheld++;
- honked = 0;
- if(buttonheld == 30){
- bdisarm = 0;
- beep(50);
- beep(50);
- wait = 500;
- noLED = 0;
- bnoLED = 0;
- }
- if(buttonheld == 50){
- bdisarm = 1;
- beep(200);}
- if(buttonheld == 80){
- bnoLED = 1;
- beep(75);
- beep(75);
- beep(75);
- }
- delay(100); } //end buttonpress
- void blinkLED(){
- if((noLED == 0) && (bnoLED == 0)){
- if((bdisarm == 0) && (disarm == 0)){
- digitalWrite(whiteLed, HIGH);
- if(honked >= 1){
- digitalWrite(redLed, HIGH); }
- delay (200);}
- else{
- digitalWrite(redLed, HIGH);
- delay (200);
- } //end else
- } //end if
- }
- // end blink
- //beep routine
- void beep(unsigned char delayms){
- digitalWrite(piezo, HIGH); //Piezo On
- delay(delayms); // wait for a delayms ms
- digitalWrite(piezo, LOW); //Piezo Off
- delay(30); // wait for a delayms ms
- }
- #include <avr/sleep.h>
- #include <avr/wdt.h>
- //Pins
- int accessory = A0; // Pin attached to car accessory wire through voltage divider
- int sensor = 2; // motion sensor
- int button = 3; // push button
- int piezo = 4; //buzzer
- int relay = 5; // Relay Pin
- int whiteLed = 6; // white LED pin
- int redLed = 7; // red led pin
- //variables
- int detect = 0; //Stores # of detections
- int buttonheld = 0; //stores length of button press
- int disarm = 0; //1 disables detection routine
- int bdisarm = 1; //1 disables detection routine (set by button press) - Disarmed by default
- int wait = 0; //stores 10 minute delay for when car is turned off or button pressed
- int honked = 0; //1 enables red blink
- int noLED = 0; //1 disables blink
- int bnoLED = 0; //1 disables blink (set by button press)
- int reset = 0; //stores 'detect' reset counter
- // watchdog interrupt
- ISR (WDT_vect)
- {
- wdt_disable(); // disable watchdog
- } // end of WDT_vect
- void wake ()
- {
- // cancel sleep as a precaution
- sleep_disable();
- } // end of wake
- void setup ()
- {
- pinMode(piezo, OUTPUT);
- pinMode(whiteLed, OUTPUT);
- pinMode(redLed, OUTPUT);
- pinMode(relay, OUTPUT);
- pinMode(accessory, INPUT);
- pinMode(button, INPUT);
- pinMode(sensor, INPUT);
- digitalWrite(relay, HIGH);
- } // end of setup
- void loop ()
- {
- digitalWrite(relay, HIGH); //Make sure relay is OFF - Not necessary, just precaution.
- //buttonpress procedure
- while(digitalRead(button) == LOW){
- buttonpress();
- }
- buttonheld = 0; //reset button timer
- blinkLED(); //Blink LED
- //Detection reset routine - Resets detect var every ~90 minutes
- reset++; //add 1 to reset counter
- if(reset > 2700){
- detect = 0;
- reset = 0; }
- //Limits how many times the horn can honk between button presses/accessory power
- //Beeps to identify limit reached
- if(honked > 4){
- disarm = 1;
- beep(50); }
- //start wait procedure
- if(wait > 1){
- disarm = 1; //disarm while waiting (running, after running, or after button press)
- noLED = 0;
- wait--; }
- if(wait == 1){
- disarm = 0;
- wait = 0; }
- //end wait procedure
- if(analogRead(accessory) > 100){
- detect = 0;
- honked = 0;
- noLED = 1;
- wait = 300;
- }
- while(digitalRead(button) == LOW){
- buttonpress();
- }
- //check to see if armed
- if((disarm == 0) && (bdisarm == 00)){
- //Then If Motion Detected
- if(digitalRead(sensor) == LOW) {
- detection();
- }
- }
- digitalWrite(whiteLed, LOW); //Make sure LEDs are OFF
- digitalWrite(redLed, LOW);
- //Start Sleep Procedure
- // clear various "reset" flags
- MCUSR = 0;
- // allow changes, disable reset
- WDTCSR = _BV (WDCE) | _BV (WDE);
- // set interrupt mode and an interval
- WDTCSR = _BV (WDIE) | _BV (WDP2) | _BV (WDP1) | _BV (WDP0); // set WDIE, and 2 second delay
- wdt_reset(); // pat the dog
- set_sleep_mode (SLEEP_MODE_PWR_DOWN);
- sleep_enable();
- attachInterrupt (0, wake, LOW); //pin 2
- attachInterrupt (1, wake, LOW); //pin 3
- sleep_cpu ();
- // cancel sleep as a precaution
- detachInterrupt (0);
- detachInterrupt (1);
- sleep_disable();
- } // end of loop
- void detection(){
- if(bnoLED == 0){
- digitalWrite (whiteLed, HIGH); }
- detect++;
- if(detect > 5){ //Beep!
- beep (150);
- beep (150);
- beep (150); } // End Beep!
- if(detect > 10){ //Honk!
- digitalWrite (relay, LOW);
- delay(150);
- digitalWrite (relay, HIGH);
- delay(50);
- honked++; } //End Honk!
- if(detect > 45){ // Reset detect counter
- detect = 0; }
- } //End Detection
- void buttonpress(){
- wait = 300;
- buttonheld++;
- honked = 0;
- if(buttonheld == 30){
- bdisarm = 0;
- beep(50);
- beep(50);
- wait = 500;
- noLED = 0;
- bnoLED = 0;
- }
- if(buttonheld == 50){
- bdisarm = 1;
- beep(200);}
- if(buttonheld == 80){
- bnoLED = 1;
- beep(75);
- beep(75);
- beep(75);
- }
- delay(100); } //end buttonpress
- void blinkLED(){
- if((noLED == 0) && (bnoLED == 0)){
- if((bdisarm == 0) && (disarm == 0)){
- digitalWrite(whiteLed, HIGH);
- if(honked >= 1){
- digitalWrite(redLed, HIGH); }
- delay (200);}
- else{
- digitalWrite(redLed, HIGH);
- delay (200);
- } //end else
- } //end if
- }
- // end blink
- //beep routine
- void beep(unsigned char delayms){
- digitalWrite(piezo, HIGH); //Piezo On
- delay(delayms); // wait for a delayms ms
- digitalWrite(piezo, LOW); //Piezo Off
- delay(30); // wait for a delayms ms
- }
Advertisement
Add Comment
Please, Sign In to add comment