Go Down

Topic: Keypad linked to specially formated serial output. (Read 647 times) previous topic - next topic

Ok.. So I am new to arduino... BUT I have dated experience with IC, and electronics... Read that as I was a digital/analog tech in the Marines working on Radars with everything from ICs to transistors and sealed circuits to high-power cross field amplifiers and travelling wave tubes... anyway....

I've decided to delve into an old project...

Here is my goal....
Using an existing ISY994i home controller I would like to be able to do multiple control changes using 3 to 5 digit codes that upload via serial interface to the controller.

as I see it, I can get a 3x4 matrix keyboard, connect that to an arduino and then output to the serial INSTEON modem.
on the surface that looks very straight forward..
the challenge comes in where I want to format the serial output such that the serial communications will send the data from the keypad as a user bit in the INSTEON Message format..
Pass the entire keyboard string to the serial output such that a # is the terminating input. so if I enter 341134456774# it sends all that or if I enter 323# it sends only that

So Is that as simple as I think?  The format of the serial message is just programmed on the arduino? or should I look for another solution?

likely I would do this:
Code starts with a number and ends with a #...
then the number in the middle is the IF statement that starts a Macro on the ISY controller....

The possibilities are endless...

Thoughts??

Thanks!!!

RT


Try playing with this library:
http://www.arduino.cc/playground/Code/Keypad

It appears to have most of the functionality you are looking for.  Here is a sample that plays with those non-numerics:
Code: [Select]
/* @file EventSerialKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Demonstrates using the KeypadEvent.
|| #
*/
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
        {'1','2','3'},
        {'4','5','6'},
        {'7','8','9'},
        {'*','0','#'}
        };
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
byte ledPin = 13;

boolean blink = false;

void setup(){
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  digitalWrite(ledPin, HIGH);   // sets the LED on
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}

void loop(){
  char key = keypad.getKey();

  if (key) {
    Serial.println(key);
  }
  if (blink){
    digitalWrite(ledPin,!digitalRead(ledPin));
    delay(100);
  }
}

//take care of some special events
void keypadEvent(KeypadEvent key){
  switch (keypad.getState()){
    case PRESSED:
      switch (key){
        case '#': digitalWrite(ledPin,!digitalRead(ledPin)); break;
        case '*':
          digitalWrite(ledPin,!digitalRead(ledPin));
        break;
      }
    break;
    case RELEASED:
      switch (key){
        case '*':
          digitalWrite(ledPin,!digitalRead(ledPin));
          blink = false;
        break;
      }
    break;
    case HOLD:
      switch (key){
        case '*': blink = true; break;
      }
    break;
  }
}
http://www.spcomputing.com

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy