First of all I'd like to say thanks to anyone who takes the time to read this.
I'm working on my first robot and am having trouble identifying the source of my glitches.
The robot is supposed to lay prone and when it detects motion, it stands, looks around (servo sweep), then goes prone again.
Everything works fine according to the sketch, but at some point the whole thing glitches out and the servos go bonkers.
I'm assuming its a coding problem, since I'm a noob, so that's where I'll start. Here's what I got so far.
#include <Servo.h>
Servo frlg;
Servo fllg;
Servo rrlg;
Servo rllg;
Servo sweep;
int pos = 45;
int pirPin = 12;
int pirPos = 13;
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(pirPos, OUTPUT);
digitalWrite(pirPin, LOW);
digitalWrite(pirPos, HIGH);
frlg.attach(2);
fllg.attach(4);
rrlg.attach(7);
rllg.attach(8);
sweep.attach(9);
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
void loop() {
if(digitalRead(pirPin) == HIGH) {
for (pos = 45; pos < 90; pos += 1)
{
frlg.write(pos);
delay(4);
}
for (pos = 135; pos > 90; pos -= 1)
{
fllg.write(pos);
delay(4);
}
for (pos = 45; pos < 90; pos += 1)
{
rrlg.write(pos);
delay(4);
}
for (pos = 135; pos > 90; pos -= 1)
{
rllg.write(pos);
delay(4);
}
{
delay(1500);
}
{
for(pos = 90; pos < 150; pos += 1)
{
sweep.write(pos);
delay(15);
}
for(pos = 150; pos > 25; pos -= 1)
{
sweep.write(pos);
delay(15);
}
for(pos = 25; pos < 90; pos += 1)
{
sweep.write(pos);
delay(15);
}
{
delay(1500);
}
}
for (pos = 90; pos > 45; pos -= 1)
{
frlg.write(pos);
delay(4);
}
for (pos = 90; pos < 135; pos += 1)
{
fllg.write(pos);
delay(4);
}
for (pos = 90; pos > 45; pos -= 1)
{
rrlg.write(pos);
delay(4);
}
for (pos = 90; pos < 135; pos += 1)
{
rllg.write(pos);
delay(4);
}
if(lockLow) {
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
if(takeLowTime) {
lowIn = millis();
takeLowTime = false;
}
if(!lockLow && millis() - lowIn > pause){
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
{
delay(2000);
}
}
Thanks again.