domingo, 20 de octubre de 2019

APRENDE A SIMULAR TIRAR UN DADO CON EL ARDUINO Y 6 LEDS




 https://jlizarazurocha.com/inicio/edicion-de-coches-robot-de-evitacion-de-obstaculos/

APRENDE A SIMULAR TIRAR UN DADO CON EL ARDUINO Y 6 LEDS

Dados LED
¡Aprende a simular tirar un dado con el Arduino y 6 LEDs!
MPONENTES Y SUMINISTROS   
Arduino UNO y Genuino UNO   
LED (genérico) 
Interruptor pulsador SparkFun de 12 mm
Cables de puente (genéricos)
Resistencia 1k ohm
Resistencia 221 ohmios


SOBRE ESTE PROYECTO

Hice un prototipo de lanzamiento de dados: si presiona el botón, se genera un número aleatorio entre 1 y 6 y se enciende el número correspondiente de LED. 




// *
//Arduino:
//Este ejemplo muestra cómo simular lanzar un dado con 6 LED. El circuito:
//* 6 LED conectados a pines digitales consecutivos (con resistencias de 220 Ohm)
//* Interruptor de botón conectado a un pin digital (ver circuito en ):
//Este código de ejemplo está en el dominio público.
// se establece en 1 si estamos depurando
//#define DEBUG 0 // 6 pines digitales consecutivos para los LED

//Este es el circuito esquemático hecho con Fritzing para el prototipo de dados.

//El circuito:
//* 6 LED conectados a pines digitales consecutivos (con resistencias de 220 ohmios)
//* Interruptor de botón conectado a un pin digital.

//Este ejemplo muestra cómo simular lanzar un dado con 6 LED. El circuito: * 6 LED conectados a pines digitales consecutivos (con resistencias de 220 Ohm)
//* Interruptor de botón conectado a un pin digital ver circuito en :

//https://ingenieriaiktronic.com
//https://roboticaytecnologia.com
#define DEBUG 0

// 6 consecutive digital pins for the LEDs
int first = 2;
int second = 3;
int third = 4;
int fourth = 5;
int fifth = 6;
int sixth = 7;

// pin para el interruptor de botón
int button = 12;
// valor para verificar el estado del interruptor de botón
int pressed = 0;

void setup() {
  // establece todos los pines LED en SALIDA
  for (int i=first; i<=sixth; i++) {
    pinMode(i, OUTPUT);
  }
  // set buttin pin to INPUT
  pinMode(button, INPUT);
 
 // inicializar semilla aleatoria por ruido del pin analógico 0 (debe estar desconectado)
  randomSeed(analogRead(0));

  // si estamos depurando, conectamos a serial
  #ifdef DEBUG
    Serial.begin(9600);
  #endif

}

void buildUpTension() {
 // enciende los LED de izquierda a derecha y hacia atrás para aumentar la tensión
 // mientras esperas que se lancen los dados
 // de izquierda a derecha
  for (int i=first; i<=sixth; i++) {
    if (i!=first) {
      digitalWrite(i-1, LOW);
    }
    digitalWrite(i, HIGH);
    delay(100);
  }
  // right to left
  for (int i=sixth; i>=first; i--) {
    if (i!=sixth) {
      digitalWrite(i+1, LOW);
    }
    digitalWrite(i, HIGH);
    delay(100);
  }
}

void showNumber(int number) {
  digitalWrite(first, HIGH);
  if (number >= 2) {
    digitalWrite(second, HIGH);
  }
  if (number >= 3) {
    digitalWrite(third, HIGH);   
  }
  if (number >= 4) {
    digitalWrite(fourth, HIGH);   
  }
  if (number >= 5) {
    digitalWrite(fifth, HIGH);   
  }
  if (number == 6) {
    digitalWrite(sixth, HIGH);   
  }
}

int throwDice() {
 // obtener un número aleatorio en el rango [1,6]
  int randNumber = random(1,7);
 
  #ifdef DEBUG
    Serial.println(randNumber);
  #endif
 
  return randNumber;
}

void setAllLEDs(int value) {
  for (int i=first; i<=sixth; i++) {
    digitalWrite(i, value);
  }
}

void loop() {
  // si se presiona el botón, tira los dados
  pressed = digitalRead(button);

  if (pressed == HIGH) {
    // remove previous number
    setAllLEDs(LOW);
   
    buildUpTension();
    int thrownNumber = throwDice();
    showNumber(thrownNumber);
  }

}