Pages: [1]   Go Down
Author Topic: Keypad linked to specially formated serial output.  (Read 525 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

California
Offline Offline
God Member
*****
Karma: 13
Posts: 629
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/* @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;
  }
}
Logged


Pages: [1]   Go Up
Jump to: