Paso 4: Activación de los motores y leyendo el sensor de shute
En primer lugar, nuestro objetivo aquí es activar un motor cada vez que al azar e ir al siguiente motor si el sensor no detecta ningún poder. Tratará de 8 veces (dos veces para cada columna).
Para ello, primero se debe seleccionar una columna y facilitan que almacena el pin para cada columna en una matriz. Para hacer los trabajos de comando al azar bien necesitas leer algo de ruido y generar la semilla. Lo que conseguimos la analogRead de A0 (que no está conectada a nada). Ya que nuestros relés utilizan el bajo para activar, hemos creado todo en alto.
int relays[4] { 22, 24, 26, 28 }; void setup() { randomSeed(analogRead(0)); for (int i=0; i<4; i++) { pinMode(relays[i], OUTPUT); digitalWrite(relays[i], HIGH); } }
Ahora usted tiene sus repetidores ajustados y listos para ser activado. Vamos a ver cómo activar uno y comprobar el sensor.
Shuffle el motor y el sensor de lectura
#define THRESHOULD_SENSOR 100 #define ROLLING_TIME 3000 #define NUMBER_OF_TRIES 8 (...) boolean bateu() { int in = analogRead(A7); Serial.print("an "); Serial.println(in); delay(10); return in >= THRESHOULD_SENSOR; } boolean activateRelays() { int tentativas = 0; boolean released = false; int current_release_millis; int relay_idx = random(0, 3); while (!released && tentativas < NUMBER_OF_TRIES) { tentativas++; digitalWrite(relays[relay_idx], LOW); current_release_millis = millis(); int delay_time = millis() - current_release_millis; while (delay_time <= ROLLING_TIME) { delay_time = millis() - current_relase_millis; if (bateu()) { released = true; break; } } digitalWrite(relays[relay_idx], HIGH); if (relay_idx == 3) { relay_idx = 0; } else { relay_idx++; } } return released; }
Listo para ir! Si llama a la función activateRelays() debe devolver si el can fue liberada o no. Y tratar de hacerlo para 8 veces.
Ponemos una constante THRESHOULD_SENSOR que nuestro parámetro para comprobar que si la puede golpea la parte inferior de la máquina, si usted está usando un simple piezo, el valor debe ser más de 400. Pero nuestras pruebas el valor 100, después funciona bien.
La constante ROLLING_TIME define el tiempo que el motor debe permanecer en antes del cambio a otra ou deje la.