Hola, estoy intentando crear un algorithmo el cual haga encender led:
-hay 16 led colocadas en forma de circulo, este algorithmo tiene que encerder(o no) entre 1 a 3 leds seguidas pero tiene que dejar 2 leds apagadas entre las leds prendidas. el problema esque he puesto para enviar al monitor si un led se enciende escribir 1 y si se apaga escribir 0 y lo que obtengo es esto:
0011110011001011100111001011100(asi al infinito) y yo no quiero mas de 3 '1' y no menos de 2 "0"
#define S1 34
#define S2 35
#define S3 36
#define S4 37
#define S5 38
#define S6 39
#define S7 40
#define S8 41
#define V1 42
#define V2 43
#define V3 44
#define V4 45
#define V5 46
#define V6 47
#define V7 48
#define V8 49
int T2;
int K = 0;
int I = 0;
int Z = 1;
char L1[] = {S1, S2, S3, S4, S5, S6, S7, S8, V1, V2, V3, V4, V5, V6, V7, V8};
int L2[16];
// permite encender una led aleatoriamente y añadir 1 o 0 a la lista L2 para saber el estado de la led
void HIGHorLOW() {
if (I == 0) {
L2[K] = 1;
digitalWrite((L1[K]), HIGH);
Serial.print("1");
} else {
L2[K] = 0;
digitalWrite((L1[K]), LOW);
Serial.print("0");
}
}
// Apaga o mantiene apagada una led y añade 0 a la lista L2 para saber el estado de la led
void LOW2() {
L2[K] = 0;
digitalWrite((L1[K]), LOW);
Serial.print("0");
}
// Calcula el un numero aleatorio y añade 1 a K, como las listas tienen 16 elementos esta variable se reinicializa cuando K=16
void NB() {
I = random(0, 2);
if (K < 16) {
K = K + 1;
} else {
K = 1;
}
}
void setup() {
pinMode((L1[K]), OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Z != 0) {// commenzamos con las 3 primeras led
NB();
HIGHorLOW();//1 led
NB();
HIGHorLOW();//2 led
NB();
if ((L2[K - 2])==1 && (L2[K - 1]) == 0) {//para crear el agujero de 2 led apagadas
LOW2();
} else {
HIGHorLOW();
}
Z = 0;
} else {
NB();
if (K == 1) {//cuando K= 1,o 2, o 3 , calcular los estados de las led de detras es especial
if ((L2[K + 13]) == 1 && (L2[K + 14]) == 1 && (L2[K + 15]) == 1 || (L2[K + 13]) == 1 && (L2[K + 14]) == 1 && (L2[K + 15]) == 0 || (L2[K + 13]) == 0 && (L2[K + 14]) == 1 && (L2[K + 15]) == 0) {// porque el maximo de led encendidas seguidamente es 3 y tiene que haber siempre 2 led apagadas entre las encendidas
LOW2();
} else {
HIGHorLOW();
}
} else if (K == 2) {
if ((L2[K + 13]) == 1 && (L2[K + 14]) == 1 && (L2[K - 1]) == 1 || (L2[K + 13]) == 1 && (L2[K + 14]) == 1 && (L2[K - 1]) == 0 || (L2[K + 13]) == 0 && (L2[K + 14]) == 1 && (L2[K - 1]) == 0) {
LOW2();
} else {
HIGHorLOW();
}
} else if (K == 3) {
if ((L2[K + 13]) == 1 && (L2[K - 2]) == 1 && (L2[K - 1]) == 1 || (L2[K + 13]) == 1 && (L2[K - 2]) == 1 && (L2[K - 1]) == 0 || (L2[K + 13]) == 0 && (L2[K - 2]) == 1 && (L2[K - 1]) == 0) {
LOW2();
} else {
HIGHorLOW();
}
} else {
if ((L2[K - 3]) == 1 && (L2[K - 2]) == 1 && (L2[K - 1]) == 1 || (L2[K - 3]) == 1 && (L2[K - 2]) == 1 && (L2[K - 1]) == 0 || (L2[K - 3]) == 0 && (L2[K - 2]) == 1 && (L2[K - 2]) == 0) {
LOW2();
} else {
HIGHorLOW();
}
}
}
}