Sunteți pe pagina 1din 6

#include <Servo.

h> // Servo Library

// Starting positions of the servos


#define FLHcenter 1500
#define FRHcenter 1500
#define RLHcenter 1520
#define RRHcenter 1450

#define FLKcenter 1150


#define FRKcenter 1220
#define RLKcenter 1220
#define RRKcenter 1210

// Here you can change servo pin numbers corresponding


// to your specific connections
#define FLHpin 46 // Front Left Hip servo pin
#define FRHpin 52 // Front Right Hip servo pin
#define RLHpin 28 // Rear Left Hip servo pin
#define RRHpin 13 // Rear Right Hip servo pin

#define FLKpin 47 // Front Left Knee servo pin


#define FRKpin 53 // Front Right Knee servo pin
#define RLKpin 29 // Rear Left Knee servo pin
#define RRKpin 12 // Rear Right Knee servo pin

// Buffer for the speech message


char INBYTE;

// LEDs!!!!! If you choose to use 'em


int led1 = 27;
int led2 = 11;
int led3 = 45;
int led4 = 26;

// Some constants for the bot's motions, yes you may


// play with them to get the best performance
int Time = 90;
int LShift = 280;
int RShift = 280;
int Raise = 550;

// Define servos
Servo FLHservo;
Servo FRHservo;
Servo RLHservo;
Servo RRHservo;
Servo FLKservo;
Servo FRKservo;
Servo RLKservo;
Servo RRKservo;

void setup()
{
// Attach servos (digitally)
FLHservo.attach(FLHpin);
FRHservo.attach(FRHpin);
RLHservo.attach(RLHpin);
RRHservo.attach(RRHpin);
FLKservo.attach(FLKpin);
FRKservo.attach(FRKpin);
RLKservo.attach(RLKpin);
RRKservo.attach(RRKpin);

// Attach LEDs (digitally)


pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);

Serial.begin(9600);

// Center servos
FLHservo.writeMicroseconds(FLHcenter);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter);
RRHservo.writeMicroseconds(RRHcenter);
FLKservo.writeMicroseconds(FLKcenter+700);
FRKservo.writeMicroseconds(FRKcenter+700);
RLKservo.writeMicroseconds(RLKcenter+700);
RRKservo.writeMicroseconds(RRKcenter+700);
delay(500);

// Prints out the controls mapped to different letters


Serial.println("wasd - movement");
Serial.println("z - sleep");
Serial.println("x - play dead");
Serial.println("i - sit");
Serial.println("u - stand");
Serial.println("q - wake up");
}

void loop() {
Serial.println("Ready to accept command");
while (!Serial.available()); // stay here so long as COM port is empty
INBYTE = Serial.read(); // read next available byte
delay(50);

if (INBYTE == 'q') // wake up - flashes LEDs if you used them


{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
else if (INBYTE == 'z') //Sleeps
{
FLHservo.writeMicroseconds(FLHcenter);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter);
RRHservo.writeMicroseconds(RRHcenter);
FLKservo.writeMicroseconds(FLKcenter+700);
FRKservo.writeMicroseconds(FRKcenter+700);
RLKservo.writeMicroseconds(RLKcenter+700);
RRKservo.writeMicroseconds(RRKcenter+700);
delay(1000);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
}
else if (INBYTE == 'u') // stand Up
{
// Center servos
FLHservo.writeMicroseconds(FLHcenter);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter);
RRHservo.writeMicroseconds(RRHcenter);
FLKservo.writeMicroseconds(FLKcenter);
FRKservo.writeMicroseconds(FRKcenter);
RLKservo.writeMicroseconds(RLKcenter);
RRKservo.writeMicroseconds(RRKcenter);
delay(1000);
}
else if (INBYTE == 'x') // plays dead X
{
FLHservo.writeMicroseconds(FLHcenter);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter);
RRHservo.writeMicroseconds(RRHcenter);
FLKservo.writeMicroseconds(FLKcenter+700);
FRKservo.writeMicroseconds(FRKcenter+700);
RLKservo.writeMicroseconds(RLKcenter+700);
RRKservo.writeMicroseconds(RRKcenter+700);
delay(1000);
}
else if (INBYTE == 'i') //sits
{
FLHservo.writeMicroseconds(FLHcenter);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter-600);
RRHservo.writeMicroseconds(RRHcenter+600);
FLKservo.writeMicroseconds(FLKcenter);
FRKservo.writeMicroseconds(FRKcenter);
RLKservo.writeMicroseconds(RLKcenter+700);
RRKservo.writeMicroseconds(RRKcenter+700);
}
else if (INBYTE == 'h') //shake Hands
{
FLHservo.writeMicroseconds(FLHcenter-600);
FRHservo.writeMicroseconds(FRHcenter);
RLHservo.writeMicroseconds(RLHcenter-600);
RRHservo.writeMicroseconds(RRHcenter+600);
FLKservo.writeMicroseconds(FLKcenter+600);
FRKservo.writeMicroseconds(FRKcenter);
RLKservo.writeMicroseconds(RLKcenter-700);
RRKservo.writeMicroseconds(RRKcenter+700);
delay(1000);
FLKservo.writeMicroseconds(FLKcenter+300);
delay(200);
FLKservo.writeMicroseconds(FLKcenter+600);
delay(200);
FLKservo.writeMicroseconds(FLKcenter+300);
delay(200);
FLKservo.writeMicroseconds(FLKcenter+600);
delay(200);
}
else if(INBYTE == 'w') // run forward
{
LShift=300;
RShift=300;
for(int i=0;i<5;i++)
{
Run();
}
}
else if(INBYTE == 'a') // turn left
{
LShift=-300;
RShift=300;
for(int i=0;i<3;i++)
{
Run();
}
}
else if(INBYTE == 'd') // turn right
{
LShift=300;
RShift=-300;
for(int i=0;i<3;i++)
{
Run();
}
}
else if(INBYTE == 's') // run back
{
LShift=-300;
RShift=-300;
for(int i=0;i<5;i++)
{
Run();
}
}
}

void Run()
{
FRKservo.writeMicroseconds(FRKcenter+Raise); // raise front right leg
RLKservo.writeMicroseconds(RLKcenter+Raise-10); // raise rear left leg
FLHservo.writeMicroseconds(FLHcenter+LShift); // move front left leg
backward
RRHservo.writeMicroseconds(RRHcenter-RShift); // move rear right leg
backward
delay(Time/2);
FRHservo.writeMicroseconds(FRHcenter+RShift); // move front right leg
forward
RLHservo.writeMicroseconds(RLHcenter-LShift); // move rear left leg
forward
delay(Time);
FRKservo.writeMicroseconds(FRKcenter); // lower front right leg
RLKservo.writeMicroseconds(RLKcenter); // lower rear left leg
delay(Time);

FLKservo.writeMicroseconds(FLKcenter+Raise); // raise front left leg


RRKservo.writeMicroseconds(RRKcenter+Raise); // raise rear right leg
FRHservo.writeMicroseconds(FRHcenter-RShift); // move front right leg
backward
RLHservo.writeMicroseconds(RLHcenter+LShift); // move rear left leg
backward
delay(Time/2);
FLHservo.writeMicroseconds(FLHcenter-LShift); // move front left leg
forward
RRHservo.writeMicroseconds(RRHcenter+RShift); // move rear right leg
forward
delay(Time);
FLKservo.writeMicroseconds(FLKcenter); // lower front left leg
RRKservo.writeMicroseconds(RRKcenter); // lower rear right leg
delay(Time);
}

S-ar putea să vă placă și