#include #define NUM_LEDS 2 #define DATA_PIN 3 CRGB leds[NUM_LEDS]; #include Servo myservo1, myservo_R, myservo_L; void Total_Sweep(); void PartyTime(); void TimidCheckAround(); void OneEyeCheck(); void PeekABoo(); void RandomHight(); void RandomTurn(); //------- Setup --------- void setup() { myservo1.attach(9); // base servo myservo_R.attach(6); // right eye myservo_L.attach(5); // left eye myservo1.write(90); //sets motor base to the middle position myservo_R.write(0); //sets right eye to down myservo_L.write(180); //sets left eye to down FastLED.addLeds(leds, NUM_LEDS); } //-------- Loop ---------- void loop() { //Position Reset myservo1.write(90); //sets motor base to the middle position myservo_R.write(0); //sets right eye to down myservo_L.write(180); //sets left eye to down //random delay between 1-10s delay(random(1000,10000)); //Random choose of function int n = random(0,6); if(n==0); //nothing is an option else if(n==1) Total_Sweep(); else if(n==2) PartyTime(); else if(n==3) TimidCheckAround(); else if(n==4) OneEyeCheck(); else if(n==5) PeekABoo(); else if(n==6) RandomHight(); } // --------------------- Mouvements ---------------------------------- void Total_Sweep(){ // Base sweep from 0 to 90° R & L eye, 0-180° from base int pos = 0; for (pos = 0; pos <= 90; pos += 1){ //up myservo1.write(pos*2); //Base moves from 0 to 180 by steps of 2° myservo_R.write(pos); //R eye move from 0 - 90° myservo_L.write(180 - pos); //L eye move from 180 - 90° delay(15); // waits 15ms for the servo to reach the position } delay(2000); for (pos = 90; pos >= 0; pos -= 1) { //down myservo1.write(pos*2);//Base moves from 180 to 0 by steps of 2° myservo_R.write(pos); //R eye move from 90 - 0° myservo_L.write(abs(pos-180)); //L eye move from 90 - 180° delay(15); // waits 15ms for the servo to reach the position } } void PartyTime(){ // R&L up-down, funky town int n1 = random(1,10); int i = 0; int pos = 0; while(i<=n1){ //while loop so eyes go up and down until i == n1 for (pos = 0; pos <= 90; pos += 1){ //up myservo_R.write(90-pos); //R starts at 90° and goes down myservo_L.write(180 - pos); // L starts at 0° and goes up delay(15); // waits 15ms for the servo to reach the position } for (pos = 90; pos >= 0; pos -= 1){ //down myservo_R.write(pos); //R goes up myservo_L.write(abs(pos-180)); // L goes down delay(15); // waits 15ms for the servo to reach the position } i++; }} void TimidCheckAround(){ //barely has its eyes out to check around int n1 = random(1,4); // <----- change random(min,max) if you want more up-down int i = 0; int pos = 0; int pos_max = 20; // <------ change this if you want to change its lookout position (maximum hight), value between 0 and 90° myservo_R.write(pos_max); myservo_L.write(180-pos_max); while(i <= n1){ for(pos = 0; pos < 180; pos +=1){ //up myservo1.write(pos); delay(15); } for(pos = 180; pos >= 0; pos -=1){ //down myservo1.write(pos); delay(15); } i++; }} void OneEyeCheck(){ //One eye go out to check //Only up and down int n1 = random(1,2); //random if R or L eye int n2 = random(10,300); // <----- change this | random time delay after 1° movement, this is how fast the eye goes up/down int pos_max = 65; // <------- change this if you want to change its lookout position (maximum hight), value between 0 and 90° int pos = 0; for(pos = 0; pos <=pos_max; pos +=1){ //up if(n1==1) myservo_R.write(pos); //R eye up else myservo_L.write(180-pos); //L eye up delay(n2); } for(pos = pos_max; pos >= 0; pos-=1){ //down if(n1==1) myservo_R.write(pos); //R eye down else myservo_L.write(abs(pos-180)); //L eye down delay(n2); }} void PeekABoo(){ //Peek A Boo with both eyes int pos = 20; // <------- change this if you want to change its lookout position (maximum hight), value between 0 and 90° myservo_R.write(pos); //sets right eye to up myservo_L.write(180-pos); //sets left eye to up delay(1000); // <------- change this to tell how long it should stay up } void RandomHight(){ //Total randomness int n1 = random(1,3); //random if R or L eye or both int n2 = random(10,1000); //Time delay while moving int n3 = random(10,1000); //Time delay after reaching pos_max int pos_max = random(20,90); //max eye position int pos = 0; // starting position if(n1==1){ // R eye for(pos = 0; pos <=pos_max; pos +=1){ //up myservo_R.write(pos); //R eye up delay(n2); } delay(n3); for(pos = pos_max; pos >= 0; pos-=1){ //down myservo_R.write(pos); //R eye down delay(n2); }} else if(n1==2){ //L eye for(pos = 0; pos <=pos_max; pos +=1){ //up myservo_L.write(180-pos); //L eye up delay(n2); } delay(n3); for(pos = pos_max; pos >= 0; pos-=1){ //down myservo_L.write(abs(pos-180)); //L eye down delay(n2); }} else{ for(pos = 0; pos <=pos_max; pos +=1){ //up myservo_R.write(pos); //R eye up myservo_L.write(180-pos); //L eye up delay(n2); } delay(n3); for(pos = pos_max; pos >= 0; pos-=1){ //down myservo_R.write(pos); //R eye down myservo_L.write(abs(pos-180)); //L eye down delay(n2); }} } void RandomTurn(){ int angle_max = random(1,180); //max angle int angle_min = random(0,angle_max); //min angle int n1 = random(1,3); //random if it should go up straight or at an angle }