Sentriduino! Dess alla nya Sentry tornet tillverkad av återvunnet saker du hittar runt ditt hus! (8 / 9 steg)
Steg 8: Steg 7: programmet.
algoritmen 1
#include < Servo.h >
int map_table [140] [14].
int tablex = 0;
int tabley = 0;
int cm2 = 1; satt till 1 om du vill ha mått i cm, 0 om inches.
Servo myservo; skapa servo objekt för att styra en servo (axel)
Servo myservo2; skapa servo objekt för att styra en servo (skvätt pistol)
maximalt åtta servo objekt kan skapas
CONST int MeasureOutput = 6; Ping))) pin
int utbud = 80. rad
int pos = 0; variabel att lagra servo position
int sopa = 1;
void setup()
{
Serial.BEGIN(9600);
myservo.attach(9); tillmäter objektet servo servo på pin 9
myservo2.attach(10); tillmäter objektet servo servo på stift 10
}
void loop()
{
om (svep == 1)
{
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
Map(POS);
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}
för (pos = 180, pos > 1; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Map();
Delay(15); Waits 15 MS för servo att nå ställning
}
sopa = 2;
}
om (svep == 2) {
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
Measure(POS);
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}
för (pos = 180, pos > = 1; pos-= 1) / / går från 180 grader till 0 grader
{
Measure(POS);
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}
}
}
Ogiltig åtgärd (int nummer)
{
lång varaktighet, tum, cm;
pinMode (MeasureOutput, OUTPUT);
digitalWrite (MeasureOutput, låg);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hög);
delayMicroseconds(5);
digitalWrite (MeasureOutput, låg);
pinMode (MeasureOutput, indata);
längd = pulseIn (MeasureOutput, hög);
cm = microsecondsToCentimeters(duration);
tum = microsecondsToInches(duration);
convert_to_1D_number(Number);
om (cm2 == 1)
{
om (cm < map_table [tablex] [tabley] - 10 & & rad < cm) {
sopa = 3;
attack(cm);
}
om (cm > map_table[tablex][tabley]) {
map_table [tablex] [tabley] = cm;
}
}
annat {
}
}
void attack (int org)
{
myservo.attach(9);
int pos2;
för (pos2 = pos; pos < 180; pos + = 1)
{
Serial.println("attack!");
POS ++;
Delay(15);
mål (pos, org);
myservo.write(POS);
myservo2.write(100);
}
för (pos2 = pos; pos > 1; pos-= 1)
{
Serial.println("attack!");
POS ++;
Delay(15);
mål (pos, org);
myservo.write(POS);
myservo2.write(100);
}
sopa = 2;
}
void vänster (int org)
{
Serial.println("attackL!");
POS--;
Delay(15);
myservo.attach(9);
mål (pos, org);
myservo.write(POS);
}
void höger (int org)
{
Serial.println("attackR!");
POS ++;
Delay(15);
myservo.attach(9);
mål (pos, org);
myservo.write(POS);
myservo2.write(100);
}
Ogiltigt mål (int nummer, int org)
{
lång varaktighet, tum, cm;
pinMode (MeasureOutput, OUTPUT);
digitalWrite (MeasureOutput, låg);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hög);
delayMicroseconds(5);
digitalWrite (MeasureOutput, låg);
pinMode (MeasureOutput, indata);
längd = pulseIn (MeasureOutput, hög);
cm = microsecondsToCentimeters(duration);
tum = microsecondsToInches(duration);
convert_to_1D_number(Number);
om (cm2 == 1)
{
om (map_table [tablex] [tabley] < utbud) {
om (cm < map_table[tablex][tabley]/2) {
Right(org);
}
om (cm < map_table[tablex][tabley]) {
Left(org);
}
}
annat {
om (cm < map_table [tablex] [tabley] -10 & & rad < cm) {
Right(org);
}
om (cm < map_table [tablex] [tabley] -10 & & utbud > cm) {
Left(org);
}
}
om (cm > map_table[tablex][tabley]) {
map_table [tablex] [tabley] = cm;
}
}
annat {
}
}
Ogiltig karta (int nummer)
{
lång varaktighet, tum, cm;
pinMode (MeasureOutput, OUTPUT);
digitalWrite (MeasureOutput, låg);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hög);
delayMicroseconds(5);
digitalWrite (MeasureOutput, låg);
pinMode (MeasureOutput, indata);
längd = pulseIn (MeasureOutput, hög);
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
convert_to_1D_number(Number);
om (cm2 == 1)
{
map_table [tablex] [tabley] = cm;
}
annat {
map_table [tablex] [tabley] = inches;
}
Serial.println(map_table[Tablex][tabley]);
Serial.Print (",");
Serial.Print(Number);
}
void convert_to_1D_number(int number)
{
Tablex = ((number % 14) + 1);
tabley = antal / 14;
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
Ljudets hastighet är 340 m/s eller 29 mikrosekunder per centimeter.
Ping reser ut och tillbaka, så för att hitta distansera av den
objekt vi tar hälften av den tillryggalagda.
återvända mikrosekunder / 29 / 2;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
algoritmen 2
#include < Servo.h >
Servo myservo; skapa objekt för att styra en servo servo
Servo myservo2; maximalt åtta servo objekt kan skapas
int dist = 80.
int riktning = 1;
Variabler som ändras:
int ledState = låg; ledState används för att ange LED
lång previousMillis = 0; kommer att lagra förra gången LED uppdaterades
variablerna som följer är en lång eftersom tiden, i millisekunder,
kommer snabbt att bli ett större antal än kan lagras i en int.
långa intervall = 1000; intervall som blinka (millisekunder)
int spruta = 0;
int pos = 0; variabel att lagra servo position
CONST int MeasureOutput = 6;
int currentMillis = 0;
void setup()
{
Serial.BEGIN(9600);
myservo.attach(9); tillmäter objektet servo servo på pin 9
myservo2.attach(10);
myservo2.write(147);
}
void loop()
{
Serial.println(Squirt);
Serial.println(currentMillis);
om (currentMillis - previousMillis > intervall) {
spara den senaste gången du blinkade lysdioden
previousMillis = currentMillis;
om (ledState == låg & & spruta == 1) {
ledState = hög;
myservo2.attach(10);
myservo2.write(155);
Delay(120);
spruta = 0;
}
om (ledState == hög & & spruta == 0) {
ledState = låg;
myservo2.detach(); }
}
digitalWrite (13, ledState);
Delay(1);
Scan();
Delay(14);
currentMillis = currentMillis + 15.
digitalWrite (10, låg).
}
void scan()
{
lång varaktighet, tum, cm;
pinMode (MeasureOutput, OUTPUT);
digitalWrite (MeasureOutput, låg);
delayMicroseconds(2);
digitalWrite (MeasureOutput, hög);
delayMicroseconds(5);
digitalWrite (MeasureOutput, låg);
pinMode (MeasureOutput, indata);
längd = pulseIn (MeasureOutput, hög);
cm = microsecondsToCentimeters(duration);
tum = microsecondsToInches(duration);
om (dist > = cm) {
Left();
}
om (dist < cm) {
Right();
}
om (dist > cm) {
myservo2.attach(10);
spruta = 1;
myservo2.detach();
}
}
void left() {
om (riktning == 1)
{
POS--;
myservo.write(POS);
om (pos < 1) {
riktning = 0;
}
}
om (riktning == 0)
{
POS ++;
myservo.write(POS);
om (pos > 150) {
riktning = 1;
}
}
}
void right() {
om (riktning == 1)
{
POS ++;
myservo2.attach(10);
myservo.write(POS);
myservo.write(POS);
om (pos > 150) {
riktning = 0;
}
}
om (riktning == 0)
{
POS--;
myservo2.attach(10);
myservo.write(POS);
myservo2.write(155); Ställ in servo till mittpunkt
Delay(15);
myservo2.detach();
myservo.write(POS);
om (pos < 1) {
riktning = 1;
}
}
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
Ljudets hastighet är 340 m/s eller 29 mikrosekunder per centimeter.
Ping reser ut och tillbaka, så för att hitta distansera av den
objekt vi tar hälften av den tillryggalagda.
återvända mikrosekunder / 29 / 2;
}