Paso 4: El código
Empecé con el ejemplo de barrido servo y añadido a él.
Barrido de
por BARRAGAN < http://barraganstudio.com>
Este ejemplo de código es de dominio público.
modificado el 4/11 c. dubois
Hacer un servidor de caramelo de un huevo de plástico grande
idea:
IR sensor le indicará cuándo una mano alcanza el huevo y se
servo de señal para abrir el huevo.
registro de desplazamiento se utiliza para hacer una persecución de LED cuando el huevo se abre
//
actualizaciones
V3 - 24/04/11 añadir rutinas a LEDS para perseguir continuamente
#include < Servo.h >
sensor de distancia
int sensePin = 0;
Servo
Servo myservo; crear objeto servo para controlar un servo
se puede crear un máximo de ocho objetos de servo
int pos = 0; variable para almacenar la posición del servo
74HC595 shift register
PIN conectado a ST_CP de 74HC595
int latchPin = 8;
PIN conectado a SH_CP de 74HC595
clockPin INT = 12;
PIN conectado a DS de 74HC595
int dataPin = 11;
otras variables
int ledToDisplay;
int posServo;
previousMillis largo = 0; almacenará la última vez actualizó a Chase
las variables de seguimiento es mucho porque el tiempo, medido en milisegundos,
rápidamente se convertirá en un número más grande que puede ser almacenado en un int.
largo intervalo de tiempo = 1000; intervalo en el que a parpadear (milisegundos)
void setup()
{
sets clavijas de salida para que puedas controlar el cambio de registro
pinMode (latchPin, salida);
pinMode (clockPin, salida);
pinMode (dataPin, salida);
Serial.Begin(9600);
myservo.Attach(9); se fija el servo en el pin 9 al objeto servo
}
void loop()
{
leer el sensor
Si acercarse, thwn quiere abrir el huevo y empezar los leds.
LED continuará persecución hasta que se cierre el huevo
int val = analogRead(sensePin);
Serial.println (val, DEC);
mapa del val a una posición de servo - pos
int val = analogRead(0);
pos = mapa (val, 0, 1023, 0, 100);
abrir el huevo y encender LEDs si estrecha
if(Val > 225)
{
// 2. abrir el huevo
posServo = 0;
para (posServo = 0; posServo < 24; posServo += 1) / / va desde 0 grados a 65 grados
{
mantener chase
runChase();
mover el servo
myservo.Write(posServo); parte superior, esperar 4 segundos, cierre la tapa y esperar 5 segundos
Delay(25);
}
ejecutar un bucle durante 3 segundos para evitar el uso de retardo
para (xx largo = 0; xx < = 200000; xx ++) {}
mantener chase
runChase();
}
cierre la tapa
para (posServo = 24; posServo > = 0; posServo-= 1) / / va desde 0 grados a 65 grados
{
mantener chase
runChase();
mover el servo
myservo.Write(posServo); luego puede volver a leer
Delay(25);
}
}
otra cosa
{
myservo.Write(0); Dile el servo a la posición en la variable 'pos'
Delay(25);
}
}
mis funciones
void ledChase)
{
// 1. persecución LED
para (int n = 1; n < 9; n++ ) {
ledToDisplay = pow(2,n);
tomar la latchPin baja tan
los LEDs no cambian mientras que usted está enviando en bits:
Serial.println(n);
Serial.println(ledToDisplay);
Delay(1500);
digitalWrite (latchPin, bajo);
cambio hacia fuera los pedacitos:
shiftOut (dataPin, clockPin, MSBFIRST, ledToDisplay);
Tome la clavija de enganche de alta para que los LEDs se encienden:
digitalWrite (latchPin, HIGH);
hacer una pausa antes del siguiente valor:
Delay(50);
}
ahora la persecución en dirección contraria
para (int n = 1; n < 9; n++ ) {
ledToDisplay = pow(2,n);
tomar la latchPin baja tan
los LEDs no cambian mientras que usted está enviando en bits:
Serial.println(n);
Serial.println(ledToDisplay);
Delay(1500);
digitalWrite (latchPin, bajo);
cambio hacia fuera los pedacitos:
shiftOut (dataPin, clockPin, LSBFIRST, ledToDisplay);
Tome la clavija de enganche de alta para que los LEDs se encienden:
digitalWrite (latchPin, HIGH);
hacer una pausa antes del siguiente valor:
Delay(50);
}
}
void runChase)
{
unsigned currentMillis largo = millis();
Si (currentMillis - previousMillis > intervalo) {}
ledChase();
previousMillis = currentMillis;
}
}