Liaison série et servomoteur

Accueil/Questions/Liaison série et servomoteur
Liaison série et servomoteur 2014-11-06T13:41:29+00:00

Accueil Forums Questions Liaison série et servomoteur

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

    Bonjour,

     

    J’aurais besoin d’aide pour réaliser mon projet de BTS deuxième année.

     

    Je doit piloté un servomoteur et 4 LED par liaison série, j’arrive à a piloté mes LED par l’interface série mais pas a piloté en même temps le servomoteur…

    J’aurais besoin d’aide pour réaliser ce projet, je vous joint donc le code que j’ai déja et vous remercie d’avance pour toute réponse.

     

     

    // 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.