lunes, 2 de febrero de 2015

Mi semáforo para peatones en Arduino

El sábado 31 de enero he asistido a una de las jornadas de "Sabados Libres en Altamar" organizado por GalPon.

Era un taller de Arduino, donde explicaron brevemente qué era para los que nunca habían asistido a una de estas jornadas y luego nos pusimos todos al chollo.

Hemos compartido opiniones, pensado funciones útiles para arduino y también hemos hablado de muchas otras cosas más relacionadas con el mundo de la tecnología.

Una de las cosas que estuve intentando hacer con mi bajo nivel de programación en arduino fue un semáforo para peatones.

El funcionamiento es muy simple. El semáforo permanece en rojo (10 segundos), luego cambia a verde (otros 10 segundos) pero antes de volver a pasar a rojo, el verde parpadea acompañado de un zumbido intermitente, a la par que la luz.

Aquí comparto con vosotros el código que he empleado y modificado para conseguir este funcionamiento:

/*
  Semáforo peatones
   Se enciende el led rojo durante 10 segundos, se apaga y se enciende el led verde durante 7 segundos para luego parpadear durante 3 segundos a la vez que emite un zumbido.

  Este código es de dominio público.
 */


// Definimos variables:
int ledr = 12; //led rojo
int ledv = 11; //led verde
int zum = 10;  //zumbador

void setup() {              
  // definimos cada pint como salidas
  pinMode(ledr, OUTPUT);
  pinMode(ledv, OUTPUT);
  pinMode(zum, OUTPUT);
}

void loop() {
  digitalWrite(ledr, HIGH);   // Se enciende el led rojo
  delay(10000);               // se espera 10 segundos
  digitalWrite(ledr, LOW);    // se apaga el led rojo
  digitalWrite(ledv, HIGH);   // inmediatamente se enciende el led verde
  delay(7000);                // se espera 7 segundos
  tone(zum,500);              // el zumbador y el led verde empieza a funcionar intermitentemente
  delay(1000);              
  digitalWrite(ledv,LOW);
noTone(zum);
  delay(1000);
  digitalWrite(ledv, HIGH);
  tone(zum,500);
  delay(1000);
  digitalWrite(ledv,LOW);
  noTone(zum);
  delay(1000);
  digitalWrite(ledv, HIGH);
  tone(zum,500);
  delay(1000);
  digitalWrite(ledv,LOW);
  noTone(zum);
 
}