Hello guys!
I need some help with this code:
#include <Key.h>
#include <Keypad.h>
byte digitPlace;
byte digit0;
byte digit1;
byte digit2;
byte digit3;
byte digit0pins[] = {14,15,16,17,18,19,20,}; // g-f-e-d-c-b-a for example
byte digit1pins[] = {21,22,23,24,25,26,27,};
byte digit2pins[] = {28,29,30,31,32,33,34,};
byte digit3pins[] = {35,36,37,38,39,40,41,};
byte fontArray[] = {
0b00111111, // 0 with x-g-f-e-d-c-b-a, 1 =- segment on
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};
byte maskArray[] = {0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000,};
byte i;
const byte numRows= 4;
const byte numCols= 4;
char keymap [numRows][numCols]=
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', '+'}
};
byte rowPins[numRows] = {13,12,11,10}; //Rows 0 to 4
byte colPins[numCols]= {9,8,7,6}; //Columns 0 to 4
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
Serial.begin(9600);
for (i=0; i<7; i=i+1){
pinMode (digit0pins[i], OUTPUT);
pinMode (digit1pins[i], OUTPUT);
pinMode (digit2pins[i], OUTPUT);
pinMode (digit3pins[i], OUTPUT);
}
}
void loop() {
char keypressed = myKeypad.getKey();
if (keypressed != NO_KEY)
{
if (keypressed >= 48){ // www.asciitable.com]www.asciitable.com see if at least a '0' came in
keypressed = keypressed - 48; // yes, so convert from ASCII character to a number,
}
if (keypressed >= 0 && keypressed <=9){ // display valid numbers
switch (digitPlace) // switch between the different digits
{
case 0: // digit0
for (i=0; i<7;i=i+1){
if ((fontArray[keypressed] && maskArray[i]) == 0){ // test if segment is equal to 0, turn it off
// for example digit0 = 1, then fontArray[1] = 0b00000110. With i = 0, then 0b00000110 && 0b00000001 = 0,
// so pin for segment A gets turned off
// for example digit0 = 1, then fontArray[1] = 0b00000110. With i = 1, then 0b00000110 && 0b0000010 = 0b00000010,
// so pin for segment B gets turned on
digitalWrite (digit0pins[i], LOW);
Serial.println("digit0");
Serial.println(digit0pins[i]);
delay(500);
}
else { // otherwise, turn it on
digitalWrite (digit0pins[i], HIGH);
Serial.println("digit 0");
Serial.println(digit0pins[i]);
}
}
break;
case 1: // digit1
for (i=0; i<7;i=i+1){
if ((fontArray[keypressed] && maskArray[i]) == 0){
digitalWrite (digit1pins[i], LOW);
Serial.println("digit1");
Serial.println(digit1pins[i]);
delay(500);
}
else { // otherwise, turn it on
digitalWrite (digit1pins[i], HIGH);
Serial.println("digit 1");
Serial.println(digit1pins[i]);
delay(500);
}
}
break;
case 2: // digit2
for (i=0; i<7;i=i+1){
if ((fontArray[keypressed] && maskArray[i]) == 0){
digitalWrite (digit2pins[i], LOW);
Serial.println("digit2");
Serial.println(digit2pins[i]);
delay(500);
}
else { // otherwise, turn it on
digitalWrite (digit2pins[i], HIGH);
Serial.println("digit 2");
Serial.println(digit2pins[i]);
delay(500);
}
}
break;
case 3: // digit3
for (i=0; i<7;i=i+1){
if ((fontArray[keypressed] && maskArray[i]) == 0){
digitalWrite (digit3pins[i], LOW);
Serial.println("digit3");
Serial.println(digit3pins[i]);
delay(500);
}
else { // otherwise, turn it on
digitalWrite (digit3pins[i], HIGH);
Serial.println("digit 3");
Serial.println(digit3pins[i]);
delay(500);
}
}
break;
}
if (keypressed =='#'){ // if # came in, move to next digit
digitPlace = digitPlace +1;
if (digitPlace == 4){
digitPlace = 0;
}
}
}
}
}
When I pressed e.g. 1 on serial monitor shows this :
digit 0
14
digit 0
15
digit 0
16
digit 0
17
digit 0
18
digit 0
19
digit 0
20
What is the problem?
My project is to make a 4 7-led segment display. Something like this 1#3#5#7 ---> display shows 1357.