SPAZNIC KRYPNING ÖGA SATELLITEN! (4 / 6 steg)
Steg 4: kod
Nu är Halloween rekvisita Instructable koden och min satellit kod mycket liknande men jag använder 5 sensorer i stället för tre men här det. Kopiera den och anpassa den till du själv väljer. För att faktiskt kontrollera inställningen till hur du vill ha den att flytta betala nära uppmärksamhet på flötet tröskel och förseningen eftersom tröskelvärdet avgör hur servo vänder riktning klok medan förseningen används för att berätta hur snabbt att flytta servo.
#include servo myservo; skapa servo objekt för att styra en servoint ResetTimer = 0; anger dröjsmål återställa positionint målplacera = 3; lagrar den mål position (1-5) där personen är standingint GoalPositionDegrees; lagrar målet position i grader (30-150) int CurrentPositionDegrees = 90. lagrar den aktuella positionen i grader (30-150) int AveragingSpeed = 100; Anger hur snabbt medelvärdena justera (ett lägre värde ändrar genomsnittliga värdet snabbt) / / snabbt. Ett värde på 100 ändrar det genomsnittliga värdet långsamt / / hans effektivt sätter hastigheten vid vilken sensorerna kalibrera sig till föränderliga ljus conditionsint PinOneCurrent; butiker nuvärdet av stift 1-5int PinTwoCurrent; int PinThreeCurrent; int PinFourCurrent; int PinFiveCurrent; float PinOneAverage; lagrar genomsnittligt värdet på stift 1-5float PinTwoAverage, flyta PinThreeAverage, flyta PinFourAverage; flyta PinFiveAverage, flyta RatioPinOne = 0.00; lagrar förhållandet mellan aktuella pin värdet i genomsnitt pin valuefloat RatioPinTwo = 0.00; flyta RatioPinThree = 0.00; flyta RatioPinFour = 0.00; flyta RatioPinFive = 0.00; flyta tröskel = 0,95; anger lägsta tröskel för sensorsvoid setup(){myservo.attach(A0); //attaches servo digital pin 13PinOneAverage = analogRead(A1); //reads från sensorer för att ange inledande genomsnittliga pin valuePinTwoAverage = analogRead(A2); PinThreeAverage = analogRead(3); PinFourAverage = analogRead(4); PinFiveAverage = analogRead(A5);} void loop() {//read analog stift 1-5 och ange resultatet som aktuellt värde PinOneCurrent = analogRead(1); PinTwoCurrent = analogRead(A2); PinThreeCurrent = analogRead(3); PinFourCurrent = analogRead(A4); PinFiveCurrent = analogRead(A5); justera genomsnittliga pin värden 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; beräknar förhållandet mellan nuvarande pin värde till pin medelvärde RatioPinOne = (float) PinOneCurrent/PinOneAverage; RatioPinTwo = (float) PinTwoCurrent/PinTwoAverage; RatioPinThree = (float) PinThreeCurrent/PinThreeAverage; RatioPinFour = (float) PinFourCurrent/PinFourAverage; RatioPinFive = (float) PinFiveCurrent/PinFiveAverage; avgöra vilken förhållandet är den största och anger målet position //set mål om (RatioPinThree < tröskel & & RatioPinThree < RatioPinOne & & RatioPinThree < RatioPinTwo & & RatioPinThree < RatioPinFour & & RatioPinThree < RatioPinFive) {målplacera = 3; ResetTimer = 0; } else om (RatioPinOne < tröskel & & RatioPinOne < RatioPinTwo & & RatioPinOne < RatioPinThree & & RatioPinOne < RatioPinFour & & RatioPinOne < RatioPinFive) {målplacera = 1; ResetTimer = 0; } else om (RatioPinTwo < tröskel & & RatioPinTwo < RatioPinOne & & RatioPinTwo < RatioPinThree & & RatioPinTwo < RatioPinFour & & RatioPinTwo < RatioPinFive) {målplacera = 2; ResetTimer = 0; } else om (RatioPinFour < tröskel & & RatioPinFour < RatioPinOne & & RatioPinFour < RatioPinTwo & & RatioPinFour < RatioPinThree & & RatioPinFour < RatioPinFive) {målplacera = 4; ResetTimer = 0; } else om (RatioPinFive < tröskel & & RatioPinFive < RatioPinOne & & RatioPinFive < RatioPinTwo & & RatioPinFive < RatioPinThree & & RatioPinFive < RatioPinFour) {målplacera = 5; ResetTimer = 0; } else om (ResetTimer > 100) //after dröjsmål återställs till läge 3 {målplacera = 3; ResetTimer = 0; } annat {ResetTimer = ResetTimer + 1;} GoalPositionDegrees = målplacera * 25 + 15. konverterar mål ställning till grader myservo.write(GoalPositionDegrees); anger servo enligt de skalade valuedelay(30); Anger hur quckly servo blir (lägre siffror tur snabbare)}