Pages: [1]   Go Down
Author Topic: Need help with a Boolean operation and simplification on LED Keypad  (Read 686 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi All, i am contructing a CAN based keypad for a motorsport vehicle,

Currently i am merging some code to read a keypad and switch on a corresponding LED above it

I am having trouble with the Boolean "i" ststement as it requires 2 pushes of a keypad to extinguish or illuminate an led, if the same operation has been perfomed on a diffrerent key

I understand why it is doing it, as it needs to switch from i = 1 to i = 0 before it can switch an LED on again, i just cant seem to get my head round doing it, also i would like to simplify it a little but not sure how.

Hope you are able to help

Many thanks

Rich

Code:


#include <Keypad.h> // Include Keypad library
#include <Ucs1903.h> // Include LED Controller Library



#define NUM_LEDS 4  // Defines Number of LED's
#define PIN 13      // Defines Data Pin for LED's

Ucs1903 ledStrip(PIN, NUM_LEDS);


boolean i = 0; //Defines Switch State

int j = 0;   // Variable to Define which LED to Switch


const byte ROWS = 5; //defines number of rows
const byte COLS = 3; //defines number of columns

char keys[ROWS][COLS] = {  //define the symbols on the buttons of the keypads as an array
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'0','A','B'},
  {'C','D','E'},
};

byte rowPins[ROWS] = {9, 8, 7, 6, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {12, 11, 10,}; //connect to the column pinouts of the keypad

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




void setup(){


keypad.addEventListener(keypadEvent); //Listen for a keypad Press
}
  
void loop(){
  char key = keypad.getKey();
  
  if (key) {
}
  
     if (i==1){
  ledStrip.setLed(j, 0, 0, 75);  // Turn on LED if Putton has been Pressed
  }
  
   else
    ledStrip.setLed(j, 0, 0, 0);   // Else Turn LED Off
 
    
    ledStrip.show();   // Send Data to LED Controller
    
}


void keypadEvent(KeypadEvent key){         //What to do when a particular Key is pressed
  switch (keypad.getState()){
    case PRESSED:
      switch (key){
        case '1':  i = !i, j= 0; break;
        case '2':  i = !i, j= 1; break;
        case '3':  i = !i, j= 2; break;
        case '4':  i = !i, j= 3; break;
        case '5':  break;
        case '6':  break;
        case '7':  break;
        case '8':  break;
        case '9':  break;
      }
    break;
  }
    
}
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 216
Posts: 13664
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


your indenting makes the program very hard to read. Then you miss code flaws like

  if (key) {
}
 
if a key is pressed do nothing otherwise nothing. Probably not what you meant

Reformat your code so it better reflect the structure you want. TIP use CTRL-T to auto format your code in the IDE.

Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Pages: [1]   Go Up
Jump to: