///////////////////////////////////////////////////////////////////////////////////// // Doorbell Phone v1.0 by Bryan Zimmer // http://www.bryanzimmer.net // Released 5-12-2009 ///////////////////////////////////////////////////////////////////////////////////// int ringModePin = 4; // connects to pin 4 on ag1170s int forwardReversePin = 3; // connects to pin 3 on ag1170s int manualRingPin = 11; // door bell button or receive pin on wireless receiver int wirelessRingPin = 0; // wireless doorbell pin on analog pin 0 int ledPin = 13; // led connected to digital pin 13 ///////////////////////////////////////////////////////////////////////////////////// void setup() { pinMode(ringModePin, OUTPUT); // configure i/o pins pinMode(forwardReversePin, OUTPUT); pinMode(ledPin, OUTPUT); pinMode(manualRingPin, INPUT); pinMode(wirelessRingPin, INPUT); digitalWrite(ringModePin, LOW); // set ringMode to zero/low/off digitalWrite(forwardReversePin, HIGH); // set forwardReverse to one/high/on digitalWrite(ledPin, LOW); // turn led off digitalWrite(wirelessRingPin, HIGH); // turn on internal pull-up resistor //temporarily done with an external resistor //digitalWrite(manualRingPin, HIGH); Serial.begin(9600); delay(1000); Serial.print("Testing ringer."); // test ringer and flash led to let everyone know we're ready. Serial.println(); digitalWrite(ringModePin, HIGH); digitalWrite(forwardReversePin, LOW); digitalWrite(ledPin, HIGH); delay(50); digitalWrite(ledPin, LOW); digitalWrite(forwardReversePin, HIGH); digitalWrite(ringModePin, LOW); Serial.print("System ready."); Serial.println(); } ///////////////////////////////////////////////////////////////////////////////////// void loop() { while ( digitalRead(manualRingPin) == HIGH && analogRead(wirelessRingPin) > 670 ) { //Serial.print("No button pushed. wirelessRingPin is ["); // print debugging info to the console //Serial.print( analogRead(wirelessRingPin) ); //Serial.print("]"); //Serial.println(); delay(100); } Serial.print("Button pushed."); // print debugging info to the console Serial.println(); for ( int rings = 0; rings < 2; rings++ ) // go through ring cycle two times { digitalWrite(ringModePin, HIGH); // start ringing. turn ringMode on. Serial.print("Ringing."); // print debugging info to the console Serial.println(); for ( int pulses = 0; pulses < 20; pulses++ ) // ring for one second. { digitalWrite(forwardReversePin, HIGH); // toggle forwardReverse at 20hz (50ms) to get standard USA-style ringing. digitalWrite(ledPin, HIGH); // flash led. delay(50); digitalWrite(forwardReversePin, LOW); digitalWrite(ledPin, LOW); delay(50); } digitalWrite(forwardReversePin, HIGH); digitalWrite(ringModePin, LOW); // stop ringing. turn ringMode off. Serial.print("Not ringing."); // print debugging info to the console Serial.println(); delay(3000); // don't ring for three seconds. } }