Étape 4: Code
Maintenant le code Halloween accessoires Instructable et mon code de Satellite sont très semblables, cependant j’ai utiliser 5 sondes au lieu de trois, mais ici il. le copier et l’ajuster à votre choix. Pour réellement contrôler le réglage à la façon dont vous voulez se déplacer paye fermer attention au flotteur seuil et le retard parce que le seuil détermine comment le servo tourne direction sage alors que le retard est utilisé pour indiquer le servo comment rapide pour se déplacer.
#include servo myservo ; Créez l’objet servo pour contrôler un servoint ResetTimer = 0 ; définit le délai pour remettre à zéro positionint GoalPosition = 3 ; stocke la postion de but (1-5) si la personne est standingint GoalPositionDegrees ; stocke la position de l’objectif en degrés (30-150) int CurrentPositionDegrees = 90 ; stocke la position actuelle en degrés (30-150) int AveragingSpeed = 100 ; définit la vitesse à laquelle les valeurs moyennes ajuster (une valeur plus basse valeur moyenne change rapidement) / / rapidement. Une valeur de 100 change lentement de la valeur moyenne / / son définit efficacement la vitesse à laquelle les capteurs eux-mêmes recalibrer à langer lumière conditionsint PinOneCurrent ; valeur actuelle de magasins de broches 1-5int PinTwoCurrent, int PinThreeCurrent, int PinFourCurrent ; int PinFiveCurrent ; float PinOneAverage ; stocke la moyenne valeur de broches 1-5float PinTwoAverage flotter PinThreeAverage float PinFourAverage ; float PinFiveAverage ; float RatioPinOne = 0,00 ; stocke le ratio de la valeur actuelle de broche en moyenne à broche valuefloat RatioPinTwo = 0,00 ; float RatioPinThree = 0,00 ; float RatioPinFour = 0,00 ; float RatioPinFive = 0,00 ; float seuil = 0,95 ; ensembles de seuil minimum pour sensorsvoid setup(){myservo.attach(A0) ; //attaches le servo sur la broche numérique 13PinOneAverage = analogRead(A1) ; //reads de capteurs pour définir valuePinTwoAverage pin moyen initial = analogRead(A2) ; PinThreeAverage = analogRead(3) ; PinFourAverage = analogRead(4) ; PinFiveAverage = analogRead(A5);} void loop() {//read analogiques broches 1-5 et affectez le résultat que la valeur actuelle PinOneCurrent = analogRead(1) ; PinTwoCurrent = analogRead(A2) ; PinThreeCurrent = analogRead(3) ; PinFourCurrent = analogRead(A4) ; PinFiveCurrent = analogRead(A5) ; régler les valeurs d’axe moyen PinOneAverage = PinOneAverage + (PinOneCurrent-PinOneAverage) / AveragingSpeed ; PinTwoAverage = PinTwoAverage + (PinTwoCurrent-PinTwoAverage) / AveragingSpeed ; PinThreeAverage = PinThreeAverage + (PinThreeCurrent-PinThreeAverage) / AveragingSpeed ; PinFourAverage = PinFourAverage + (PinFourCurrent-PinFourAverage) / AveragingSpeed ; PinFiveAverage = PinFiveAverage + (PinFiveCurrent-PinFiveAverage) / AveragingSpeed ; calcule le ratio de la valeur actuelle de broche à broche valeur RatioPinOne moyenne = (float) PinOneCurrent/PinOneAverage ; RatioPinTwo = (float) PinTwoCurrent/PinTwoAverage ; RatioPinThree = (float) PinThreeCurrent/PinThreeAverage ; RatioPinFour = (float) PinFourCurrent/PinFourAverage ; RatioPinFive = (float) PinFiveCurrent/PinFiveAverage ; déterminer quel ratio est le plus important et définit la position d’objectif objectif position //set si (RatioPinThree < seuil & & RatioPinThree < RatioPinOne & & RatioPinThree < RatioPinTwo & & RatioPinThree < RatioPinFour & & RatioPinThree < RatioPinFive) {GoalPosition = 3 ; ResetTimer = 0 ; } ElseIf (RatioPinOne < seuil & & RatioPinOne < RatioPinTwo & & RatioPinOne < RatioPinThree & & RatioPinOne < RatioPinFour & & RatioPinOne < RatioPinFive) {GoalPosition = 1 ; ResetTimer = 0 ; } ElseIf (RatioPinTwo < seuil & & RatioPinTwo < RatioPinOne & & RatioPinTwo < RatioPinThree & & RatioPinTwo < RatioPinFour & & RatioPinTwo < RatioPinFive) {GoalPosition = 2 ; ResetTimer = 0 ; } ElseIf (RatioPinFour < seuil & & RatioPinFour < RatioPinOne & & RatioPinFour < RatioPinTwo & & RatioPinFour < RatioPinThree & & RatioPinFour < RatioPinFive) {GoalPosition = 4 ; ResetTimer = 0 ; } ElseIf (RatioPinFive < seuil & & RatioPinFive < RatioPinOne & & RatioPinFive < RatioPinTwo & & RatioPinFive < RatioPinThree & & RatioPinFive < RatioPinFour) {GoalPosition = 5 ; ResetTimer = 0 ; } else if (ResetTimer > 100) //after retard réinitialise sur la position 3 {GoalPosition = 3 ; ResetTimer = 0 ; } else {ResetTimer = ResetTimer + 1;} GoalPositionDegrees = GoalPosition * 25 + 15 ; Convertit la position de l’objectif en degrés myservo.write(GoalPositionDegrees) ; définit la position du servo selon l’échelle valuedelay(30) ; définit comment quckly le servo tourne (abaisser le nombre de tour plus rapidement)}