Étape 8: Étape 7: le programme.
algorithme 1
#include < Servo.h >
int map_table [140] [14] ;
tablex int = 0 ;
tabley int = 0 ;
int cm2 = 1 ; mis à 1 si vous voulez des Mensurations en cm, 0 si pouces.
Servo myservo ; Créez l’objet servo pour contrôler un servo (axe)
Servo myservo2 ; créer l’objet de servo pour contrôler un servo (squirt gun)
vous pouvez créer un maximum de huit objets de servo
const int MeasureOutput = 6 ; Goupille de ping)))
gamme int = 80 ; gamme
int pos = 0 ; variable pour stocker la position du servo
balayage d’int = 1 ;
void setup()
{
Serial.Begin(9600) ;
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
myservo2.Attach(10) ; s’adapte sur le servo sur la broche 10 l’objet de servo
}
void loop()
{
Si (balayage == 1)
{
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
Map(POS) ;
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 180; pos > 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Map() ;
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
balayage = 2 ;
}
Si (balayage == 2) {}
pour (pos = 0; pos < 180; pos += 1) / / va de 0 degrés à 180 degrés
{/ / par incréments de 1 degré
Measure(POS) ;
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
pour (pos = 180; pos > = 1; pos-= 1) / / va de 180 degrés à 0 degrés
{
Measure(POS) ;
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(15) ; attend 15 ms pour le servo atteindre la position
}
}
}
nulle mesure (int nombre)
{
longue durée, pouces, cm ;
pinMode (MeasureOutput, sortie) ;
digitalWrite (MeasureOutput, basse) ;
delayMicroseconds(2) ;
digitalWrite (MeasureOutput, élevé) ;
delayMicroseconds(5) ;
digitalWrite (MeasureOutput, basse) ;
pinMode (entrée, MeasureOutput) ;
durée = pulseIn (MeasureOutput, élevé) ;
cm = microsecondsToCentimeters(duration) ;
po = microsecondsToInches(duration) ;
convert_to_1D_number(Number) ;
Si (cm2 == 1)
{
Si (cm < map_table [tablex] [tabley] - 10 & & gamme < cm) {}
balayage = 3 ;
Attack(cm) ;
}
Si (cm > {map_table[tablex][tabley])}
map_table [tablex] [tabley] = cm ;
}
}
else {}
}
}
attaque nulle (int org)
{
myservo.Attach(9) ;
pos2 int ;
pour (pos2 = pos, pos < 180; pos += 1)
{
Serial.println("Attack!") ;
PDS ++ ;
Delay(15) ;
cible (pos, org) ;
myservo.Write(POS) ;
myservo2.Write(100) ;
}
pour (pos2 = pos, pos > 1; pos = 1)
{
Serial.println("Attack!") ;
PDS ++ ;
Delay(15) ;
cible (pos, org) ;
myservo.Write(POS) ;
myservo2.Write(100) ;
}
balayage = 2 ;
}
vide laissé (int org)
{
Serial.println("attackL!") ;
POS--;
Delay(15) ;
myservo.Attach(9) ;
cible (pos, org) ;
myservo.Write(POS) ;
}
Sub droit (int org)
{
Serial.println("attackR!") ;
PDS ++ ;
Delay(15) ;
myservo.Attach(9) ;
cible (pos, org) ;
myservo.Write(POS) ;
myservo2.Write(100) ;
}
Sub cible (int number, int org)
{
longue durée, pouces, cm ;
pinMode (MeasureOutput, sortie) ;
digitalWrite (MeasureOutput, basse) ;
delayMicroseconds(2) ;
digitalWrite (MeasureOutput, élevé) ;
delayMicroseconds(5) ;
digitalWrite (MeasureOutput, basse) ;
pinMode (entrée, MeasureOutput) ;
durée = pulseIn (MeasureOutput, élevé) ;
cm = microsecondsToCentimeters(duration) ;
po = microsecondsToInches(duration) ;
convert_to_1D_number(Number) ;
Si (cm2 == 1)
{
Si (map_table [tablex] [tabley] < gamme) {}
Si (cm < map_table[tablex][tabley]/2) {}
Right(org) ;
}
Si (cm < map_table[tablex][tabley]) {}
Left(org) ;
}
}
else {}
Si (cm < map_table [tablex] -10 [tabley] & & gamme < cm) {}
Right(org) ;
}
Si (cm < map_table [tablex] -10 [tabley] & & gamme > cm) {}
Left(org) ;
}
}
Si (cm > {map_table[tablex][tabley])}
map_table [tablex] [tabley] = cm ;
}
}
else {}
}
}
carte vide (int nombre)
{
longue durée, pouces, cm ;
pinMode (MeasureOutput, sortie) ;
digitalWrite (MeasureOutput, basse) ;
delayMicroseconds(2) ;
digitalWrite (MeasureOutput, élevé) ;
delayMicroseconds(5) ;
digitalWrite (MeasureOutput, basse) ;
pinMode (entrée, MeasureOutput) ;
durée = pulseIn (MeasureOutput, élevé) ;
po = microsecondsToInches(duration) ;
cm = microsecondsToCentimeters(duration) ;
convert_to_1D_number(Number) ;
Si (cm2 == 1)
{
map_table [tablex] [tabley] = cm ;
}
else {}
map_table [tablex] [tabley] = pouces ;
}
Serial.println(map_table[TableX][Tabley]) ;
Serial.Print (",") ;
Serial.Print(Number) ;
}
Sub convert_to_1D_number(int number)
{
TableX = ((number % 14) + 1) ;
Tabley = nombre / 14 ;
}
long microsecondsToInches(long microseconds)
{
Selon fiche technique de parallaxe pour le PING))), il y a
73,746 microsecondes par pouce (c'est-à-dire son voyage à 1130 pieds /
en second lieu). Cela donne la distance parcourue par le ping, sortant
et revenez, pour nous diviser par 2 pour obtenir la distance de l’obstacle.
Voir : http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourner les microsecondes / 74 / 2 ;
}
long microsecondsToCentimeters(long microseconds)
{
La vitesse du son est de 340 m/s ou 29 microsecondes par centimètre.
Le ping déplace dehors et en arrière, afin de trouver la distance de la
objet, que nous prenons la moitié de la distance parcourue.
retourner les microsecondes / 29 / 2 ;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
algorithme 2
#include < Servo.h >
Servo myservo ; Créez l’objet servo pour contrôler un servo
Servo myservo2 ; vous pouvez créer un maximum de huit objets de servo
int dist = 80 ;
int direction = 1 ;
Variables vont changer :
int ledState = faible ; ledState permet de définir la LED
long previousMillis = 0 ; va stocker la dernière fois mise à jour de LED
les variables de suivi est de type long, car le temps, mesuré en millisecondes,
deviendra rapidement un plus grand nombre que peuvent être stockés dans un int.
intervalle long = 1000 ; intervalle à laquelle doit clignoter (millisecondes)
squirt int = 0 ;
int pos = 0 ; variable pour stocker la position du servo
const int MeasureOutput = 6 ;
int currentMillis = 0 ;
void setup()
{
Serial.Begin(9600) ;
myservo.Attach(9) ; attache le servo sur la broche 9 à l’objet de servo
myservo2.Attach(10) ;
myservo2.Write(147) ;
}
void loop()
{
Serial.println(squirt) ;
Serial.println(currentMillis) ;
Si (currentMillis - previousMillis > intervalle) {}
enregistrer la dernière fois vous cligna des yeux la LED
previousMillis = currentMillis ;
Si (ledState == LOW & & squirt == 1) {}
ledState = élevé ;
myservo2.Attach(10) ;
myservo2.Write(155) ;
Delay(120) ;
Squirt = 0 ;
}
Si (ledState == HIGH & & squirt == 0) {}
ledState = bas ;
myservo2.Detach() ; }
}
digitalWrite (13, ledState) ;
Delay(1) ;
Scan() ;
Delay(14) ;
currentMillis = currentMillis + 15 ;
digitalWrite (10, faible) ;
}
Sub scan()
{
longue durée, pouces, cm ;
pinMode (MeasureOutput, sortie) ;
digitalWrite (MeasureOutput, basse) ;
delayMicroseconds(2) ;
digitalWrite (MeasureOutput, élevé) ;
delayMicroseconds(5) ;
digitalWrite (MeasureOutput, basse) ;
pinMode (entrée, MeasureOutput) ;
durée = pulseIn (MeasureOutput, élevé) ;
cm = microsecondsToCentimeters(duration) ;
po = microsecondsToInches(duration) ;
Si (dist > = cm) {}
Left() ;
}
Si (dist < cm) {}
Right() ;
}
Si (dist > cm) {}
myservo2.Attach(10) ;
Squirt = 1 ;
myservo2.Detach() ;
}
}
left() Sub {}
Si (direction == 1)
{
POS--;
myservo.Write(POS) ;
Si (pos < 1) {}
direction = 0 ;
}
}
Si (direction == 0)
{
PDS ++ ;
myservo.Write(POS) ;
Si (pos > 150) {}
direction = 1 ;
}
}
}
right() Sub {}
Si (direction == 1)
{
PDS ++ ;
myservo2.Attach(10) ;
myservo.Write(POS) ;
myservo.Write(POS) ;
Si (pos > 150) {}
direction = 0 ;
}
}
Si (direction == 0)
{
POS--;
myservo2.Attach(10) ;
myservo.Write(POS) ;
myservo2.Write(155) ; Set servo à mi-ouverture
Delay(15) ;
myservo2.Detach() ;
myservo.Write(POS) ;
Si (pos < 1) {}
direction = 1 ;
}
}
}
long microsecondsToInches(long microseconds)
{
Selon fiche technique de parallaxe pour le PING))), il y a
73,746 microsecondes par pouce (c'est-à-dire son voyage à 1130 pieds /
en second lieu). Cela donne la distance parcourue par le ping, sortant
et revenez, pour nous diviser par 2 pour obtenir la distance de l’obstacle.
Voir : http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourner les microsecondes / 74 / 2 ;
}
long microsecondsToCentimeters(long microseconds)
{
La vitesse du son est de 340 m/s ou 29 microsecondes par centimètre.
Le ping déplace dehors et en arrière, afin de trouver la distance de la
objet, que nous prenons la moitié de la distance parcourue.
retourner les microsecondes / 29 / 2 ;
}