#include #include Servo moteur1; //Initialise la variable "moteur" Servo moteur2; Servo moteur3; int buttondt=7; int buttonlast=3; int buttonct=2; int buttongd=4; int buttonswitch=8; int cpt=0; int buttondt_stat=0; int buttonct_stat=0; int buttongd_stat=0; int buttonlast_stat=0; int potValueX=A1; int potValueY=A2; float theta1; float theta2; float theta3; float L1=11; float L2=4; float x=4; float y=11; float posx=6; float posy=10; float pi=3.1415; /////////////////////////////////////////Partie modele geometrique ///////////////// float find_theta1(float xp ,float yp){ float angle1=atan2(yp,xp)-atan2(L2*sin(find_theta2(xp,yp)*M_PI/180),L1+L2*cos(find_theta2(xp,yp)*M_PI/180)); float theta1=(angle1*180)/M_PI; return theta1; } float find_theta2(float xp ,float yp){ float angle2=acos((xp*xp+yp*yp-L1*L1-L2*L2)/(2*L1*L2)); float theta2=(angle2*180)/M_PI; return theta2; } //////////////////////////////Fin modele geometrique ////////////////// void setup(){ moteur1.attach(11); //Permet d'assigner le pin 10 à un moteur moteur2.attach(10); moteur3.attach(9); Serial.begin(9600); pinMode(buttondt,INPUT_PULLUP); pinMode(buttonct,INPUT_PULLUP); pinMode(buttongd,INPUT_PULLUP); pinMode(buttonlast,INPUT_PULLUP); pinMode(buttonswitch,INPUT_PULLUP); float theta2=find_theta2(6,10); float theta1=find_theta1(6,10); moteur2.write(theta2); moteur1.write(180-theta1); moteur3.write(90); } void loop(){ //////////////////////////////////////Partie joystick///////////////////////// float theta2=find_theta2(posx,posy); float theta1=find_theta1(posx,posy); moteur2.write(theta2); delay(100); moteur1.write(180-theta1); delay(100); float X=analogRead(potValueX); // CHANGER LE DECALAGE float Y=analogRead(potValueY); double convx=map(X,0,1023,-4.5,4.5); convx=convx/10; Serial.println("posx="); Serial.println(posx); delay(100); double convy=map(Y,0,1023,-4.5,4.5); convy=((convy+1)/10); Serial.println("posy"); Serial.println(posy); delay(100); if(posx>=7.9 && convx>=0){ convx=0; } if(posx<=0 && convx<=0){ convx=0; } if(posy>=13.5 && convy<=0){ convy=0; } if(posy<=7.8 && convy>=0){ convy=0; } posx=posx+convx; posy=posy-convy; //moteur2.write(find_theta2(posx,posy)); //moteur1.write(find_theta1(posx,posy)); if(!digitalRead(buttonswitch)){ Serial.println("--------------BOUTON-------------- "); cpt++; } if(cpt%2==0){ moteur3.write(90); delay(100); } else{ moteur3.write(82); delay(100); } /////////////////////////////////////Fin joystick //////////////// delay(50); buttondt_stat=digitalRead(buttondt); buttonct_stat=digitalRead(buttonct); buttongd_stat=digitalRead(buttongd); buttonlast_stat=digitalRead(buttonlast); /////////////////////////////////////////Partie ligne pointiller /////////////// if(buttondt_stat==LOW){ for (float x=4;x<=9;x=x+0.8){ moteur3.write(90); delay(350); delay(350); float theta2=find_theta2(x,10); float theta1=find_theta1(x,10); moteur1.write(180-theta1); moteur2.write(theta2); delay(350); moteur3.write(84); delay(350); } moteur3.write(90); delay(100); delay(1000); } //////////////////////////////////////Partie cercle /////////////////////////// if(buttonct_stat==LOW){ for (float x=-2;x<=2;x=x+0.1){ moteur3.write(82); float theta2=find_theta2(x+6,10+sqrt(2*2-(x)*(x))); float theta1=find_theta1(x+6,10+sqrt(2*2-(x)*(x))); moteur1.write(180-theta1); moteur2.write(theta2); delay(120); } for (float x=2;x>=-2;x=x-0.1){ float theta2=find_theta2(x+6,10-sqrt(2*2-(x)*(x))); float theta1=find_theta1(x+6,10-sqrt(2*2-(x)*(x))); moteur1.write(180-theta1); moteur2.write(theta2); delay(120); } float theta2=find_theta2(-2+6,10-sqrt(2*2-(-2)*(-2))); float theta1=find_theta1(-2+6,10-sqrt(2*2-(-2)*(-2))); moteur1.write(180-theta1); moteur2.write(theta2); delay(100); moteur3.write(90); } /////////////////////////////////////Partie ligne ///////////////////////// if(buttongd_stat==LOW ){ moteur3.write(85); delay(100); for (float x=4;x<=9;x=x+0.1){ Serial.println(buttongd_stat); float theta2=find_theta2(x,10); float theta1=find_theta1(x,10); moteur1.write(180-theta1); moteur2.write(theta2); Serial.println(theta2); delay(200); } moteur3.write(90); delay(100); } ////////////////////////////////////////////////Partie cercle pointiller ///////////////// if(buttonlast_stat==LOW){ for (float x=-2;x<=2;x=x+0.5){ delay(150); moteur3.write(90); delay(150); float theta2=find_theta2(x+6,10+sqrt(2*2-(x)*(x))); float theta1=find_theta1(x+6,10+sqrt(2*2-(x)*(x))); moteur1.write(180-theta1); moteur2.write(theta2); delay(150); moteur3.write(83); delay(150); } for (float x=2;x>=-2;x=x-0.5){ delay(150); moteur3.write(90); delay(150); float theta2=find_theta2(x+6,10-sqrt(2*2-(x)*(x))); float theta1=find_theta1(x+6,10-sqrt(2*2-(x)*(x))); moteur1.write(180-theta1); moteur2.write(theta2); delay(130); moteur3.write(83); delay(130); } delay(100); moteur3.write(90); } }