// mxengineer.ir // Pins: Left Servo = 9 , Right Servo = 10 , Button = 2 #include Servo eyebrowLeft; Servo eyebrowRight; const int buttonPin = 2; bool sequencePlaying = false; const int NEUTRAL = 90; const int UP = 75; const int DOWN = 105; const int UP_EXTREME = 70; const int DOWN_EXTREME = 110; void setBoth(int angle) { angle = constrain(angle, UP_EXTREME, DOWN_EXTREME); eyebrowLeft.write(angle); eyebrowRight.write(180 - angle); delay(15); } void setSeparate(int leftAngle, int rightAngle) { leftAngle = constrain(leftAngle, UP_EXTREME, DOWN_EXTREME); rightAngle = constrain(rightAngle, UP_EXTREME, DOWN_EXTREME); eyebrowLeft.write(leftAngle); eyebrowRight.write(180 - rightAngle); delay(15); } void setup() { eyebrowLeft.attach(9); eyebrowRight.attach(10); pinMode(buttonPin, INPUT_PULLUP); setBoth(NEUTRAL); } void waveEyebrows() { for (int i = 0; i < 3; i++) { setSeparate(UP, NEUTRAL); delay(150); setSeparate(NEUTRAL, UP); delay(150); } setBoth(NEUTRAL); } void nervousTwitch() { for (int i = 0; i < 8; i++) { setBoth(UP); delay(40); setBoth(NEUTRAL); delay(40); } } void slowDramatic() { for (int ang = NEUTRAL; ang >= UP_EXTREME; ang -= 1) { setBoth(ang); delay(60); } delay(800); for (int ang = UP_EXTREME; ang <= NEUTRAL; ang += 1) { setBoth(ang); delay(60); } } void jumpy() { for (int i = 0; i < 4; i++) { setBoth(UP_EXTREME); delay(100); setBoth(NEUTRAL); delay(200); setBoth(UP); delay(80); setBoth(NEUTRAL); delay(150); } } void circleConfused() { for (int i = 0; i < 3; i++) { setSeparate(UP, NEUTRAL); delay(100); setSeparate(UP, UP); delay(100); setSeparate(NEUTRAL, UP); delay(100); setSeparate(NEUTRAL, NEUTRAL); delay(100); } } void heartbeatEyebrows() { for (int i = 0; i < 5; i++) { setBoth(DOWN); delay(60); setBoth(NEUTRAL); delay(60); setBoth(DOWN); delay(60); setBoth(NEUTRAL); delay(300); } } void randomMovements() { for (int i = 0; i < 12; i++) { int randomAngle = random(UP, DOWN + 1); int randomDelay = random(50, 250); setBoth(randomAngle); delay(randomDelay); } setBoth(NEUTRAL); } void gradualSuspicion() { for (int ang = NEUTRAL; ang >= UP; ang -= 2) { setSeparate(ang, NEUTRAL); delay(30); } delay(500); for (int ang = UP; ang <= NEUTRAL; ang += 2) { setSeparate(ang, NEUTRAL); delay(30); } delay(200); for (int ang = NEUTRAL; ang >= UP; ang -= 2) { setSeparate(NEUTRAL, ang); delay(30); } delay(500); setBoth(NEUTRAL); } void yawn() { setBoth(DOWN_EXTREME); delay(1500); setBoth(NEUTRAL); delay(300); setBoth(DOWN_EXTREME); delay(1000); setBoth(NEUTRAL); } void happyDance() { for (int beat = 0; beat < 6; beat++) { setBoth(UP); delay(120); setBoth(NEUTRAL); delay(120); setBoth(DOWN); delay(120); setBoth(NEUTRAL); delay(120); } } void runCoolMoves() { setBoth(NEUTRAL); delay(500); waveEyebrows(); delay(400); slowDramatic(); delay(300); nervousTwitch(); delay(400); jumpy(); delay(500); circleConfused(); delay(400); heartbeatEyebrows(); delay(400); gradualSuspicion(); delay(500); randomMovements(); delay(400); yawn(); delay(300); happyDance(); delay(400); for (int ang = NEUTRAL; ang <= DOWN_EXTREME; ang += 2) { setBoth(ang); delay(30); } } void loop() { if (digitalRead(buttonPin) == LOW && !sequencePlaying) { sequencePlaying = true; runCoolMoves(); sequencePlaying = false; delay(300); } }