Animatronic hokus pokus Spellbook Prop (10 / 12 steg)
Steg 10: Kod Test
Här är den sista koden jag slutade använda. Detta var mitt första äventyr i till Arduino programmering, så feedback välkomnas. Jag ska även försöka uppdatera denna med en utmärkt artikel som jag brukade ha smidig servo rörelser.
/*
* Slät servo rotation med en sinus kvadratisk funktion.
* OBS: DENNA SKISS ANVÄNDER FUNKTIONEN DRÖJSMÅL
* Mer infos: http://letsmakerobots.com/node/31697
* skapad av NilsB
*/
#include
int blinkTimerInMillies = 5;
CONST int blinkTableEntries = 21;
CONST int blinkTable [] = {
60, 60, 60, 60,
61, 61, 62, 63,
64, 66, 67, 69,
71, 73, 75, 77,
79, 80, 80, 80, 80
};
CONST int eyeTimerInMillies = 8;
CONST int eyeTableEntries = 77.
CONST int eyeTable [] = {
45, 45, 45, 46, 46, 46, 47,
47, 48, 49, 50, 51, 52, 54,
55, 57, 59, 61, 63, 65, 67,
68, 70, 72, 74, 76, 78, 80,
81, 83, 84, 85, 86, 87, 88,
88, 89, 89, 90, 90, 91, 91,
92, 92, 93, 94, 95, 96, 97,
99, 100, 102, 104, 106, 108,
110, 112, 113, 115, 117, 119,
121, 123, 125, 126, 128, 129,
130, 131, 132, 133, 133, 134,
134, 135, 135, 135
};
CONST int knappen = 2;
Servo blinkServo;
Servo shiftServo;
Servo xServo;
Servo yServo;
void setup() {
setupBlinkServo();
setupShiftServo();
setupEyeServo();
pinMode (knapp, indata);
digitalWrite (knappen, hög);
}
void loop() {
om (digitalRead(button) == låg)
{
attach();
Delay(600);
Open();
Close();
Open();
Delay(200);
lookUp();
Delay(200);
lookUpDown();
Delay(200);
neutral();
Delay(200);
lookLeft();
Delay(200);
lookLeftRight();
Delay(200);
neutral();
Delay(200);
blinkTimerInMillies = 20;
Close();
blinkTimerInMillies = 5;
Delay(200);
}
annat {
}
detach();
}
/***********************************
Stopp/Start funktion ***
***********************************/
void detach() {
stopXMove();
stopYMove();
stopBlinkMove();
stopShiftMove();
}
void attach() {
setupEyeServo();
setupBlinkServo();
setupShiftServo();
}
/***********************************
Blink funktioner ***
***********************************/
void open()
{
för (int angleIndex = 0; angleIndex < blinkTableEntries; angleIndex ++) {
moveBlinkServoTo(angleBlink(angleIndex));
waitBlink();
}
waitLongBlink();
}
void close()
{
för (int angleIndex = blinkTableEntries-1; angleIndex > = 0, angleIndex--) {
moveBlinkServoTo(angleBlink(angleIndex));
waitBlink();
}
waitLongBlink();
}
void moveBlinkServoTo (int vinkel) {
Serial.println(Angle);
blinkServo.write(angle);
}
int angleBlink (int index) {
återgå blinkTable [index];
}
void stopBlinkMove() {
blinkServo.detach();
}
void setupBlinkServo() {
blinkServo.attach(11);
blinkServo.write(60);
}
void waitBlink() {
Delay(blinkTimerInMillies);
}
void waitLongBlink() {
Delay(5*blinkTimerInMillies);
}
/***********************************
Skifta funktioner ***
***********************************/
void up()
{
shiftServo.write(90);
}
void down()
{
shiftServo.write(130);
}
void neutral()
{
shiftServo.write(110);
xServo.write(90);
yServo.write(90);
}
void setupShiftServo() {
shiftServo.attach(10);
shiftServo.write(110);
}
void stopShiftMove() {
shiftServo.detach();
}
/***********************************
Syna funktioner ***
***********************************/
void lookDown()
{
Down();
för (int angleIndex = 38; angleIndex < eyeTableEntries-1; angleIndex ++) {
moveYEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookUp()
{
up();
för (int angleIndex = 38; angleIndex > = 0, angleIndex--) {
moveYEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookUpDown()
{
up();
för (int angleIndex = 0; angleIndex < eyeTableEntries-1; angleIndex ++) {
moveYEyeServoTo(angleEye(angleIndex));
waitEye();
Down();
}
waitLongEye();
}
void lookDownUp()
{
för (int angleIndex = eyeTableEntries-1; angleIndex > = 0, angleIndex--) {
moveYEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookLeft()
{
för (int angleIndex = 38; angleIndex < eyeTableEntries-1; angleIndex ++) {
moveXEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookRight()
{
för (int angleIndex = 38; angleIndex > = 0, angleIndex--) {
moveXEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookLeftRight()
{
för (int angleIndex = 0; angleIndex < eyeTableEntries-1; angleIndex ++) {
moveXEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void lookRightLeft()
{
för (int angleIndex = eyeTableEntries-1; angleIndex > = 0, angleIndex--) {
moveXEyeServoTo(angleEye(angleIndex));
waitEye();
}
waitLongEye();
}
void moveYEyeServoTo (int vinkel) {
Serial.println(Angle);
yServo.write(angle);
}
void moveXEyeServoTo (int vinkel) {
Serial.println(Angle);
xServo.write(angle);
}
int angleEye (int index) {
återgå eyeTable [index];
}
void stopYMove() {
yServo.detach();
}
void stopXMove() {
xServo.detach();
}
void setupEyeServo() {
yServo.attach(9);
yServo.write(90);
xServo.attach(6);
xServo.write(90);
}
void waitEye() {
Delay(eyeTimerInMillies);
}
void waitLongEye() {
Delay(5*eyeTimerInMillies);
}