Interprétation laison série – servo moteur

Accueil/Questions/Interprétation laison série – servo moteur
Interprétation laison série – servo moteur 2014-11-06T13:35:47+00:00

Accueil Forums Questions Interprétation laison série – servo moteur

Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • Clément
    Participant
    Nombre d'articles : 3
    #7944 |

    Bonjour,

    J’aurais besoin d’aide sur un petit point de mon projet de BTS deuxième année.

    Le souci est que je veut piloté un servomoteur et une LED par la liaison série de ma carte arduino. Dans le futur la liaison série avec l’ordinateur sera remplacé par une liaison Bluetooth avec un Android. Je n’en suis pas encore la…

    J’arrive a faire tourné mon servomoteur, j’arrive a piloté les LED avec la liaison série mais e n’arrive pas a faire les trois en même temps, c’est pour cette facette que je vous demande de l’aide de l’aide.

    Je vous joint le code que j’ai à l’heure actuelle il ne comprend aucun pilotage de servomoteur mais juste la librairie permettant de le faire fonctionner.

     

     

    // programme simplifier sans la liaison bluetooth remplacé par une liaison série avec l’ordinateur.
    // programme du 4/10/14
    // modification le 5/11/14 fonctionne
    // modif le 06/11 fonctionne

    #define VERT 0
    #define BLEU 1
    #define ROUGE 2
    #define BLEUE 3

    #include <Servo.h>
    Servo myservo;  // create servo object to control a servo
    // twelve servo objects can be created on most boards
    int pos = 1;    // variable to store the servo position

    int etat = 0; //stock l’état de la situation (vert = 0, orange = 1, rouge = 2)
    char mot[20]; //le mot lu sur la voie série
    const int leds[4] = {4,7,2,8};

    void setup()
    {

    myservo.attach(9);  // attaches the servo on pin 9 to the servo object

    Serial.begin(9600);
    Serial.println(« Programme chatière sans wifi »);
    Serial.println(« Un bouton par position »);
    Serial.println(« ——————————————————————-« );
    Serial.println(« Vert = ouvert »);
    Serial.println(« Bleu1 = entre »);
    Serial.println(« Rouge = sort »);
    Serial.println(« Bleu2 = ferme »);

    //les sorties (3 LED) éteintes
    for(int i=0; i<4; i++)
    {
    pinMode(leds, OUTPUT);
    digitalWrite(leds, LOW);
    }

    }

    int u=1;

    void loop()
    {
    // début programme mode manuel
    // le servo moteur n’est pas pris en considération
    if(Serial.available())
    {
    //alors on va lire le contenu de la réception
    lireVoieSerie();
    //on entre dans une variable la valeur retournée par la fonction comparerMot()
    etat = comparerMot(mot);
    }
    //Puis on met à jour l’état des LED
    allumerDrapeau(etat);
    // Mise a jour de l’état du servo

    }

    void lireVoieSerie(void)
    {
    int i = 0; //variable locale pour l’incrémentation des données du tableau

    //on lit les caractères tant qu’il y en a
    //OU si jamais le nombre de caractères lus atteint 19 (limite du tableau stockant le mot – 1 caractère)
    while(Serial.available() > 0 && i <= 19)
    {
    mot = Serial.read(); //on enregistre le caractère lu
    delay(10); //laisse un peu de temps entre chaque accès a la mémoire
    i++; //on passe à l’indice suivant
    }
    mot =  »; //on supprime le caractère ‘\n’ et on le remplace par celui de fin de chaine  »
    }

    /*
    Rappel du fonctionnement du code qui précède celui-ci :
    > lit un mot sur la voie série (lit jusqu’à rencontrer le caractère ‘\n’)
    Fonction allumerDrapeau() :
    > Allume un des trois drapeaux
    > paramètre : le numéro du drapeau à allumer (note : si le paramètre est -1, on éteint toutes les LED)
    */

    int comparerMot(char mot[])
    {
    //on compare les mots « VERT » (surveillant, calme)
    if(strcmp(mot, « ouvert ») == 0)
    {
    return VERT;
    }

    if(strcmp(mot, « entre ») == 0)
    {
    return BLEU;
    }
    //on compare les mots « ROUGE » (meduse, tempete, requin)
    if(strcmp(mot, « sort ») == 0)
    {
    return ROUGE;

    }
    if(strcmp(mot, « ferme ») == 0)
    {
    return BLEUE;

    }

    }

    void allumerDrapeau(int numLed)
    {
    //On commence par éteindre les trois LED
    for(int j=0; j<4; j++)
    {
    digitalWrite(leds[j], LOW);
    }
    //puis on allume une seule LED si besoin
    if(numLed != -1)
    {
    digitalWrite(leds[numLed], HIGH);
    }

    /* Note : vous pourrez améliorer cette fonction en
    vérifiant par exemple que le paramètre ne
    dépasse pas le nombre présent de LED
    */
    }

    // fin du mode manuel

Affichage de 1 message (sur 1 au total)

Vous devez être connecté pour répondre à ce sujet.