Secuencia de luces controlado con teclado_4x4 y switch case

#1
/////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 & Moderador eventual
#2
. . . .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 ;)
 
#3
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
 
#4
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