IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Problème de programmation


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut Problème de programmation
    Bonjour à tous,
    Je suis actuellement en classe de 1ère S option Science de l'ingénieur. Fin février, nous avons à rendre un dossier (le TPE, travail pratique encadré). Avec mon groupe, nous avons choisi de travailler sur l'assistance du vélo électrique (V.A.E), et plus précisément le déclenchement de cette assistance. L'assistance doit se déclencher que dans certains cas :
    - vitesse < 25km/h --> V
    - action sur les pédales --> P
    - niveau d'assistance choisi --> N
    - Pas d'appui sur les freins --> F

    Sur notre carte Arduino, chaque condition est "associé" à une variable binaire (0 ou 1), sauf la vitesse, que nous souhaitons faire varier à l'aide d'un potentiomètre (c'est donc une entrée analogue). Notre prof nous a dit d'utiliser une équation logique (que voici : Assistance=V¯.P.N.F¯), déduite d'une table de vérité. Or, les cases d'une table de vérité ne peuvent prendre que des états 0 ou 1, alors que notre potentiomètre peut prendre de multiples valeurs. Nous ne savons donc pas comment inclure cela dans notre équation logique.
    Indépendament, nous avons réussi à faire fonctionner notre potentiomètre, mais évidement, lorsque nous introduisons le "programme potentiomètre" dans le programme simulant le déclenchement de l'assistance, cela ne fonctionne pas.
    Voici notre programme en l'état actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    const int nivAssist=4; //Associe la variable au pin 4
    const int pedalage=5;  //Associe la variable au pin 5
    const int frein=6;     //Associe la variable au pin 6
    const int potpin=7;    //Associe la variable au pin 7
    int val;
     
    const int vitesseMoteurA=12; 
    const int sensMoteurA=3;
     
    const int avant=1; 
    int vitesse=255;
     
    boolean lect_vMax;
    boolean lect_nivAssist;
    boolean lect_pedalage;
    boolean lect_frein;
    boolean assistance;
     
    void setup()
    {
      //Définie les variables en entrée
      pinMode(potpin, INPUT);
      pinMode(nivAssist, INPUT);
      pinMode(pedalage, INPUT);
      pinMode(frein, INPUT);
     
      //Définie les variables en sortie
      pinMode(sensMoteurA, OUTPUT);
      pinMode(vitesseMoteurA, OUTPUT);
     
      Serial.begin(9600);
    }
     
    void loop()
    {
      lect_nivAssist = digitalRead(nivAssist); 
      lect_pedalage = digitalRead(pedalage);
      lect_frein = digitalRead(frein);
      val = analogRead(A0);           //Associe la variable val à des valeurs analogiques de 0 à 1023
      val = map(val, 0, 1023, 0, 40); //Définie proportionnellement les valeurs 0 à 40 sur l'entrée analogique A0
      delay(15); 
     
      assistance=nivAssist&pedalage&!frein; 
     
      //Affiche sur le moniteur série l'état de chaque variable
      Serial.print("Vitesse=");
      Serial.println(val);
      Serial.print("Niveau d'assistance=");
      Serial.println(nivAssist);
      Serial.print("Pedalage=");
      Serial.println(pedalage);
      Serial.print("Frein=");
      Serial.println(frein);
      Serial.print("Assistance=");
      Serial.println(assistance);
      Serial.println(" ");
      delay(1000);
     
      if(assistance==1&val<=25)
        {
        digitalWrite(vitesseMoteurA, vitesse);
        digitalWrite(sensMoteurA, avant);
        }
      else
        {
        digitalWrite(sensMoteurA, LOW);
        }
    }
    En espérant une prompt réponse, merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    La condition logique associée à la vitesse est : Vitesse < 25km/h.
    Quand la vitesse passe ce seuil? la condition change d'état.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par martin.lelarge Voir le message
    Notre prof nous a dit d'utiliser une équation logique (que voici : Assistance=V¯.P.N.F¯), déduite d'une table de vérité. Or, les cases d'une table de vérité ne peuvent prendre que des états 0 ou 1, alors que notre potentiomètre peut prendre de multiples valeurs. Nous ne savons donc pas comment inclure cela dans notre équation logique.
    Vitesse < 25km/h. (0)
    Vitesse >= 25km/h. (1)

    Ya que 2 cas. Tu as bien une condition binaire.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    assistance=nivAssist&pedalage&!frein;

    nivAssist, pedalage et frein sont les numéros des pins

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Salut,

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    assistance=nivAssist&pedalage&!frein;

    nivAssist, pedalage et frein sont les numéros des pins
    En effet, ce sont des pins, mais nous devons aller lire leur état (0 ou 1) pour tester notre équation logique. Je ne comprend pas ce que cela change...

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Citation Envoyé par martin.lelarge Voir le message
    En effet, ce sont des pins, mais nous devons aller lire leur état (0 ou 1) pour tester notre équation logique. Je ne comprend pas ce que cela change...
    Ce que f-leb te pousse a faire, c'est de nous montrer :

    1) où dans le code tu lis ces broches ?
    2) qu'est ce que tu fais de ces valeurs lues ensuite ?
    3) et que tests tu ?

    Tu devrais trouver tout seul ton erreur.
    A+

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Merci pour toutes vos réponses, mais je ne sais pas comment démarrer une action après l'atteinte d'une valeur analogique définie :
    Si vitesse < 25 km/h : état logique 1
    Si vitesse => 25 km/h : état logique 0
    L'entrée analogique va de 0 à 1023 : de 0km/h à 50km/h (j'ai changé j'ai mis 50 ou lieu de 40km/h comme mis dans le poste pour que ce soit plus simple), donc
    < 25 km/h pour toutes les valeurs < 501.
    Mais je ne sais pas comment traduire cela en langage C++
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de programmation.
    Par willow.A dans le forum C
    Réponses: 3
    Dernier message: 08/01/2007, 16h36
  2. Problème en programmant un GUI swing
    Par kaelem dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/01/2007, 11h59
  3. Problème de programmation orientée objet
    Par dan65 dans le forum WinDev
    Réponses: 8
    Dernier message: 17/09/2006, 01h04
  4. problème finalisation programme
    Par depelek dans le forum Installation, Déploiement et Sécurité
    Réponses: 9
    Dernier message: 02/05/2006, 16h17
  5. Réponses: 1
    Dernier message: 26/09/2005, 19h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo