![]() |
| The VT pin isn't of to much concern for me right now so it just tucks in between the two pin banks :) |
Check out the code below. This is great but if I don't want to constantly poll for buttons I may miss one. So my intention is to order a latching version, when you press the button on the keypad the pin goes high and stays high until you press it again. My thought is that if I am powering the receiver from the arduino then I can read it maybe once a second or even less often then when a high state is detected then I can simple "reboot" the receiver by dropping the +5v pin to ground. So until I get one in I will hope it resets back to ground on all the signal pins like I need
/*--------------------------------------------------------
Adafruit's Simple RF Receiver example
http://www.adafruit.com/products/1096
Author: Chris Crumpacker
Date: August 2013
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
Sketch Notes: This is set as if you put the reciever directly
onto an arduino with gnd in pin 2 and the VT pin in the
gap between the pin banks.
--------------------------------------------------------*/
#define GROUNDPIN 2
#define POWERPIN 3
// Arduino Pin Numbers
int signalPin[4] = { 4, 5, 6, 7 };
// Reciever Pin Names
const char* pinName[] = { "D3", "D2", "D1", "D0" };
// Keyfob Pin Names
const char* buttonName[] = { "D", "C", "B", "A" };
int lastSignalState[] = { 0, 0, 0, 0 };
int signalState = 0;
float onTime = 0.00;
void setup() {
// Set the ground pin to a Low output
pinMode(GROUNDPIN, OUTPUT);
digitalWrite(GROUNDPIN, LOW);
// Set the +5v pin to a High output
pinMode(POWERPIN,OUTPUT);
digitalWrite(POWERPIN, HIGH);
// Setting the signal pins as inputs
for (int i = 0; i < 4; i++) {
pinMode(signalPin[i], INPUT);
}
// Starting the serial interface
Serial.begin(19200);
}
void loop(){
// For each of the 4 pins we loop thru and check the state.
for (int i = 0; i < 4; i++) {
// Read the current pin
signalState = digitalRead(signalPin[i]);
if (signalState != lastSignalState[i]) {
// if the state has changed...
if (signalState == HIGH) {
// ...and the current state is HIGH...
Serial.print("Receiver Pin: ");
Serial.println(pinName[i]);
Serial.print("Keyfob Button: ");
Serial.println(buttonName[i]);
Serial.println("Switched ON");
Serial.println("------------------------------");
onTime = millis();
}
else {
// ...and the current State is LOW...
Serial.print("Receiver Pin: ");
Serial.println(pinName[i]);
Serial.print("Keyfob Button: ");
Serial.println(buttonName[i]);
Serial.print("Switched OFF after ");
Serial.print(((millis() - onTime) / 1000.00));
Serial.println(" seconds");
Serial.println("------------------------------");
}
}
// save the current state to the last state array
lastSignalState[i] = signalState;
}
}
