Viewing 0 reply threads
  • Author
    Posts
    • #4634
      lecagnois
      Participant

      Bonjour a tous

      Aller un petit coup D arduino , suite à l’idée génial de @Heisenberg

      d utiliser le son du haut parleur et de synchroniser la bouche du robot , Un problème persiste faire fonctionner deux servos moteur en même temps (problème d interruption dans l arduino) .

      J ai fouillé sur internet et j ai trouvé cette bibliothèque arduino (VarSpeedServo) . l’avantage plus besoin de delay() ni de boucles for() pour faire avancer les servos .

      ci dessous le programme de @Heisenberg

      J’ai modifié le code pour l’adapter à la bibliothèque , résultat code plus simple et exécution plus rapide des servos

      lien pour télécharger la bibliothèque avec exemples : https://github.com/netlabtoolkit/VarSpeedServo

      #include <VarSpeedServo.h>

      int ServoPin = 11;
      int HPpin = 5;
      int vitesse = 15;
      VarSpeedServo bouche; // objet servo bouche
      VarSpeedServo tete; // mouvement tete
      VarSpeedServo yeuxl; // yeux horizons
      VarSpeedServo coup; // coup du robot
      int SecondDetection = 1; //
      int val = 0; // variable pour bouche
      int i = 0; // variable pour test bouche
      int BoucheStatus = 0;
      int ActionBouche = 0;
      const int L2 = 2; //broche 2 du micro-contrôleur leds yeux du robot
      int flag = 0;

      void setup()
      {
      analogReference(EXTERNAL);
      pinMode(ServoPin, OUTPUT);
      Serial.begin(9600);
      Serial.println(“— Start DEBUG —“);
      bouche.attach(11); // attaches the servo on pin 9 to the servo object
      bouche.write(45);
      pinMode(L2, OUTPUT); //L2 est une broche de sortie yeux
      yeuxl.attach(5);
      }

      void loop()
      {
      tete.write(90,vitesse); // tete centre
      yeuxl.write(50,vitesse);// centre les yeux
      val = analogRead(HPpin);
      // allume les led en parlant ou paupieres si installées
      if (val > 700){digitalWrite(L2,LOW);
      }else{ digitalWrite(L2,HIGH);
      // Serial.println(val);
      // Serial.println(flag);
      }
      switch (flag) // action toutes les 15 et 30 paroles
      {
      case 15:
      action();
      break;
      case 30 :
      action2();
      break;
      default:
      Mvbouche();
      }
      if (flag > 31){flag = 0;}

      } // fin loop

      void action(){
      tete.attach(10); // alim servo 10
      coup.attach(3);
      yeuxl.attach(5);
      tetegauche();
      tetedroite();
      coupbas();
      couphaut();
      yeuxled();
      MvyeuxL();
      flag++;
      tete.detach(); // coupe alim des servos
      coup.detach();
      yeuxl.detach();}

      void action2(){
      yeuxl.attach(5);
      MvyeuxL();
      yeuxled();
      flag++;
      yeuxl.detach();}

      void Mvbouche()
      {
      if (val < 665 || val > 680 ) // recherche valeur entre 665 et 680
      {
      BoucheStatus = 1; // bouche fermée
      } else // sinon
      {
      i++; // la valeur entre 665 et 680 est pas trouvée
      // Serial.println(val);
      }
      if (i>=SecondDetection)
      { i=0;
      BoucheStatus = 0;
      }

      if (BoucheStatus == 0 && ActionBouche == 0)
      {
      bouche.write(100,250,true);
      ActionBouche = 1;
      bouche.write(45,250,true);
      }
      if (BoucheStatus == 1 && ActionBouche == 1)
      {
      bouche.write(45,250,true);
      ActionBouche =0;
      flag++; // compteur e boucles
      }
      }

      void yeuxled(){
      digitalWrite(L2,HIGH); // met la broche au niveau haut (5V) – allume la LED
      delay(4000); // pause de 500 millisecondes (ms)
      digitalWrite(L2,LOW); // met la broche au niveau bas (0V) – éteint la LED
      delay(500); // pause de 500ms
      }

      void tetedroite(){
      tete.write(90,vitesse,true);
      tete.write(40,vitesse,true);
      tete.write(90,vitesse,true);

      }
      void couphaut(){
      coup.write(40,vitesse,true);
      coup.write(170,vitesse,true);
      coup.write(100,vitesse,true);
      }

      void coupbas(){
      coup.write(100,vitesse,true);
      coup.write(40,vitesse,true);
      coup.write(100,vitesse,true);
      }

      void tetegauche(){
      tete.write(90,vitesse,true);
      tete.write(140,vitesse,true);
      tete.write(90,vitesse,true);
      }
      void MvyeuxL(){
      yeuxl.write(45,vitesse,true);
      yeuxl.write(75,vitesse,true);
      yeuxl.write(20,vitesse,true);
      yeuxl.write(50,vitesse,true);
      }

Viewing 0 reply threads
  • You must be logged in to reply to this topic.