#include < Servo.h >
/ * par Gabe Magnuson
pour : Lego Nerf Arduino tourelle
24/07/2013
*/
/*
démarrer cette place et de tester la gamme des numéros sur votre stick analogique,
mes valeurs de stick ps1 variaient entre 0 - 1000 et définissez-les comme sensorMin et sensorMax
Vérifiez également que toutes les broches de servo et goupilles de pot sont corrects
*/
const int numReadings = 10 ; const ne peuvent pas être modifiées
const int sensorMin = 0 ; valeur minimale du stick analogique, test à l’aide de terminal série
const int sensorMax = 1000 ; valeur maximale du stick analogique, tester la même manière
byteRead octet ;
Servo servo1 ; démarrer une instance du servo et donnez-lui un nom
Servo servo2 ;
Servo servoFire ;
int pos = 0 ;
int servo1Readings [numReadings] ; les lectures de l’entrée analogique
int servo2Readings [numReadings] ;
int index = 0 ; l’index de la lecture courante
int servo1total = 0 ; le total cumulé
int servo1Average = 0 ; la moyenne
int servo2total = 0 ; le total cumulé
int servo2Average = 0 ; la moyenne
pos1 int = 90 ;
pos2 int = 90 ;
int pos1Old = 90 ;
int pos2Old = 90 ;
int inputVertical = A0 ; broches d’entrée pour le câble de signal de pot
int inputHorizontal = A1 ;
int sensorRange = 0 ; variables utilisées pour déterminer la plage de mouvement
int topRange = 0 ;
int bottomRange = 0 ;
void setup()
{
pinMode(OUTPUT,A5) ; initialiser ces broches comme sorties de sticks analogiques de puissance
pinMode(OUTPUT,A4) ;
pinMode(INPUT,inputVertical) ; broche pour pots d’entrer la valeur
pinMode(INPUT,inputHorizontal) ;
Serial.Begin(9600) ; initialiser la communication série avec ordinateur :
pour (int thisReading = 0; thisReading < numReadings ; thisReading ++) / / initialiser toutes les lectures à 0 dans les deux tableaux (pour lisser les valeurs, si confus checkout « lissage » au site arduino)
{servo1Readings [thisReading] = 0 ;
servo2Readings [thisReading] = 0;}
SERVO1.Attach(10) ; Il s’agit d’A2, la numnering des broches numériques continuent de l’analogique à partir de A0
Servo2.Attach(11) ; Il s’agit d’A3
servoFire.attach(16) ;
sensorRange = sensorMax - sensorMin ; Cela côtelettes de la gamme des pots en six morceaux et prend ensuite le haut et le bas 2 à utiliser dans la requête des servos
sensorRange = sensorRange / 6 ;
bottomRange = sensorRange * 2 ;
topRange = sensorMax - bottomRange ;
servoFire.write(0) ;
SERVO1.Write(90) ;
Servo2.Write(90) ;
}
void loop() {}
pos1Old = pos1 ; empêche le pos de changement si aucun mouvement n’est détecté
pos2Old = pos2 ;
analogWrite(A5,168) ; ces deux broches sont utilisées pour alimenter les sticks analogiques
analogWrite(A4,168) ;
digitalWrite(12,HIGH) ;
soustraire la dernière lecture :
servo1total = servo1total - servo1Readings [index] ; lisse les données provenant des pots
lecture de la sonde :
servo1Readings [index] = analogRead(inputHorizontal) ;
Ajouter la lecture au total :
servo1total = servo1total + servo1Readings [index] ;
calculer la moyenne :
servo1Average = servo1total / numReadings ;
soustraire la dernière lecture :
servo2total = servo2total - servo2Readings [index] ;
lecture de la sonde :
servo2Readings [index] = analogRead(inputVertical) ;
Ajouter la lecture au total :
servo2total = servo2total + servo2Readings [index] ;
avancer vers la position suivante dans le tableau :
index = index + 1 ;
Si nous sommes à la fin du tableau...
Si (index > = numReadings)
.. Wrap autour du début :
index = 0 ;
calculer la moyenne :
servo2Average = servo2total / numReadings ;
Si (servo1Average > topRange)
{pos1 ++ ;
Si (pos1 > 180)
{pos1 = 180;}
Serial.println ("servo1 vers le haut") ;
}
ElseIf (servo1Average < bottomRange)
{pos1--;
Si (pos1 < 0)
{pos1 = 0;}
Serial.println ("servo1 vers le bas") ;
}
d’autre
{pos1 = pos1Old ;
Serial.println ("servo1 nulle part") ;
}
Si (servo2Average > topRange)
{pos2 ++ ;
Si (pos2 > 110)
{pos2 = 110;} limite les mouvements servo
Serial.println ("servo2 vers le haut") ;
}
ElseIf (servo2Average < bottomRange)
{pos2--;
Si (pos2 < 75)
{pos2 = 75;} limite les mouvements servo
Serial.println ("servo2 vers le bas") ;
}
d’autre
{pos2 = pos2Old ;
Serial.println ("servo2 nulle part") ;
}
/ * Serial.println(pos2) ; vous pouvez utiliser ce bit pour debug et trace à quel degré les servos sont sur
Serial.println(POS1); * /
Servo2.Write(POS2) ;
SERVO1.Write(POS1) ;
/ * vérifier si les données ont été envoyées de l’ordinateur: * /
Si (Serial.available()) {}
/ * lire la plus récente octets * /
byteRead = Serial.read() ;
/ * La valeur qui a été lu, retour au port série de l’écho. */
Si (byteRead = « F ») ;
{Serial.println("fire") ;
pour (pos = 0; pos < 120; pos += 1) / / va de 0 degrés à 120 degrés
{/ / par incréments de 1 degré
servoFire.write(pos) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 120; pos > = 1; pos-= 1) / / va de 120 degrés à 0 degrés
{
servoFire.write(pos) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
}
}
/ * Serial.println(analogRead(inputVertical)) ;
Serial.println(analogRead(inputHorizontal)); * /
Ceci peut être utilisé pour tester la min/max de pots
Delay(5) ; délai entre les deux pour donner le temps de servo pour déplacer
}