#include <NoDelay.h>
#include <string.h>
// Definir pines
const unsigned int PIN1 = 2;
const unsigned int PIN2 = 4;
const unsigned int PIN3 = 12;
const unsigned int PIN4 = 13;
const unsigned int BAUD_RATE = 115200;
const long PAUSA = 250;
int i = 0;
const int pins[] = {PIN1, PIN2, PIN3, PIN4};
typedef enum {
ltr,
rtl,
off
} estadoLeds;
estadoLeds edoLuz;
noDelay pausa(PAUSA);
void ltrLuces();
void rtlLuces();
void parpadear();
void offLuces();
void setup() {
// Inicializar pines como salidas
pinMode(PIN1, OUTPUT);
pinMode(PIN2, OUTPUT);
pinMode(PIN3, OUTPUT);
pinMode(PIN4, OUTPUT);
Serial.begin(BAUD_RATE);
offLuces();
}
void loop() {
char comando[6];
if (Serial.available() > 0) {
// Lee a lo mas 5 caracteres del puero serie o hasta que se
// presione la tecla Enter y los guarda en el arreglo
// comando.
int n = Serial.readBytesUntil('\n', comando, 5);
// Todas las cadenas en C/C++ terminan en el carácter de
// fin de cadena, ‘\n’.
comando[n] = '\0';
// Escribe el comando al puerto serie
Serial.print("Comando: ");
Serial.println(comando);
if (pausa.update()) {
switch (edoLuz){
case off:
if(strcmp(comando, "ltr") == 0){
ltrLuces();
edoLuz = ltr;
}
else if(strcmp(comando, "rtl") == 0){
rtlLuces();
edoLuz = rtl;
}
else{
parpadear();
}
case ltr:
ltrLuces();
if(strcmp(comando, "off") == 0){
offLuces();
edoLuz = off;
}
else{
parpadear();
}
case rtl:
if(strcmp(comando, "off") == 0){
offLuces();
edoLuz = off;
}
else{
parpadear();
}
}
}
}
}
void offLuces() {
digitalWrite(PIN1, LOW);
digitalWrite(PIN2, LOW);
digitalWrite(PIN3, LOW);
digitalWrite(PIN4, LOW);
}
void ltrLuces() {
if (i == 3) {
i = 0;
digitalWrite(pins[3], LOW);
digitalWrite(pins[i], HIGH);
}
else {
digitalWrite(pins[i], LOW);
digitalWrite(pins[++i], HIGH);
}
}
void rtlLuces() {
if (i == 0) {
i = 3;
digitalWrite(pins[0], LOW);
digitalWrite(pins[i], HIGH);
}
else {
digitalWrite(pins[i], LOW);
digitalWrite(pins[--i], HIGH);
}
}
void parpadear() {
if (i == 0) {
i = 2;
digitalWrite(PIN1, HIGH);
digitalWrite(PIN2, HIGH);
digitalWrite(PIN3, HIGH);
digitalWrite(PIN4, HIGH);
}
else {
digitalWrite(PIN1, LOW);
digitalWrite(PIN2, LOW);
digitalWrite(PIN3, LOW);
digitalWrite(PIN4, LOW);
i = 0;
}
}