Proyecto Arduino 15. Reloj de arena.

La práctica de esta semana consiste en una especie de reloj de arena. Lo giras y empieza a contar. Yo lo intenté con el “tilt sensor” (sensor de movimiento) pero como no hacía buen contacto y me parece un rollo eso de andar volteando el circuito, lo sustituí por un interruptor de botón normal y corriente.

El código estaba ajustado para un intervalo de una hora. Como no tengo paciencia suficiente, lo cambié para un minuto, y luego para 18 segundos (mucho más conveniente). Al accionar el botón empieza a contar y se van encendiendo los LED uno detrás de otro. Al final quedan los seis encendidos.

Cambié el diseño poniendo LEDs de varios colores, y con otro LED (pata 13 de Arduino) que indica que está en marcha, porque si no, no se notaba nada hasta que se encendía el primer LED de la serie.

Pongo también el video de comprobación del funcionamiento.

Y el código con mis modificaciones en rojo:

/*
Arduino Starter Kit example
Project 8 – Digital Hourglass

This sketch is written to accompany Project 8 in the
Arduino Starter Kit

Parts required:
10 kilohm resistor
six 220 ohm resistors
six LEDs
tilt switch

Created 13 September 2012
by Scott Fitzgerald

http://arduino.cc/starterKit

This example code is part of the public domain
*/

// named constant for the switch pin
const int switchPin = 8;

unsigned long previousTime = 0; // store the last time an LED was updated
int switchState = 0; // the current switch state
int prevSwitchState = 0; // the previous switch state
int led = 2; // a variable to refer to the LEDs

// 600000 = 10 minutes in milliseconds
//long interval = 600000; // interval at which to light the next LED
long interval = 3000; // interval at which to light the next LED

void setup() {
// set the LED pins as outputs
for (int x = 2; x < 8; x++) {
pinMode(x, OUTPUT);
}
// set the tilt switch pin as input
pinMode(switchPin, INPUT);
pinMode(13, OUTPUT);
}

void loop() {
// store the time since the Arduino started running in a variable
unsigned long currentTime = millis();

// compare the current time to the previous time an LED turned on
// if it is greater than your interval, run the if statement
if (currentTime – previousTime > interval) {
// save the current time as the last time you changed an LED
previousTime = currentTime;
// Turn the LED on
digitalWrite(led, HIGH);
// increment the led variable
// in 10 minutes the next LED will light up
led++;
digitalWrite(13, LOW);

if (led == 7) {
// the hour is up
}
}

// read the switch value
switchState = digitalRead(switchPin);

// if the switch has changed
if (switchState != prevSwitchState) {
// turn all the LEDs low
for (int x = 2; x < 8; x++) {
digitalWrite(x, LOW);
}

// reset the LED variable to the first one
led = 2;

//reset the timer
previousTime = currentTime;
digitalWrite(13, HIGH);

}
// set the previous switch state to the current state
prevSwitchState = switchState;
}

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s