Étape 4: Le code
J’ai commencé avec l’exemple de balayage de servo et ajouté à cela.
Coupe-bise
par BARRAGAN < http://barraganstudio.com>
Cet exemple de code est dans le domaine public.
modifié le 4/11 c. dubois
Fait un serveur de bonbons d’un gros oeuf en plastique
idée :
Capteur IR dira quand une main atteint pour l’oeuf et sera
servo de signal pour ouvrir le œuf.
Registre à décalage est utilisé pour faire une poursuite de LED quand l’oeuf s’ouvre
//
mises à jour
v3 - 24/04/11 Ajouter routines pour obtenir des LEDS pour chasser continuellement
#include < Servo.h >
capteur de distance
int sensePin = 0 ;
Servo
Servo myservo ; Créez l’objet servo pour contrôler un servo
vous pouvez créer un maximum de huit objets de servo
int pos = 0 ; variable pour stocker la position du servo
Registre à décalage 74HC595
Broche reliée à ST_CP de 74HC595
int latchPin = 8 ;
Broche reliée à SH_CP de 74HC595
int clockPin = 12 ;
Broche reliée à la DS de 74HC595
int dataPin = 11 ;
autres variables
int ledToDisplay ;
int posServo ;
long previousMillis = 0 ; va stocker la dernière fois, Chase a été mis à jour
les variables de suivi est de type long, car le temps, mesuré en millisecondes,
deviendra rapidement un plus grand nombre que peuvent être stockés dans un int.
intervalle long = 1000 ; intervalle à laquelle doit clignoter (millisecondes)
void setup()
{
Set de broches à la sortie de façon à pouvoir contrôler le passage s’inscrire
pinMode (latchPin, sortie) ;
pinMode (clockPin, sortie) ;
pinMode (dataPin, sortie) ;
Serial.Begin(9600) ;
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
}
void loop()
{
lire le capteur
Si se rapprocher, thwn veulent ouvrir le œuf et démarrer les leds.
Voyants continueront à courir après les oeufs se fermera
int val = analogRead(sensePin) ;
Serial.println (val, DEC) ;
carte du val à un poste de servo - pos
int val = analogRead(0) ;
POS = carte (val, 0, 1023, 0, 100) ;
ouvrir les oeufs et allumer les LEDs si étroite
if(Val > 225)
{
// 2. ouvrir les oeufs
posServo = 0 ;
pour (posServo = 0; posServo < 24 ; posServo += 1) / / va de 0 degrés à 65 degrés
{
Continuez de chase
runChase() ;
déplacer le servo
myservo.Write(posServo) ; partie supérieure, attendre 4 secondes, fermer dessus et attendre 5 secondes
Delay(25) ;
}
exécuter une boucle pendant 3 secondes pour éviter d’utiliser le délai
pour (long xx = 0; xx < = 200000 ; xx ++) {}
Continuez de chase
runChase() ;
}
fermer le couvercle
pour (posServo = 24 ; posServo > = 0; posServo-= 1) / / va de 0 degrés à 65 degrés
{
Continuez de chase
runChase() ;
déplacer le servo
myservo.Write(posServo) ; puis peut relire
Delay(25) ;
}
}
d’autre
{
myservo.Write(0) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(25) ;
}
}
mes fonctions
Sub ledChase ()
{
// 1. leds de Chase
pour (int n = 1; n < 9 ; n++ ) {
ledToDisplay = pow(2,n) ;
prendre la latchPin faible donc
les LEDs ne changent pas pendant que vous envoyez en bits :
Serial.println(n) ;
Serial.println(ledToDisplay) ;
Delay(1500) ;
digitalWrite (latchPin, basse) ;
déplacer les petits bouts :
shiftOut (dataPin, clockPin, MSBFIRST, ledToDisplay) ;
prendre la goupille de verrouillage haute donc les voyants s’allument :
digitalWrite (latchPin, HIGH) ;
faire une pause avant la valeur suivante :
Delay(50) ;
}
maintenant courir après retour dans l’autre sens
pour (int n = 1; n < 9 ; n++ ) {
ledToDisplay = pow(2,n) ;
prendre la latchPin faible donc
les LEDs ne changent pas pendant que vous envoyez en bits :
Serial.println(n) ;
Serial.println(ledToDisplay) ;
Delay(1500) ;
digitalWrite (latchPin, basse) ;
déplacer les petits bouts :
shiftOut (dataPin, clockPin, LSBFIRST, ledToDisplay) ;
prendre la goupille de verrouillage haute donc les voyants s’allument :
digitalWrite (latchPin, HIGH) ;
faire une pause avant la valeur suivante :
Delay(50) ;
}
}
Sub runChase ()
{
unsigned long currentMillis = millis() ;
Si (currentMillis - previousMillis > intervalle) {}
ledChase() ;
previousMillis = currentMillis ;
}
}