Secuencia de luces controlado con teclado_4x4 y switch case

/////PRUEBA/////
#include <Keypad.h>
#include <string.h>

int i;
byte pos_led = 22;
unsigned long vel=300;
unsigned long t_actual, t_pasado;

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {39, 41, 43, 45}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {38, 40, 42, 44}; //connect to the column pinouts of the keypad
Keypad teclado = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void conf_pines(void);
void encender_pines(void);
void apagar_pines(void);
void ejecuta_secuencia(void);

void setup() {
// put your setup code here, to run once:
//Serial.begin (9600);
conf_pines ();
encender_pines ();
apagar_pines();
pinMode (13, OUTPUT);
t_actual = t_pasado = 0; // funcion hecha con millis

}

void loop() {

ejecuta_secuencia();
}

void conf_pines(void){
for(i=22;i<=36;i+=2){
pinMode(i,OUTPUT);
}
}
void apagar_pines(void){
for(i=22;i<=36;i+=2){
digitalWrite(i,LOW);
}
}
void encender_pines(void){
for(i=22;i<=36;i+=2){
digitalWrite(i,HIGH);
}
}

void ejecuta_secuencia(void){

char tecla = teclado.getKey();

if (tecla) {

switch(tecla){
case '1':
t_actual = millis(); // referencia de tiempo
if((t_actual-t_pasado)>=vel){
apagar_pines();
digitalWrite(pos_led,HIGH);
pos_led +=2;
if(pos_led > 36){
pos_led = 22;
}
}t_pasado=t_actual;
break;

case '2':
t_actual = millis(); // referencia de tiempo
if((t_actual-t_pasado)>=vel){
apagar_pines();
digitalWrite(pos_led,HIGH);
pos_led -=2;
if(pos_led < 22){
pos_led = 36;
}
}t_pasado=t_actual;
break;
}
}
}
Por favor necesito ayuda con ese código ya que no se activa la secuencia (1 o 2) al presionar en el teclado el caracter ya que recorre cada posicion cada vez que se presiona el la misma tecla ¿QUE DEBO HACER ?
 

Fogonazo

Exorcista "Senior" aprobado por el vaticano.
. . . .Por favor necesito ayuda con ese código ya que no se activa la secuencia (1 o 2) al presionar en el teclado el caracter ya que recorre cada posicion cada vez que se presiona el la misma tecla ¿QUE DEBO HACER ?
Yo comenzaría por describir que es lo que se supones haga el código paso a paso ;)
 
Es un código que tiene como objetivo encender y apagar varias secuencias de 8 leds pero por medio del teclado así
opcion 1: que prenda de izquierda a derecha
opcion 2: que se prenda de derecha a izquierda
opcion 3: que sean de dos en dos
etcétera; todas las secuencias deben estar en una función y no es permitido emplear delay solo con millis es aceptado

intente incluir ciclos de repeticion pero no ejecuta las secuencias en el void loop ya que al incluir la función ejecutar_secuencia dentro del realiza la ejecución no prende el los leds uno tras otro automáticamente sino que espera que presione otra vez el mismo tecla para recorrer el siguiente led
 
Comenta el código, un código sin comentar no lo entiende ni el que lo ha escrito... Por eso no lo entiendes ni tu.

Me refiero a que comentes en el código, no en un post aparte. En cada línea
 

Arriba