Stap 8: Stap 7: het programma.
algoritme 1
#include < Servo.h >
int map_table [140] [14];
int tablex = 0;
int tabley = 0;
int cm2 = 1; ingesteld op 1 als de gewenste maten in cm, 0 als duim.
Servo myservo; servo-object om te bepalen van een servo (as) maken
Servo myservo2; servo-object om te bepalen van een servo (squirt gun) maken
maximaal acht servo-objecten kan worden gemaakt
Const int MeasureOutput = 6; Pin Ping)))
int bereik = 80; bereik
int pos = 0; variabele op te slaan van de servo positie
int sweep = 1;
VOID Setup
{
Serial.begin(9600);
myservo.attach(9); de servo op pin 9 hecht aan de servo-object
myservo2.attach(10); de servo op pin 10 hecht aan de servo-object
}
void loop
{
Als (sweep == 1)
{
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
map(POS);
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
map();
delay(15); wacht 15ms voor de servo te bereiken de positie
}
sweep = 2;
}
Als (sweep == 2) {}
voor (pos = 0; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
Measure(POS);
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 180; pos > = 1; pos-= 1) / / gaat van 180 graden tot 0 graden
{
Measure(POS);
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
}
}
VOID maatregel (int-nummer)
{
lange duur, inch, cm;
pinMode (MeasureOutput, uitvoer);
digitalWrite (MeasureOutput, laag);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hoge);
delayMicroseconds(5);
digitalWrite (MeasureOutput, laag);
pinMode (MeasureOutput, INPUT);
duur = pulseIn (MeasureOutput, hoge);
cm = microsecondsToCentimeters(duration);
duim = microsecondsToInches(duration);
convert_to_1D_number(Number);
Als (cm2 == 1)
{
Als (cm < map_table [tablex] [tabley] - 10 & & bereik < cm) {}
sweep = 3;
Attack(cm);
}
Als (cm > map_table[tablex][tabley]) {}
map_table [tablex] [tabley] = cm;
}
}
else {}
}
}
VOID aanval (int org)
{
myservo.attach(9);
int pos2;
voor (pos2 = pos pos < 180; pos += 1)
{
Serial.println("Attack!");
POS ++;
delay(15);
doel (pos, org);
myservo.write(POS);
myservo2.write(100);
}
voor (pos2 = pos pos > 1; pos-= 1)
{
Serial.println("Attack!");
POS ++;
delay(15);
doel (pos, org);
myservo.write(POS);
myservo2.write(100);
}
sweep = 2;
}
void (int org) links
{
Serial.println("attackL!");
POS--;
delay(15);
myservo.attach(9);
doel (pos, org);
myservo.write(POS);
}
void (int org) recht
{
Serial.println("attackR!");
POS ++;
delay(15);
myservo.attach(9);
doel (pos, org);
myservo.write(POS);
myservo2.write(100);
}
Ongeldig doelwit (int-nummer, int org)
{
lange duur, inch, cm;
pinMode (MeasureOutput, uitvoer);
digitalWrite (MeasureOutput, laag);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hoge);
delayMicroseconds(5);
digitalWrite (MeasureOutput, laag);
pinMode (MeasureOutput, INPUT);
duur = pulseIn (MeasureOutput, hoge);
cm = microsecondsToCentimeters(duration);
duim = microsecondsToInches(duration);
convert_to_1D_number(Number);
Als (cm2 == 1)
{
Als (map_table [tablex] [tabley] < bereik) {}
Als (cm < map_table[tablex][tabley]/2) {}
Right(org);
}
Als (cm < map_table[tablex][tabley]) {}
Left(org);
}
}
else {}
Als (cm < map_table [tablex] [tabley] -10 & & bereik < cm) {}
Right(org);
}
Als (cm < map_table [tablex] [tabley] -10 & & bereik > cm) {}
Left(org);
}
}
Als (cm > map_table[tablex][tabley]) {}
map_table [tablex] [tabley] = cm;
}
}
else {}
}
}
ongeldig kaart (int-nummer)
{
lange duur, inch, cm;
pinMode (MeasureOutput, uitvoer);
digitalWrite (MeasureOutput, laag);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hoge);
delayMicroseconds(5);
digitalWrite (MeasureOutput, laag);
pinMode (MeasureOutput, INPUT);
duur = pulseIn (MeasureOutput, hoge);
duim = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
convert_to_1D_number(Number);
Als (cm2 == 1)
{
map_table [tablex] [tabley] = cm;
}
else {}
map_table [tablex] [tabley] = inch;
}
Serial.println(map_table[tablex][Tabley]);
Serial.Print (",");
Serial.Print(Number);
}
VOID convert_to_1D_number(int number)
{
tablex = ((number % 14) + 1);
Tabley = nummer / 14;
}
lange microsecondsToInches(long microseconds)
{
Volgens de Parallax gegevensblad voor de PING))), er zijn
73.746 microseconden per inch (dwz geluid reist aan 1130 voeten per
seconde). Dit geeft de afstand die is afgelegd door de ping, uitgaande
en terug te keren, zodat wij door 2 delen te krijgen van de afstand van het obstakel.
Zie: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourneren van microseconden / 74 / 2;
}
lange microsecondsToCentimeters(long microseconds)
{
De snelheid van het geluid is 340 m/s of 29 microseconden per vierkante centimeter.
De ping reist uit en terug, zo vind je de afstand van de
we de helft van de afgelegde afstand nemen-object.
retourneren van microseconden / 29 / 2;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
algoritme 2
#include < Servo.h >
Servo myservo; maken van servo-object om te bepalen van een servo
Servo myservo2; maximaal acht servo-objecten kan worden gemaakt
int dist = 80;
int richting = 1;
Variabelen zal veranderen:
int ledState = laag; ledState gebruikt voor het instellen van de LED
lange previousMillis = 0; laatste keer LED werd bijgewerkt zal slaan
de follow-variabelen is een Long-waarde, omdat de tijd, in miliseconden, gemeten
snel zal uitgegroeid tot een groter aantal dan kan worden opgeslagen in een int.
lange interval = 1000; interval waartegen knipperen (milliseconden)
int squirt = 0;
int pos = 0; variabele op te slaan van de servo positie
Const int MeasureOutput = 6;
int currentMillis = 0;
VOID Setup
{
Serial.begin(9600);
myservo.attach(9); de servo op pin 9 hecht aan de servo-object
myservo2.attach(10);
myservo2.write(147);
}
void loop
{
Serial.println(Squirt);
Serial.println(currentMillis);
Als (currentMillis - previousMillis > interval) {}
de laatste tijd u de LED knipperde besparen
previousMillis = currentMillis;
Als (ledState == LOW & & spuiten == 1) {}
ledState = hoog;
myservo2.attach(10);
myservo2.write(155);
delay(120);
spuiten = 0;
}
Als (ledState == HIGH & & spuiten == 0) {}
ledState = laag;
myservo2.Detach(); }
}
digitalWrite (13, ledState);
delay(1);
Scan();
delay(14);
currentMillis = currentMillis + 15;
digitalWrite (10, laag);
}
VOID scan()
{
lange duur, inch, cm;
pinMode (MeasureOutput, uitvoer);
digitalWrite (MeasureOutput, laag);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hoge);
delayMicroseconds(5);
digitalWrite (MeasureOutput, laag);
pinMode (MeasureOutput, INPUT);
duur = pulseIn (MeasureOutput, hoge);
cm = microsecondsToCentimeters(duration);
duim = microsecondsToInches(duration);
Als (dist > cm =) {}
datumwaarde;
}
Als (dist < cm) {}
rechts();
}
Als (dist > cm) {}
myservo2.attach(10);
spuiten = 1;
myservo2.Detach();
}
}
VOID datumwaarde {}
Als (richting == 1)
{
POS--;
myservo.write(POS);
Als (pos < 1) {}
richting = 0;
}
}
Als (richting == 0)
{
POS ++;
myservo.write(POS);
Als (pos > 150) {}
richting = 1;
}
}
}
VOID rechts() {}
Als (richting == 1)
{
POS ++;
myservo2.attach(10);
myservo.write(POS);
myservo.write(POS);
Als (pos > 150) {}
richting = 0;
}
}
Als (richting == 0)
{
POS--;
myservo2.attach(10);
myservo.write(POS);
myservo2.write(155); set servo naar halverwege
delay(15);
myservo2.Detach();
myservo.write(POS);
Als (pos < 1) {}
richting = 1;
}
}
}
lange microsecondsToInches(long microseconds)
{
Volgens de Parallax gegevensblad voor de PING))), er zijn
73.746 microseconden per inch (dwz geluid reist aan 1130 voeten per
seconde). Dit geeft de afstand die is afgelegd door de ping, uitgaande
en terug te keren, zodat wij door 2 delen te krijgen van de afstand van het obstakel.
Zie: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retourneren van microseconden / 74 / 2;
}
lange microsecondsToCentimeters(long microseconds)
{
De snelheid van het geluid is 340 m/s of 29 microseconden per vierkante centimeter.
De ping reist uit en terug, zo vind je de afstand van de
we de helft van de afgelegde afstand nemen-object.
retourneren van microseconden / 29 / 2;
}