Saludos. estoy tratando de hacer un programa el cual apreto un boton y prende led1, luego si dejo de apretarlo el led1 debe seguir encendido pero si apreto de nuevo el botón debe encender el led2 y debe estar en ese ciclo.
estoy trancado en el código ya que soy principiante, pero si me dan algunas ideas en que debería hacer o donde buscar estaria agradecido.
el codigo que llevo es el siguiente:
const int boton = 10;
const int led1 = 11;
const int led2 = 12;
int estadoboton = 0 ;
void setup() {
pinMode(10, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
estadoboton = digitalRead(10);
if (estadoboton == HIGH)
{
delay(20);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
estadoboton = digitalRead(10);
if (estadoboton == LOW)
{
delay(20);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
}}}
El esquema no sé si esta bien montado, no es lo mío y los PullUp y PullDown me llevan PullKao, pero el código con un extra sería este:
// --- Declaración de constantes, nº de puertos
const int boton = 10;
const int led1 = 11;
const int led2 = 12;
// --- Variables de trabajo
int estadoboton = 0;
// --- Botones apagados
bool estadoLED1 = false;
bool estadoLED2 = false;
// --- Funciones
void ManejaLED(int led, int estado) {
digitalWrite(led, estado);
}
// --- Configuración general
void setup() {
// --- Activación de los estados de los puertos
pinMode(10, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// --- Dejar apagados los led, por si quedaron encendidos
ManejaLED(led1, LOW);
ManejaLED(led2, LOW);
// --- Esto no hace falta es para que se entienda mejor
estadoLED1 = false;
estadoLED2 = false;
}
// --- Ciclo
void loop() {
estadoboton = digitalRead(boton);
if (estadoboton == HIGH) {
// --- LED1 está apagado, lo encendemos
if (estadoLED1 == false) {
ManejarLED(led1, HIGH);
estadoLED1 = true;
}
// --- LED1 ya está encendido
else {
// --- LED2 está apagado, lo encendemos
if (estadoLED2 == false) {
ManejarLED(led2, HIGH);
estadoLED2 = true;
}
// --- LED2 está encendido, lo apago (un extra)
else {
ManejarLED(led2, LOW);
estadoLED2 = false;
}
}
}
Otro extra: No pongas espacios en blanco al final de las líneas de programa o irás el infierno de los programadores.
Estoy en windows montando un vídeo para mis clases, así que no puedo probar ni compilar el código, pero debería funcionar tal cual.
Saludos TonyDiana, gracias por la ayuda, el codigo en si no funciona (ya lo compile), pero con esta información adicional quizás pueda arreglarlo. Comentare avances. gracias
Como lo escribía con el editor de textos de windows, no me dí cuenta que aveces llamo a la función ManejarLED y otras a ManejaLED sin la r delante de LED, hay que ponerlas a todas con el mismo nombre
Al copiar y pegar que me quedó el último } fuera, es el que cierra el loop