Stap 11: Upload de Code op de Arduino
Ik ben mijn onderstaande code plakken. Elke sensor wordt bemonsterd, en de robot beweegt afhankelijk van welke sensor detecteert een menselijke hand, en al dan niet is het rood, groen of geel (als het moet weg of naar objecten verplaatst)./*
Wallbots Code
Stacey Kuznetsov
6 mei 2009
voor het maken van dingen interactieve, Spring ' 09
Dit is de fundamentele code naar station robotic verkeer van 2 sevo motoren op basis van input
vanaf 4 lichtsensoren. Beweging ondersteunt verschillende instellingen, op basis van de robot-modus.
Rode robots bewegen snel, naar objecten (wanneer licht sensoren duisternis detecteren)
Groene robots bewegen op middellange snelheid, uit de buurt van objecten (uit de buurt van donkere gebieden)
Gele robots slowerly schuift en stopt om te knipperen wanneer objecten worden aangetroffen
Het doel van deze robots is om verder te gaan met behulp van magnetische wielen muren.
Ondersteunde verkeer omvat rechts, links en voorwaartse richtingen. Verschillende
snelheden worden geïmplementeerd op basis van de robot-modus.
De lichte sensoren kalibreert auto-op reboot of wanneer de bovenste sensor wordt gedekt
voor meer dan 3 seconden ingedrukt.
*/
#include < Servo.h >
Linker- en servo 's
Servo servo1;
Servo servo2;
Lichtsensoren
int topSensor = 0; 700
int leftSensor = 1; Drempel is 400
int frontSensor = 2; 400
int rightSensor = 3; 300
Hardcoded drempels (niet gebruikt omdat we auto-kalibreert)
int topThreshhold = 400;
int leftThreshhold = 550;
int frontThreshhold = 200;
int rightThreshhold = 650;
Huidige robot type (rode gree of geel)
int status = 0;
Staat waarden
int rood = 0;
int groen = 1;
int oranje = 2;
Pinnen om te rijden de top tri-color LED
int redPin = 5;
int greenPin = 6;
Waarden te houden van de sensor lezingen
int de voorzijde;
int recht;
int links;
int de top;
Auto-kalibreert lichtsensor drempels
ongeldig calibrate() {}
Serial.println("CALIBRATING");
lange int val = 0;
for (int i = 0; ik < 5; i ++) {}
Val += analogRead(frontSensor);
delay(10);
}
frontThreshhold = (val /5) - 80;
Val = 0;
for (int i = 0; ik < 5; i ++) {}
Val = val + analogRead(topSensor);
Serial.println(analogRead(topSensor));
Serial.println(val);
delay(10);
}
topThreshhold (val /5) =-200;
Val = 0;
for (int i = 0; ik < 5; i ++) {}
Val += analogRead(rightSensor);
}
rightThreshhold = (val /5) - 100;
Val = 0;
for (int i = 0; ik < 5; i ++) {}
Val += analogRead(leftSensor);
}
leftThreshhold = (val /5) - 100;
Afdrukken van drempelwaarden voor debug
Serial.Print ("top:");
Serial.println(topThreshhold);
Serial.Print ("recht:");
Serial.println(rightThreshhold);
Serial.Print ("linker:");
Serial.println(leftThreshhold);
Serial.Print ("voorkant:");
Serial.println(frontThreshhold);
}
VOID Setup
{
pin 13 voor foutopsporing inschakelen
pinMode (13, OUTPUT);
digitalWrite (13, hoge);
Setup sensor pinnen
for (int i = 0; ik < 4; i ++) {}
pinMode (i, ingang);
}
Serial.begin(9600);
Calibrate();
genereren van een willekeurige staat
STAAT = willekeurige (0, 3);
setColor(STATE);
}
MOTORISCHE FUNCTIES
VOID turnLeft()
{
Serial.println("left");
Start();
vertraging(20);
for (int i = 0; ik < 20; i ++) {}
servo2.write(179);
servo1.write(1);
vertraging(20);
}
Stop();
vertraging(20);
}
ongeldig turnRight() {}
Serial.println("right");
Start();
vertraging(20);
for (int i = 0; ik < 20; i ++) {}
servo2.write(1);
servo1.write(179);
vertraging(20);
}
Stop();
vertraging(20);
}
VOID goForward (int del = 20) {}
Serial.println("Forward");
Start();
vertraging(20);
for (int i = 0; ik < 20; i ++) {}
servo1.write(179);
servo2.write(179);
delay(del);
}
Stop();
vertraging(20);
}
VOID stop() {}
servo1.Detach();
servo2.Detach();
delay(10);
}
VOID start() {}
servo1.attach(10);
servo2.attach(9);
}
Set in de kleur van de top tri-color LED op basis van de huidige status
VOID setColor (int kleur) {}
Als (kleur == RED) {}
digitalWrite (greenPin, 0);
analogWrite (redPin, 180);
}
anders als (kleur groen ==) {}
digitalWrite (redPin, 0);
analogWrite (greenPin, 180);
}
anders als (kleur oranje ==) {}
analogWrite (redPin, 100);
analogWrite (greenPin, 100);
}
}
Knipperen van de gele kleur (als robot wordt verward)
ongeldig blinkOrange() {}
for (int i = 0; ik < 5; i ++) {}
analogWrite (redPin, 100);
analogWrite (greenPin, 100);
delay(300);
digitalWrite (redPin, 0);
digitalWrite (greenPin, 0);
delay(300);
}
analogWrite (redPin, 100);
analogWrite (greenPin, 100);
}
void loop
{
Top = analogRead(topSensor);
lang int tijd = millis();
terwijl (analogRead(topSensor) < topThreshhold) {}
delay(10); Hoewel er een golf van de arm van de gebruiker doen niets
}
Als ((millis()-time) > 3000) {}
Als de sensor was bedekt meer dan 3 seconden, opnieuw kalibreren
Calibrate();
}
Als de bovenste sensor was bedekt, wijzigen we status
Als (top < topThreshhold) {}
STAAT (STATE + 1) = 3 %;
setColor(STATE);
Serial.Print ("gewijzigde status:");
Serial.println(State);
}
Lees de andere sensoren
rechts = analogRead(rightSensor);
links = analogRead(leftSensor);
voorkant = analogRead(frontSensor);
Als (staat == RED) {}
Ga naar objecten
Als (voorzijde < frontThreshhold) {}
goForward();
} else if (juiste < rightThreshhold) {}
turnRight();
} else if (linker < leftThreshhold) {}
turnLeft();
} else {}
goForward();
}
}
Als (staat == groen) {}
Ga uit de buurt van objecten
Als (voorzijde < frontThreshhold) {}
int dir = random(0,2);
Als (dir == 0 & & juiste > rightThreshhold) {}
turnRight();
} else if (dir == 1 & & links > leftThreshhold) {}
turnLeft();
}
} else if (juiste < rightThreshhold) {}
Als (links > leftThreshhold) {}
turnLeft();
} else {}
goForward();
}
} else if (linker < leftThreshhold) {}
Als (juiste > rightThreshhold) {}
turnRight();
} else {}
goForward();
}
} else {}
goForward();
}
delay(200);
}
Als (staat Oranje ==) {}
alleen verplaatsen als zijn er dat geen hand bewegingen-anders knipperen
int dir = willekeurige (0, 3);
Als (linker < leftThreshhold || juiste < rightThreshhold ||
voorzijde < leftThreshhold) {}
blinkOrange();
} else {}
Als (dir == 0) {}
goForward();
} else if (dir == 1) {}
turnRight();
} else if (dir == 2) {}
turnLeft();
}
delay(1000);
}
delay(10);
}
}