Buenas a todos.
Antes de nada saludaros a todos y presentarme en este foro. Estoy dando mis primeros pasos con arduino uno, antes he realizado alguna cosilla con pics en basic, así que de c no tengo ni idea, pero lo que llevo trasteado me está gustando mucho.
Al grano...
Este es mi primer proyecto, es muy simple (imagino por los nivelazos que he visto aquí). Tengo montado un HTPC con lo que me queda de un mini-portaltil (sorprendentemente para esta tarea se comporta genial). El arduino se va a encargar de controlar el encendido del pc, los ventiladores y un aplificador.
El encendido lo va a gestionar con un pulsador y a la vez con el mando a distancia con el que manejo el htpc, accionado cualquiera de los dos encendería.
De momento lo que tengo realizado es el encendido/apagado, una secuencia con unos leds, un led que indica señal IR o pulsación del botón.
El problema que por más vueltas que le doy no entiendo es que al resetear el arduino y pulsar el botón no hace nada. Sin embargo, si reseteo y le doy al power del mando infrarrojo si enciende/apaga y a partir de ahí, lo hace también con el botón.
Lo curioso es que el led que tengo de "chivato", cuando el botón no "enciende el pc" el led si indica que se ha pulsado, pero no hace nada más.
Os dejo el código:
#include <IRremote.h>
#define RECV_PIN 10
int timer1 = 75;
int timer2 = 25;
int led =6;
int piloto =7;
int pul =12;
int on =0;
int i =0;
int led1 =5;
int led2 =4;
int led3 =3;
int led4 =2;
//Inicia libreria IR
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(led, OUTPUT);
pinMode(pul, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
irrecv.enableIRIn(); // Inicia recepcion
}
void loop()
{
//Si detecta pulsación o señal IR
if (digitalRead(pul) == HIGH || irrecv.decode(&results))
{
//Indica recepción del IR o accionado del pulsador
digitalWrite(piloto,HIGH);
delay(150);
digitalWrite(piloto,LOW);
//Comprueba si es la TECLA Power
if(results.value==0x24B92)
{
//Comprueba si esta encendido el led, si lo esta lo apaga
if(on ==1)
{
digitalWrite(6,LOW);
on =0;
i =0;
delay(250);
}
//si no, lo enciende
else
{
//Secuencia/animación de leds
for (int i=0; i<=1; i++)
{
//Barrido
digitalWrite(led1, HIGH);
delay(timer1);
digitalWrite(led2, HIGH);
delay(timer2);
digitalWrite(led1, LOW);
delay(timer1);
digitalWrite(led3, HIGH);
delay(timer2);
digitalWrite(led2, LOW);
delay(timer1);
digitalWrite(led4, HIGH);
delay(timer2);
digitalWrite(led3, LOW);
delay(timer2);
digitalWrite(led4, LOW);
delay(timer1);
}
//Parpadeo
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(250);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(250);
digitalWrite(6,HIGH);
on =1;
i =1;
delay(250);
}
}
{
delay(50);
irrecv.resume();
}
}
}
Como he dicho es simple y posiblemente el código se podrá mejorar mucho... tened piedad, que es lo primero que hago
Puedo vivir con ese fallo, pero es que me está matando no saber porque ocurre. Espero que podáis echarme una mano.
Gracias por vuestro tiempo.
Un saludo.