Étape 3: Programmer !
30 - ligne Robot qui suit du projet#include < Servo.h >
#define lumières 7
int LDR1, LDR2, LDR3 ; valeurs de capteur
étalonnage des offsets
int leftOffset = 0, OffsetDroit = 0, centre = 0 ;
décalage de départ vitesse et rotation
int startSpeed = 125, tourner = 30 ;
seuil du capteur
int threshhold = 5 ;
vitesses initiales des moteurs droit et gauche
int gauche = startSpeed, droite = startSpeed ;
Gauches de servo ;
Droits de servo ;
Routine d’étalonnage de capteur
void calibrate() {}
pour (int x = 0; x < 10; x ++) {/ / cela run 10 fois pour obtenir la moyenne
digitalWrite (lumières, HIGH) ; lumières sur
Delay(100) ;
LDR1 = analogRead(0) ; lire les 3 capteurs
LDR2 = analogRead(1) ;
LDR3 = analogRead(2) ;
leftOffset = leftOffset + LDR1 ; Ajouter de la valeur du capteur gauche au total
Centre = centre + LDR2 ; Ajouter de la valeur du capteur centre au total
OffsetDroit = OffsetDroit + LDR3 ; Ajouter de la valeur du capteur droit total
Delay(100) ;
digitalWrite (lumières, faible) ; lumières
Delay(100) ;
}
obtenir la moyenne pour chaque capteur
leftOffset = leftOffset / 10 ;
OffsetDroit = OffsetDroit / 10 ;
Centre = centre 10 ;
calculer les compensations pour les capteurs de gauche et de droite
leftOffset = centre - leftOffset ;
OffsetDroit = centre - OffsetDroit ;
}
void setup()
{
définir les axes de moteurs aux sorties
pinMode (lumières, sortie) ; lumières
étalonner les capteurs
CALIBRATE() ;
Delay(3000) ;
digitalWrite (lumières, HIGH) ; lumières sur
Delay(100) ;
direction du moteur de transmettre la valeur
vitesse des deux moteurs
lefts.Attach(2) ;
Rights.Attach(3) ;
lefts.Write(91) ;
Rights.Write(91) ;
}
void loop() {}
faire les deux moteurs même vitesse
gauche = startSpeed ;
droite = startSpeed ;
lire les capteurs et ajouter les offsets
LDR1 = analogRead(0) + leftOffset ;
LDR2 = analogRead(1) ;
LDR3 = analogRead(2) + OffsetDroit ;
Si LDR1 est plus grand que le capteur de centre + seuil, tourner à droite
Si (LDR1 > (LDR2 + seuil)) {}
tourner = LDR2 - LDR3 ;
gauche = startSpeed + tourner ;
droite = startSpeed - tournez ;
}
Si LDR3 est plus grand que le capteur de centre + seuil tourner à gauche
ElseIf (LDR3 > (LDR2 + seuil)) {}
tourner = LDR2 - LDR1 ;
gauche = startSpeed - tournez ;
droite = startSpeed + tourner ;
}
else {}
gauche = startSpeed ;
droite = startSpeed ;
}
Envoyer les valeurs de vitesse des moteurs
lefts.Write(Left) ;
Rights.Write (180 - droit) ;
Delay(5) ;
}