Paso 5: Código de Arduino - máquina de ensayo
Antes de integrar el motor, se pueden probar los LEDs y sensores de flexión:
Hay dos modos de dificultad para el módulo de contacto.
En primer lugar, encienden todos los 3 LEDs y el perro pueden golpear cualquier palanca que deciden entregar un regalo desde el dispensador.
En segundo lugar, un solo LED se enciende para arriba y el perro debe golpear la palanca correspondiente a la luz para entregar un regalo desde el dispensador.
Segundo nivel de dificultad:
El segundo nivel de dificultad es realmente el más fácil de programa y el código es el siguiente:
#include < TrueRandom.h > /* Para LEDs */ int ledPinG = 7; PIN 7 es un LED verde void setup() {} } void loop() x = TrueRandom.random (1, 4); Utilicé esta biblioteca TrueRandom que encontré en línea, int sens; } int SensorRead() {} digitalWrite (ledPin, HIGH); Se convierte en uno de los LED sobre el nivel del que fue elegido al azar. sensor int; sensor = analogRead(analogPin); Lee el valor del sensor de la palanca corriente flex y establece un umbral de 3 mientras que (sensor < initValHigh & & sensor > initValLow) / / mientras el sensor se lee dentro de +-6 del valor inicial, el pin analógico } Delay(del);
HARDWARE:
//
Para los sensores de flexión (no que los pernos del sensor flex son intercambiables)
Pin del sensor = GND
Pin del sensor = en analógico, con resistencia de 10K a + 5V
+ pin = Digital en pin
-pin = resistencia de 470 a GND
int ledPinR = 6; PIN 6 es un LED rojo
int ledPinB = 5; PIN 6 es un LED azul
int ledPin;
int analogPin;
int del = 1000;
int x;
Serial.Begin(9600);
pinMode (ledPinG, salida); Configure todas las patillas del LED como salida
pinMode (ledPinR, salida);
pinMode (ledPinB, salida);
pinMode (ledPin, salida);
{
digitalWrite (ledPinG, HIGH); Inicial del centellea para indicar entrada listo
digitalWrite (ledPinR, HIGH);
digitalWrite (ledPinB, HIGH);
Delay(del);
digitalWrite (ledPinG, bajo);
digitalWrite (ledPinR, bajo);
digitalWrite (ledPinB, bajo);
debido a un error conocido con la función aleatorio de Arduino que no aleatoria
Serial.println(x);
Sens = SensorRead(); Llamar a la función SensorRead()
Si (x == 1) / / este stamement if-elseif enlaces del número al azar (1, 2 o 3) con una palanca.
{
analogPin = 0; se activa el PIN analógico 0
ledPin = 7; Este LED se corresponde con la palanca conectada a analogPin 0
}
else if (x == 2)
{
analogPin = 1; Este LED se corresponde con la palanca conectada a analogPin 1
ledPin = 6;
}
else if (x == 3)
{
analogPin = 2; Este LED se corresponde con la palanca conectada a analogPin 2
ledPin = 5;
}
int initVal = sensor;
int initValHigh = 6 + sensor;
int initValLow = sensor - 6;
sigue leer. Rompiendo el tiempo bucle significa que ha sido presionada la palanca correcta.
{
sensor = analogRead(analogPin);
Serial.println(sensor);
Serial.println(initVal);
digitalWrite (ledPin, LOW); El LED se apaga.
}
FINAL DEL CÓDIGO DE
Aquí están algunas notas sobre el código:
Utiliza la biblioteca TrueRandom en vez del comando integrado de Arduino al azar debido a un error en el que el integrado al azar realmente no es al azar en todo. El sitio web de la biblioteca es muy claro sobre cómo implementarlo.
--Usted puede seguir las lecturas de pin en el Monitor Serial con este código. Puedes ver las lecturas constantemente actualizaciones para el pin actual del sensor. Si el pin está fluctuando más de +-6 desde el valor inicial sin ser tocado, puede ser necesario aumentar el valor. Jugar con él para encontrar la presión justa, donde no van al azar, sino que también responde al más mínimo tacto. Queremos que el perro para obtener un placer cualquier momento pasa a ejecutar la palanca correcta.
Primer nivel de dificultad:
El primer nivel de dificultad trabaja como cualquiera de las tres palancas presiona hacia abajo. Para conseguirlo taping juntos todas las palancas de tres y utilizando el siguiente código (que básicamente triplica el segundo código nivel anterior). Ya no es necesaria la función de TrueRandom.
También he añadido en la funcionalidad MOTOR al final del código para que el motor gira durante un segundo, suficiente para una dosis de dulces para ser entregados.
/* HARDWARE: Para LEDs */ int ledPinG = 7; PIN 7 es un LED verde void setup() {}
//
Para los sensores de flexión (no que los pernos del sensor flex son intercambiables)
Pin del sensor = GND
Pin del sensor = en analógico, con resistencia de 10K a + 5V
+ pin = Digital en pin
-pin = resistencia de 470 a GND
int ledPinR = 6; PIN 6 es un LED rojo
int ledPinB = 5; PIN 5 es un LED azul
int analogPin0;
int analogPin1;
int analogPin2;
int del = 1000;
int PWM_B = 11; Estos dos pines están reservados ya en el escudo de arduMoto
int DIR_B = 13;
Serial.Begin(9600);
pinMode (ledPinG, salida); Configure todas las patillas del LED como salida
pinMode (ledPinR, salida);
pinMode (ledPinB, salida);
pinMode (PWM_B, salida); Pines de control conjunto que salidas
pinMode (DIR_B, salida);
}
void loop()
{
digitalWrite (ledPinG, HIGH); Inicial del centellea para indicar entrada listo
digitalWrite (ledPinR, HIGH);
digitalWrite (ledPinB, HIGH);
Delay(del);
digitalWrite (ledPinG, bajo);
digitalWrite (ledPinR, bajo);
digitalWrite (ledPinB, bajo);
int sens;
Sens = SensorRead(); Llamar a la función SensorRead()
}
int SensorRead() {}
digitalWrite (ledPinG, HIGH);
digitalWrite (ledPinR, HIGH);
digitalWrite (ledPinB, HIGH);
int sensor1;
int sensor2;
int sensor3;
imagen1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
int initVal1 = sensor1;
int initVal2 = sensor2;
int initVal3 = sensor3;
int initValHigh1 = 6 + sensor1;
int initValHigh2 = 6 + sensor2;
int initValHigh3 = 6 + sensor3;
int initValLow1 = sensor1 - 6;
int initValLow2 = sensor2 - 6;
int initValLow3 = sensor3 - 6;
mientras que (sensor1 < initValHigh1 & & imagen1 > initValLow1)
{
imagen1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
Serial.println(sensor1);
Serial.println(initVal1);
}
digitalWrite (ledPinG, bajo);
Delay(100);
digitalWrite (ledPinR, bajo);
Delay(100);
digitalWrite (ledPinB, bajo);
Delay(100);
digitalWrite (ledPinB, HIGH);
Delay(100);
digitalWrite (ledPinR, HIGH);
digitalWrite (ledPinB, bajo);
Delay(100);
digitalWrite (ledPinG, HIGH);
digitalWrite (ledPinR, bajo);
Delay(100);
digitalWrite (ledPinG, bajo);
Delay(100);
digitalWrite (DIR_B, alto); Puede ser usada motor la dirección contraria, 1 - alto, 2 - bajo
analogWrite (PWM_B, 255); fijar el motor a funcionar en 255/255 = 100% ciclo de trabajo para obtener el par necesario.
Delay(1000);
analogWrite(PWM_B,0); giro del motor
Delay(1000);
}
CÓDIGO FINAL