#include <Servo.h>
const int pirPin1= 47; // for turn back On
const int pirPin2= 53; // for turn back Off
bool motionDetected1 = false;
bool motionDetected2 = false;
int buttonPin1 = 21;
int buttonState1 = 0;
int buttonPin4=20;
int buttonState4=0;
Servo leftLegHip;
Servo leftLegfoot;
Servo rightLegHip;
Servo rightLegfoot;
Servo body;
Servo head;
void setup() {
Serial.begin(9600);
pinMode(pirPin1, INPUT);
pinMode(pirPin2, INPUT);
pinMode(buttonPin1, INPUT); // for movefront
pinMode(buttonPin4, INPUT); // for stop walk
leftLegHip.attach(46);
leftLegfoot.attach(45);
rightLegHip.attach(44);
rightLegfoot.attach(39);
body.attach(49);
head.attach(12);
stand_straight();
}
void stand_straight() {
body.write(180);
head.write(180);
leftLegHip.write(0);
leftLegfoot.write(0);
rightLegHip.write(0);
rightLegfoot.write(0);
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState4 = digitalRead(buttonPin4);
if(buttonState4 == HIGH ){
leftLegHip.write(0);
leftLegfoot.write(0);
rightLegHip.write(0);
rightLegfoot.write(0);
}
else {
}
if (buttonState1 == HIGH) {
movefront();
}
else{
}
if (digitalRead(pirPin1) == HIGH) {
if (!motionDetected1) {
turnbackon();
motionDetected1 = true;
}
} else {
motionDetected1= false;
}
if (digitalRead(pirPin2) == HIGH) {
if (!motionDetected2) {
turnbackoff();
motionDetected2 = true;
}
} else {
motionDetected2 = false;
}
}
// Delay to prevent too frequent measurements
void movefront() {
Serial.begin("movefront loop");
for (int pos = 0; pos <= 45; pos += 1) {
leftLegHip.write(pos);
}
for (int pos = 0; pos <= 30; pos += 1) {
leftLegfoot.write(pos);
}
delay(500);
for (int pos = 45; pos >= 0; pos -= 1) {
leftLegHip.write(pos);
}
for (int pos = 30; pos >= 0; pos -= 1) {
leftLegfoot.write(pos);
}
for (int pos = 0; pos <= 45; pos += 1) {
rightLegHip.write(pos);
}
for (int pos = 0; pos <= 30; pos += 1) {
rightLegfoot.write(pos);
}
delay(500);
for (int pos = 45; pos >= 0; pos -= 1) {
rightLegHip.write(pos);
}
for (int pos = 30; pos >= 0; pos -= 1) {
rightLegfoot.write(pos);
}
delay(1000);
}
void turnbackon(){
for (int i = 0; i <= 180; i++) {
body.write(0 + i);
head.write(0 + i);
body.write(180 - i);
head.write(180 - i);
delay(15);
}
}
void turnbackoff(){
for (int i = 0; i <= 180; i++) {
body.write(180 - i);
body.write(0 + i);
head.write(180 - i);
head.write(0 + i);
delay(15);
}
}