Stap 4: Code
Nu de Halloween Props Instructable code en de code van mijn satelliet zijn zeer vergelijkbaar maar ik gebruik 5 sensoren in plaats van drie maar hier het. kopiëren en aanpassen aan uw keuze. Om daadwerkelijk de instelling naar de gewenste hoe sluiten deze tab betalen aandacht aan de vlotter drempel en de vertraging omdat de drempel bepaalt hoe de servo wordt richting verstandig terwijl de vertraging wordt gebruikt om te vertellen van de servo hoe snel te verplaatsen.
#include servo myservo; servo-object om te bepalen van een servoint ResetTimer maken = 0; stelt vertraging opnieuw instellen positionint GoalPosition = 3; slaat de doel positie (1-5) waar de persoon standingint GoalPositionDegrees is; slaat de doel positie in graden (30-150) int CurrentPositionDegrees = 90; slaat de huidige positie in graden (30-150) int AveragingSpeed = 100; bepaalt hoe snel de gemiddelde waarden aanpassen (een lagere waarde verandert snel gemiddelde waarde) / / snel. Een waarde van 100 verandert langzaam de gemiddelde waarde / / zijn sets effectief de snelheid waarmee de sensoren zichzelf aan veranderende licht conditionsint PinOneCurrent kalibreren; de huidige waarde van de winkels van pins 1-5int PinTwoCurrent int PinThreeCurrent int PinFourCurrent, int PinFiveCurrent; float PinOneAverage; slaat de gemiddelde waarde van pins 1-5float PinTwoAverage; PinThreeAverage zweven zweven PinFourAverage; PinFiveAverage zweven; zweven RatioPinOne = 0,00; slaat de verhouding van de huidige waarde van de pin aan pin valuefloat RatioPinTwo gemiddelde = 0,00; zweven RatioPinThree = 0,00; zweven RatioPinFour = 0,00; zweven RatioPinFive = 0,00; zweven drempel = 0.95; sets minimumdrempel voor sensorsvoid setup(){myservo.attach(A0); //attaches servo naar digitale pin 13PinOneAverage = analogRead(A1); //reads van sensoren om het instellen van initiële gemiddelde pin valuePinTwoAverage = analogRead(A2); PinThreeAverage = analogRead(3); PinFourAverage = analogRead(4); PinFiveAverage = analogRead(A5);} void loop {//read analoge pins 1-5 en het resultaat ingesteld als huidige waarde PinOneCurrent = analogRead(1); PinTwoCurrent = analogRead(A2); PinThreeCurrent = analogRead(3); PinFourCurrent = analogRead(A4); PinFiveCurrent = analogRead(A5); aanpassen van de pin van de gemiddelde waarden 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; Berekent de verhouding tussen de huidige waarde van de pin aan de gemiddelde waarde van de pin RatioPinOne = (float) PinOneCurrent/PinOneAverage; RatioPinTwo = (float) PinTwoCurrent/PinTwoAverage; RatioPinThree = (float) PinThreeCurrent/PinThreeAverage; RatioPinFour = (float) PinFourCurrent/PinFourAverage; RatioPinFive = (float) PinFiveCurrent/PinFiveAverage; bepalen welke verhouding is de grootste en stelt de doel positie //set doel positie als (RatioPinThree < drempel & & RatioPinThree < RatioPinOne & & RatioPinThree < RatioPinTwo & & RatioPinThree < RatioPinFour & & RatioPinThree < RatioPinFive) {GoalPosition = 3; ResetTimer = 0; } else if (RatioPinOne < drempel & & RatioPinOne < RatioPinTwo & & RatioPinOne < RatioPinThree & & RatioPinOne < RatioPinFour & & RatioPinOne < RatioPinFive) {GoalPosition = 1; ResetTimer = 0; } else if (RatioPinTwo < drempel & & RatioPinTwo < RatioPinOne & & RatioPinTwo < RatioPinThree & & RatioPinTwo < RatioPinFour & & RatioPinTwo < RatioPinFive) {GoalPosition = 2; ResetTimer = 0; } else if (RatioPinFour < drempel & & RatioPinFour < RatioPinOne & & RatioPinFour < RatioPinTwo & & RatioPinFour < RatioPinThree & & RatioPinFour < RatioPinFive) {GoalPosition = 4; ResetTimer = 0; } else if (RatioPinFive < drempel & & RatioPinFive < RatioPinOne & & RatioPinFive < RatioPinTwo & & RatioPinFive < RatioPinThree & & RatioPinFive < RatioPinFour) {GoalPosition = 5; ResetTimer = 0; } else if (ResetTimer > 100) //after vertraging wordt opnieuw ingesteld op positie 3 {GoalPosition = 3; ResetTimer = 0; } else {ResetTimer = ResetTimer + 1;} GoalPositionDegrees = GoalPosition * 25 + 15; de doel positie wordt omgezet in graden myservo.write(GoalPositionDegrees); stelt u de positie van de servo volgens de geschaalde valuedelay(30); wordt ingesteld hoe quckly draait de servo (lagere aantallen beurt sneller)}