Buenas tardes.
Soy bastante nuevo en el tema, pero a base de ensayo y error he conseguido realizar la programación de un circuito en Arduino que lo que haría sería encender o apagar los faros antiniebla de una motocicleta con opción de sensor de luz así como la carga wireless para el teléfono móvil.
Hasta ahí todo ha funcionado perfectamente y tengo el hardware totalmente operativo y funcionando.
Mi problema es el siguiente:
Me gustaría añadir un contador de tiempo al pulsador de los antinieblas de unos 2 segundos, para que en vez de saltar a una de las 3 opciones que tiene (off, on, automatico) me cambiase a una opción parpadeo intermitente (blink creo que se llama).
He buscado en mil foros pero no soy capaz de hacerlo funcionar.
¿Alguien me podría echar una mano?
Gracias de antemano.
Aqui pongo el código completo:
// VERSION TOTALMENTE OPERATIVA.
// 2 PULSADORES, EL 1º CONTROLA RELE 1 QUE SERÁ EL QUE ACTIVE O DESACTIVE LA CARGA WIRELES, EL 2ºCONTROLA ANTINIEBLAS. 3 POSICIONES, OFF, ON Y AUTOMATICO (SENSOR DE LUZ)
// PINES PARA ANTINIEBLAS
// Define los pines a utilizar para antinieblas
int ledRojo = 5;
int ledVerde = 6;
const int ledrele = 3; // En protoboard es un led, pero en realidad irá conectado a un rele
// Guarda los valores a signar a cada color (0-254)
int ValorRojo = 250;
int ValorVerde = 250;
int ValorRojo2 = 250;
int ValorVerde2 = 250;
int Valorrele = 250;
// BOTON SELECTOR LUCES ANTINIEBLA
int BotonSelect = 7;
//sensor de luz
const int FOTOPIN = A0;
int valorSensor = 0;
//const int Ledsensor = 9;
int valorMapeado = 0;
// PINES PARA TELEFONO MOVIL
int ledRojo2 = 9;
int ledVerde2 = 10;
const int ledrele2 = 11; // En protoboard es un led, pero en realidad irá conectado a un rele
int BotonSelect2 = 8;
int ledSeleccionado2 = 0;
// PARA REGULAR EL RETARDO DE LOS LEDS ANTINIEBLA
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 3000;
// PARA REGULAR EL RETARDO DE LA LUZ ESTROBOSCÓPICA
unsigned long duracion = 0; //almacenará la duración de la pulsación del botón del antiniebla
int pinLed = 0;
int pinLed2 = 0;
float pulsacion;
float tiempo;
void setup()
{
// Hay que indicar que lo pines utilizados por los botones son de ENTRADA
pinMode(BotonSelect, INPUT);
pinMode(BotonSelect2, INPUT);
analogWrite(ledRojo, 200);
// datos para sensor de luz
pinMode (FOTOPIN, INPUT);
// pinMode (Ledsensor, OUTPUT);
pinMode (ledrele, OUTPUT);
Serial.begin(9600);
}
// Valor por defecto: Rojo
// 0= Rojo, 1=Verde, 2=Azul
void loop()
{
unsigned long currentMillis = millis();
if (digitalRead(BotonSelect) == HIGH){
// if (pulsacion >= tiempo){
// while (pulsacion>2000){
// analogWrite (ledrele, 250);
// }
// }
pinLed++;
// Para no pasarnos de vueltas
if (pinLed > 2) {
pinLed = 0;
}
// Apagamos todos los LED ya que luego se mostrarA sOlo el led seleccionado
analogWrite(ledRojo, 0);
analogWrite(ledVerde, 0);
// Esperamos a que el boton se suelte
while (digitalRead(BotonSelect) == HIGH) {
analogWrite (ledrele, 0); }
delay(80); // Esperamos un poquito más...
}
if (digitalRead(BotonSelect2) == HIGH)
{
pinLed2++;
// Para no pasarnos de vueltas
if (pinLed2 > 1) {
pinLed2 = 0;
}
// Apagamos todos los LED ya qu eluego se mostrará sólo el led seleccionado
analogWrite(ledRojo2, 0);
analogWrite(ledVerde2, 0);
// Esperamos a que el boton se suelte
while (digitalRead(BotonSelect2) == HIGH) {
analogWrite (ledrele2, 0); }
delay(80); // Esperamos un poquito más...
}
if (pinLed2 == 0)
{
analogWrite(ledRojo2, ValorRojo2);
analogWrite (ledrele2, 0);
}
if (pinLed2 == 1) {
analogWrite(ledVerde2, ValorVerde2);
analogWrite (ledrele2, 250);
}
// Actualiza el valor del color seleccionado
if (pinLed == 0) {
analogWrite(ledRojo, ValorRojo);
analogWrite (ledrele, 0);
}
if (pinLed == 1) {
analogWrite(ledVerde, ValorVerde);
analogWrite (ledrele, 250);
}
if (pinLed == 2) {
analogWrite(ledVerde, ValorVerde );
analogWrite(ledRojo, ValorRojo);
valorSensor = analogRead (FOTOPIN);
valorMapeado = map (valorSensor, 1020, 0, 0, 255);
if ( valorSensor > 970) {
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if ( valorSensor > 970) {
analogWrite (ledrele, 0);
}
}
}
if (valorSensor < 970) {
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if (valorSensor < 970) {
analogWrite (ledrele, 250);
}
}
}
Serial.print ("Sensor: ");
Serial.println (valorSensor);
}
}