Stap 4: De Code
Toegankelijk opwaarts naar de Arduino omgeving. Kopieer en plak deze in een nieuwe schets.
Vervolgens upload de code naar de Arduino board.
#include < Servo.h >
Servo myservo; maken van servo-object om te bepalen van een servo
int ResetTimer = 0; sets vertraging naar positie herstellen
int GoalPosition = 3; de doel positie (1-5) waar de persoon is permanent opgeslagen
int GoalPositionDegrees; 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 stelt effectief de snelheid waarmee de sensoren zich kalibreren aan de veranderende lichtomstandigheden
int PinOneCurrent; slaat de huidige waarde van pins 1-5
int PinTwoCurrent;
int PinThreeCurrent;
int PinFourCurrent;
int PinFiveCurrent;
float PinOneAverage; slaat de gemiddelde waarde van pins 1-5
float PinTwoAverage;
float PinThreeAverage;
float PinFourAverage;
float PinFiveAverage;
zweven RatioPinOne = 0,00; slaat de verhouding van de huidige waarde van de pin aan de gemiddelde waarde van de pin
zweven RatioPinTwo = 0,00;
zweven RatioPinThree = 0,00;
zweven RatioPinFour = 0,00;
zweven RatioPinFive = 0,00;
zweven drempel = 0.95; Hiermee stelt u de minimumdrempel voor sensoren
VOID Setup
{
myservo.attach(13); servo hecht aan digitale pin 13
PinOneAverage = analogRead(1); leesbewerkingen van sensoren om de waarde van de eerste gemiddelde pin
PinTwoAverage = analogRead(2);
PinThreeAverage = analogRead(3);
PinFourAverage = analogRead(4);
PinFiveAverage = analogRead(5);
}
void loop
{
lezen van analoge pins 1-5 en het resultaat als de huidige waarde
PinOneCurrent = analogRead(1);
PinTwoCurrent = analogRead(2);
PinThreeCurrent = analogRead(3);
PinFourCurrent = analogRead(4);
PinFiveCurrent = analogRead(5);
gemiddelde pin waarden aanpassen
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 u de positie van het doel
doel-positie instellen
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; }
anders als (ResetTimer > 100) //after vertraging wordt opnieuw ingesteld op positie 3
{GoalPosition = 3;
ResetTimer = 0; }
anders
{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 waarde
delay(30); wordt ingesteld hoe quckly draait de servo (lagere aantallen beurt sneller)
}