Skip to content

Instantly share code, notes, and snippets.

@gizburdt
Created August 29, 2025 22:17
Show Gist options
  • Select an option

  • Save gizburdt/a44d29301b38bdeb6d5139c2366361f5 to your computer and use it in GitHub Desktop.

Select an option

Save gizburdt/a44d29301b38bdeb6d5139c2366361f5 to your computer and use it in GitHub Desktop.
box
#include <Servo.h>
Servo doorServo;
Servo fingerServo;
int switchPin = 3;
int doorServoPin = 2;
int fingerServoPin = 11;
int selectedMove = 0;
int position = 0;
int doorSpeed = 5;
int fingerSpeed = 6;
int slowSpeed = 1;
int fakeDoorClosed = 141;
int doorClosed = 162;
int door70p = 70; // 110/155 = 0,71
int door80p = 60; // 125/155 = 0,80
int door90p = 50; // 140/155 = 0,90
int doorOpen = 40;
int fingerHidden = 10;
int finger25p = 35; // 40/129 = 0,31
int finger50p = 60; // 70/129 = 0,54
int finger60p = 80; // 80/129 = 0,62
int finger75p = 70; // 100/129 = 0,77
int finger80p = 80;
int finger85p = 95; // 110/129 = 0,85
int finger90p = 105; // 127/129 = 0,98
int fingerPush = 115;
bool debug = false;
void setup()
{
pinMode(switchPin, INPUT);
initializeDump();
doorServo.attach(doorServoPin);
fingerServo.attach(fingerServoPin);
doorServo.write(doorClosed);
fingerServo.write(fingerHidden);
}
void loop()
{
if(digitalRead(switchPin) == HIGH) {
if (selectedMove > 9) {
selectedMove = 0;
}
if (selectedMove == 0) {
simplePlay();
}
else if (selectedMove == 1) {
simpleWaitPlay();
}
else if (selectedMove == 2) {
trollClosePlay();
}
else if (selectedMove == 3) {
sneakPlay();
}
else if (selectedMove == 4) {
crazyPlay();
}
else if (selectedMove == 5) {
pissedPlay();
}
else if (selectedMove == 6) {
simplePlay();
}
else if (selectedMove == 7) {
simplePlay();
}
else if (selectedMove == 8) {
simplePlay();
}
else if (selectedMove == 9) {
simplePlay();
}
// seriousPlay();
// slowPlay();
// matrixPlay();
selectedMove += 1;
}
}
void openDoor(int speed = doorSpeed, int to = doorOpen, int from = doorClosed, int wait = 15)
{
for(position = from; position > to; position -= speed) {
doorServo.write(position);
delay(wait);
}
}
void closeDoor(int speed = doorSpeed, int to = doorClosed, int from = doorOpen, int wait = 15)
{
for(position = from; position <= to; position += speed) {
doorServo.write(position);
delay(wait);
}
}
void showFinger(int speed = fingerSpeed, int to = fingerPush, int from = fingerHidden, int wait = 15)
{
for(position = from; position < to; position += speed) {
fingerServo.write(position);
delay(wait);
}
}
void hideFinger(int speed = fingerSpeed, int to = fingerHidden, int from = fingerPush, int wait = 15)
{
for(position = from; position >= to; position -= speed) {
fingerServo.write(position);
delay(wait);
}
}
void openDoorSlowly(int speed = slowSpeed, int to = doorOpen, int from = doorClosed)
{
openDoor(speed, to, from, 30);
}
void closeDoorSlowly(int speed = slowSpeed, int to = doorClosed, int from = doorOpen)
{
closeDoor(speed, to, from, 30);
}
void showFingerSlowly(int speed = slowSpeed, int to = fingerPush, int from = fingerHidden)
{
showFinger(speed, to, from, 30);
}
void hideFingerSlowly(int speed = slowSpeed, int to = fingerHidden, int from = fingerPush)
{
hideFinger(speed, to, from, 30);
}
void initializeDump()
{
if (debug) {
Serial.begin(9600);
}
}
void dump(String message)
{
if (debug) {
Serial.println(message);
}
}
// Steps:
// Open door
// Show finger
// Hide finger
// Close door
void simplePlay()
{
dump("Simple");
openDoor();
showFinger();
hideFinger();
closeDoor();
}
// Open and wait,
// then move finger and wait,
// then switch of and hide
void simpleWaitPlay()
{
dump("Simple Wait");
openDoor();
delay(800);
showFinger(fingerSpeed, finger75p);
delay(1000);
// Extra speed so it has enough power
showFinger(fingerSpeed + 1, fingerPush, finger75p);
hideFinger();
closeDoor();
}
// Open door
// then close it many times,
// wait, then quickly reopen,
// switch off and hide.
void crazyPlay()
{
dump("Crazy");
openDoor(doorSpeed, door80p);
closeDoor(5, door80p);
openDoor(doorSpeed, door70p);
closeDoor(15, doorClosed, door70p);
delay(700);
openDoor(doorSpeed, door80p);
delay(700);
closeDoor(5, doorClosed, door80p);
openDoor(8);
showFinger(8);
hideFinger(8);
closeDoor(15);
}
// Open door, move finger very slowly forward and
// back to hiding very slowly, then quickly close door
void slowPlay()
{
dump("Slow");
openDoorSlowly();
showFingerSlowly(slowSpeed, finger90p);
showFinger(fingerSpeed, fingerPush, finger90p);
hideFingerSlowly();
closeDoorSlowly(slowSpeed, door80p);
delay(100);
closeDoor(4, doorClosed, door80p);
}
// Serious
void seriousPlay()
{
dump("Serious");
openDoor();
showFinger(10);
delay(2000);
hideFingerSlowly();
closeDoor(8);
}
void trollClosePlay()
{
dump("Troll Close");
openDoor();
showFinger(fingerSpeed, finger90p);
delay(1500);
hideFinger(fingerSpeed, fingerHidden, finger90p);
closeDoor();
delay(500);
openDoor();
delay(1500);
showFinger();
hideFinger();
closeDoor();
}
void pissedPlay()
{
dump("Pissed");
openDoor();
showFinger(8);
delay(200);
//
hideFinger(8, finger80p);
showFinger(8, fingerPush, finger80p);
delay(200);
//
hideFinger(8, finger80p, fingerPush);
showFinger(8, fingerPush, finger80p);
delay(200);
//
hideFinger(8, finger80p, fingerPush);
showFinger(8, fingerPush, finger80p);
delay(200);
//
hideFinger(8, finger80p, fingerPush);
showFinger(8, fingerPush, finger80p);
delay(200);
//
hideFinger(8, finger80p, fingerPush);
showFinger(8, fingerPush, finger80p);
delay(200);
//
hideFinger(8);
closeDoor();
}
void matrixPlay()
{
dump("Matrix");
openDoor();
showFinger(fingerSpeed, finger60p);
showFingerSlowly(slowSpeed, finger90p, finger60p);
showFinger(fingerSpeed, fingerPush, finger90p);
delay(300);
hideFinger();
closeDoor();
}
void sneakPlay()
{
dump("Sneak");
openDoorSlowly(slowSpeed, door80p);
delay(2000);
showFingerSlowly(slowSpeed, finger25p);
delay(500);
openDoor(4, doorOpen, door80p);
delay(100);
showFinger(fingerSpeed, finger75p, finger25p);
delay(500);
hideFinger(fingerSpeed, finger50p, finger75p);
delay(100);
showFinger(fingerSpeed, finger75p, finger50p);
delay(100);
hideFinger(fingerSpeed, finger50p, finger75p);
delay(100);
showFinger(fingerSpeed, fingerPush, finger50p);
hideFinger();
closeDoor();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment