Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation Arduino, Romeo

Romeo_BLE

    16 mai 2022 à 19:27:15

    Bonjour, je suis actuellement en première sti2d et on est entrain de faire un projet sur un robot autonome qui doit sortir d'un labyrinthe grâce aux capteurs à ultra sons. 

    il est conçue à partir de la carte RoMeo_BLE lien fiche technique : https://wiki.dfrobot.com/RoMeo_BLE__SKU_DFR0305_

    et la j'ai programmer presque tout sauf les boutons qui sont déjà sur la carte dans la fiche technique il me propose plusieurs code plus au moins différent 

    il y a par ex ce code pour les boutons comme démo :

    int potPin = 7;
    int ledPin = 13;
    int val = 0;
    
    void setup() {
      pinMode(ledPin, OUTPUT);
    }
    
    void loop() {
      val = analogRead(potPin);
      digitalWrite(ledPin, HIGH);  // Open the LED.
      delay(val);
      digitalWrite(ledPin, LOW);   // Close the LED.
      delay(val);
    }

    il y a une petite explication écrite dans la fiche technique à ça que j'ai compris :

    RoMeo BLE integrated 5 buttons, S1 to S5, which are controlled by Anolog Port 7. Switch it on as shown in the following figure when using analog buttons.

    il y a bien 5 boutons mais je ne comprend pas u  truck comment on peut savoir par exemple dans le code 1 quel boutons à été visé sachant qu'il y a 5 

    Merci de me répondre 

    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2022 à 19:49:27

      il y a quoi dans les parenthèses de analogRead? potPin qui correspond à la valeur 7, le port analogique 7 dont il est question.

      Si tu regardes le schéma de la carte (https://github.com/Arduinolibrary/DFRobot_Romeo_BLE_DFR0305/blob/master/Romeo%20BLE%20SCH.pdf), tu verras que les boutons sont mis sur un pont diviseur qui shunte à la masse les résistances (R11 à R15 pour le pont). On sait ainsi selon la valeur lue en analogique quel est le switch appuyé (le S1 est prioritaire au S2, etc ..)

      en plus sous le code, il y une explication:

      Program function: Press buttons of S1 to S2, different frequencies of the LED flashing will be seen. This is because different resistances are built in, leading to different voltage dispatched to the analog ports. So do the data acquired by AD.

      et le demo code2, tu as le tableau adc_key_val de longueur 5, et la fonction get_key() qui te permettent de savoir quel est le switch appuyé. (il y a un tableau légèrement différent dans le demo code 3) 

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2022 à 18:03:45

        Merci @umfred pout ton explication mais quand j'essai de lancer le code demo 2 sur arduino IDE version 1.8.1 il ne reconnait pas get_key(). 

        Je travaille depuis le lycée et j'ai penser à faire la mise à jour du ide Arduino mais vue que je suis sur le réseau du lycée je doit à chaque fois faire la mise a jour et mon prof ma dit que autre moyen était possible car des élève l'on déjà réaliser 

        Pouvez vous me donner un exemple de code que quand on appuis la led s'allume. car la ça fais des heurs j'essaye mais impossible .

        Merci d'avance.

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2022 à 18:31:10

          get_key est donné dans le code demo 2 (copier ci-dessous); il est en ligne 44.

          int adc_key_val[5] ={50, 200, 400, 600, 800 };
          int NUM_KEYS = 5;
          int adc_key_in;
          int key=-1;
          int oldkey=-1;
          
          void setup(){
            pinMode(13, OUTPUT);  //LED13 is used for mesure the button state.
            Serial.begin(115200);
          }
          
          void loop(){
            adc_key_in = analogRead(7);
            digitalWrite(13,LOW);
            key = get_key(adc_key_in);  //Call the button judging function.
          
            if (key != oldkey){   // Get the button pressed
                delay(50);
                adc_key_in = analogRead(7);
                key = get_key(adc_key_in);
                if (key != oldkey)    {
                  oldkey = key;
                  if (key >=0){
                    digitalWrite(13,HIGH);
                    switch(key){          // Send messages accordingly.
                       case 0:Serial.println("S1 OK");
                              break;
                       case 1:Serial.println("S2 OK");
                              break;
                       case 2:Serial.println("S3 OK");
                              break;
                       case 3:Serial.println("S4 OK");
                              break;
                       case 4:Serial.println("S5 OK");
                              break;
                    }
                  }
                }
            }
            delay(100);
          }
          
          // To know the pressed button.
          int get_key(unsigned int input){
              int k;
              for (k = 0; k < NUM_KEYS; k++){
                if (input < adc_key_val[k]){     // Get the button pressed
                      return k;
                }
             }
             if (k >= NUM_KEYS)k = -1;  // No button is pressed.
             return k;
          }


          Edit: Ensuite, tu peux utiliser une version portable du logiciel Arduino https://docs.arduino.cc/software/ide-v1/tutorials/PortableIDE#windows--linux (il y a les explications pour la mise à jour aussi)

          -
          Edité par umfred 17 mai 2022 à 18:42:14

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2022 à 21:37:20

            Merci beaucoup très bonne explication franchement @umfred demain j'essayerai et je vous dirai le résultat
            • Partager sur Facebook
            • Partager sur Twitter

            Programmation Arduino, Romeo

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown