const int button = 46;//pin del pulsador
int rows[13] = {0,1,2,3,42,5,6,7,8,9,10,11,12};//filas de leds
int columns[6] = {13,14,15,16,17,4};//columnas de leds
int sequence = 0;//aumento para cambiar de secuencia
int buttonOld = 1;//estado anterior del boton
int buttonNew;//estado actual del boton
unsigned long wait;//valor para millis
unsigned long wait2 = 0;//resta para millis
unsigned long time1 = 10;//tiempo predeterminado
unsigned long time2 = 200;
unsigned long time3 = 500;
//llamado para cada secuencia
void oneSequence();
void twoSequence();
void threeSequence();
void fourSequence();
void setup() {
Serial.begin(9600);
for(int i=0; i<=13; i++){//pines de salida
pinMode(rows[i],OUTPUT);
digitalWrite(rows[i],LOW);
}
for(int j=0; j<=6; j++){
pinMode(columns[j],OUTPUT);
digitalWrite(columns[j],HIGH);
}
pinMode(button, INPUT);//pines de entrada
}
void loop() {
wait = millis();
if(wait-wait2>=time2){
wait2 = wait;
buttonNew = digitalRead(button);//lee el estado del boton
if(buttonNew == 0 && buttonOld == 1){//condicion de detección del botón
switch(sequence){//secuencia a elegir
case 0:
do {//repite la secuencia hasta que el boton cambie de estado
oneSequence();
buttonNew = digitalRead(button);//despues de la secuencia, pregunta por el estado del botón
} while(buttonNew == 1);//condición en caso de que cambie el estado del botón
sequence = 1;//para que al siguiente pulso del botón, este escoja otra secuencia
break;
case 1:
do {
twoSequence();
buttonNew = digitalRead(button);
} while(buttonNew == 1);
sequence = 2;
break;
case 2:
do {
threeSequence();
buttonNew = digitalRead(button);
} while(buttonNew == 1);
sequence = 3;
break;
case 3:
do {
fourSequence();
buttonNew = digitalRead(button);
} while(buttonNew == 1);
sequence = 0;
break;
default:
break;
}
}
buttonOld = buttonNew;//no se leerá otro pulso instantaneo, hasta que se guarde el anterior valor de este
}
}
void oneSequence() {
unsigned long speed1 = millis();
unsigned long speed2 = 0;
unsigned long speed3 = 0;
int total = 800;
for(int i=0; i<=5; i++){
if(speed1-speed2>=total){
speed2 = speed1;
digitalWrite(columns[i], LOW);
for(int j=0; j<=12; j++){
if(speed1-speed3>=time1){
speed3 = speed1;
digitalWrite(rows[j], HIGH);
j++;
}
}
}
}
}
void twoSequence() {
for(int i=0; i<=12; i++){
digitalWrite(rows[i], HIGH);
for(int j=0; j<=5; j++){
digitalWrite(columns[j],LOW);
delay(time1);
digitalWrite(columns[j],HIGH);
delay(time1);
}
digitalWrite(rows[i],LOW);
}
}
void threeSequence() {
for(int i=0; i<=5; i++){
digitalWrite(columns[i],LOW);
for(int j=0; j<=4; j++){
digitalWrite(rows[j],HIGH);
}
delay(time1);
for(int k=0; k<=4; k++){
digitalWrite(rows[k],LOW);
}
delay(time1);
for(int l=5; l<=8; l++){
digitalWrite(rows[l],HIGH);
}
delay(time1);
for(int m=5; m<=8; m++){
digitalWrite(rows[m],LOW);
}
delay(time1);
for(int n=9; n<=12; n++){
digitalWrite(rows[n],HIGH);
}
delay(time1);
for(int ñ=9; ñ<=12; ñ++){
digitalWrite(rows[ñ],LOW);
}
delay(time1);
digitalWrite(columns[i],HIGH);
delay(time1);
}
}
void fourSequence() {
for(int i=0; i<=5; i++){
digitalWrite(columns[i], LOW);
}
for(int j=0; j<=4; j++){
digitalWrite(rows[j],HIGH);
}
delay(time2);
for(int k=0; k<=4; k++){
digitalWrite(rows[k],LOW);
}
delay(time2);
for(int l=5; l<=8; l++){
digitalWrite(rows[l],HIGH);
}
delay(time2);
for(int m=5; m<=8; m++){
digitalWrite(rows[m],LOW);
}
delay(time2);
for(int n=9; n<=12; n++){
digitalWrite(rows[n],HIGH);
}
delay(time2);
for(int ñ=9; ñ<=12; ñ++){
digitalWrite(rows[ñ],LOW);
}
delay(time2);
for(int o=0; o<=5; o++){
digitalWrite(columns[o], HIGH);
}
delay(time2);
}Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1