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

C Discussion :

Incrémentation non prise en compte.


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut Incrémentation non prise en compte.
    Bonjour,

    J'ai presque finis mon programme pour un rail time laps photo. Et je bute sur un problème.

    J'ai créer des incrémentations dans la boucle loop, elles sont bien affiché sur l'écran lcd mais pas prise en compte par le programme après le changement des valeurs avec les boutons.

    Ma question est comment fixé rafraîchir les incrémentations dans :

    int rpm;
    int nombreDePas;
    int tempsDePausePhoto;


    ???

    Cordialement Alexandre.
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    #include <SerialLCD.h>
    #include <SoftwareSerial.h> 
     
    #define valeurMin 0
    #define valeurMax 202
     
    volatile int rpm;
    int nombreDePas;
    int tempsDePausePhoto;
    int compteur;
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
    const int stepsPerRevolution = nombreDePas;
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A5;  // Pin for button S3
    int interupteur = 8;
    int analogValue = 4;
     
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup()
     
    {
     
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
     
    }
     
    void loop()
     
     
     
    {
     
     
      if (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
        slcd.setCursor(8,0);
        if (compteur<valeurMax)++compteur,delay(150);
        LCD();
        delay(100);
        delay (tempsDePausePhoto*1000);
     
     
      }
     
      if (digitalRead(btnS1)==LOW)
      { 
        slcd.backlight();
        if (rpm<valeurMax)++rpm,delay(50);
        if(rpm > 201) { 
          rpm = 0;
        }    
        LCD();
      }
     
     
      if (digitalRead(btnS2)==LOW)
      { 
        slcd.backlight();
        if (tempsDePausePhoto<valeurMax)++tempsDePausePhoto,delay(50);
        if(tempsDePausePhoto > 201) { 
          tempsDePausePhoto = 0;
        }    
        LCD();
      }
     
     
      if (digitalRead(btnS3)==HIGH)
      { 
        slcd.backlight();
        if (nombreDePas<valeurMax)++nombreDePas,delay(150);
        if(nombreDePas > 201) { 
          nombreDePas = 0;
        }    
        LCD();
      }
    }
     
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(nombreDePas,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    En C, les données sont transmises par copie.
    Si tu veux que tes variables soient modifié ou puissent être "mises à jour", il faut les transmettre par adresse en utilisant des pointeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void foo(int i); // lance un thread.
     
    int i = 0;
    foo(i);
    i++;
    // dans le thread lancé par foo, i vaudra 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void foo(int * ptr); // lance un thread.
     
    int i = 0;
    foo(& i);
    i++;
    // dans le thread lancé par foo, *ptr vaudra 1 après qu'on ai exécuté i++;
    Si les fonctions que tu utiles font partie de l'API de la bibliothèque que tu utilises, il te faut alors rappeler ces fonctions à chaque modifications de tes variables pour quelles soient prises en compte.

  3. #3
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Un grand merci pour ta réponse.

    Je test ça de suite. J'ai pas tout bien compris, mais tu me met sur la voie.

    Bonne soirée

  4. #4
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Pourrais-tu me montré un exemple de pointage avec un int par exemple celui là :

    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
     
     
    int rpm;
     
    void setup()
     
    pinMode(btnS1, INPUT);
     
    void loop()
     
    {
     while (digitalRead(btnS1)==LOW)
      { 
        slcd.backlight();
        if(rpm<valeurMax)++rpm,delay(50);
        if(rpm > 201) { 
          rpm = 0;
        }    
        LCD();
      }
    Merci :-)

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Je pense que ce lien pourrait t'aider.

  6. #6
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Merci beaucoup pour ton aide je devrais pouvoir m'en sortir maintenant.

    Bonne journée :-)

  7. #7
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Est ce que je touche au bute ?


    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    #include <SerialLCD.h>
    #include <SoftwareSerial.h> 
     
    #define valeurMin 0
    #define valeurMax 202
     
    int rpm=0;
    int nombreDePas=0;
    int tempsDePausePhoto=0;
    int compteur=0;
     
    int *prpm=&rpm;
    int *pnombreDePas= &nombreDePas;
    int *ptempsDePausePhoto= &tempsDePausePhoto;
     
     
     
     
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
    const int stepsPerRevolution = nombreDePas;
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    int interupteur = 8;
    int analogValue = A0;
     
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup()
     
    {
     
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
     
    }
     
    void loop()
     
     
     
    {
     
     
      while (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
        slcd.setCursor(8,0);
     
        LCD();
        delay(100);
        delay (tempsDePausePhoto*1000);
        if (compteur<valeurMax)++compteur,delay(150);
     
     
      }
      while (digitalRead(btnS1)==LOW)
      { 
        slcd.backlight();
        if(*prpm<valeurMax)++(*prpm),delay(50);
        if(*prpm > 201) { 
          *prpm = 0;
        }    
        LCD();
      }
     
     
      while (digitalRead(btnS2)==LOW)
      { 
        slcd.backlight();
        if (*ptempsDePausePhoto<valeurMax)++(*ptempsDePausePhoto),delay(50);
        if(*ptempsDePausePhoto > 201) { 
          tempsDePausePhoto = 0;
        }    
        LCD();
      }
     
     
      while (digitalRead(btnS3)==HIGH)
      { 
        slcd.backlight();
        if (*pnombreDePas<valeurMax)++(*pnombreDePas),delay(250);
        if(*pnombreDePas > 201) { 
          nombreDePas = 0;
        }    
        LCD();
      }
     
    }
     
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(nombreDePas,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
    }

  8. #8
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    tempsDePause fonctionne avec le bouton :-) il manque plus qu'a trouvé l'erreur pour rpm et nombreDePas

    voici le nouveau code :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    #include <SerialLCD.h>
    #include <SoftwareSerial.h>
     
    #define valeurMin 0
    #define valeurMax 202
     
    int rpm;
    int nombreDePas;
    int tempsDePausePhoto;
    int compteur;
     
    int (*prpm), (*pnombreDePas), (*ptempsDePausePhoto);
     
     
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
    const int stepsPerRevolution = nombreDePas;
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    int interupteur = 8;
    int analogValue = A0;
     
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup()
     
    {
     
     prpm = &rpm;
     pnombreDePas = &nombreDePas;
     ptempsDePausePhoto = &tempsDePausePhoto;
     
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
     
    }
     
    void loop()
     
     
     
    {
     
     
      while (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
        slcd.setCursor(8,0);
     
        LCD();
        delay(100);
        delay (tempsDePausePhoto*1000);
        if (compteur<valeurMax)++compteur,delay(150);
     
     
      }
       while (digitalRead(btnS1)==LOW) {
        slcd.backlight();
        if (*prpm<valeurMax)++(*prpm),delay(50);
        if(*prpm > 201) {
          rpm = 0;
        }
        LCD();
      }
     
      while (digitalRead(btnS2)==LOW) {
        slcd.backlight();
        if (*ptempsDePausePhoto<valeurMax)++(*ptempsDePausePhoto),delay(50);
        if(*ptempsDePausePhoto > 201) {
          tempsDePausePhoto = 0;
        }
        LCD();
      }
     while (digitalRead(btnS3)==HIGH) {
        slcd.backlight();
        if (*pnombreDePas<valeurMax)++(*pnombreDePas),delay(50);
        if(*pnombreDePas > 201) {
          nombreDePas = 0;
        }
        LCD();
      }
    }
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(nombreDePas,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
    }

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je jette un oeil à ton code et j'ai quelques remarques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (*prpm), (*pnombreDePas), (*ptempsDePausePhoto);
    Les parenthèses sont inutiles, ne les mets pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int nombreDePas;
    [...]
    int (*pnombreDePas);
    [...]
    pnombreDePas = &nombreDePas;
    Quel est l'intérêt ? Tu as une variable globale nombreDePas, elle est accessible de partout et directement, pourquoi créer un pointeur (global lui aussi, donc accessible de la même manière) vers elle ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (*pnombreDePas<valeurMax)++(*pnombreDePas),delay(50);
    Ouh ! Ce n'est pas très joli car pas très lisible. C'est une écriture que tu reprends à plusieurs reprises, pourquoi l'avoir choisi ? Tu souhaites écrire ceci en une seule ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (*pnombreDePas<valeurMax)
    {
        ++(*pnombreDePas); // ici, tu peux faire nombreDePas++, l'effet est le même (cf remarque précédente)
        delay(50);
    }

    Vu que tu utilises 3 boucles similaires pour tes 3 variables et qu'une seule "bouge", es-tu sûr de rentrer dans les 2 autres whiles ? Pour le savoir, passe en mode debug et met un breakpoint sur chacune des boucles pour voir dans lesquelles tu passes. Ou sinon, met un paramètre à la fonction LCD et affiche un caractère différent pour t'indiquer depuis quelle boucle LCD() a été appelée.


    Est-ce un programme Arduino ? Au passage, ce code est du C++, en as-tu conscience ?


    EDIT : tu définis souvent tes fonctions en commençant ainsi :
    Tu devrais plutôt écrire :
    Une discussion intéressante (presque) sur le sujet : http://www.developpez.net/forums/d13...-fonctionvoid/

  10. #10
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Oui ce programme est pour un Arduino. J'ai recupéré les différent code sur http://arduino.cc/fr


    Un grand merci pour tes réponses je vais de se pas faire les modifications. :-)

  11. #11
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Je viens de faire les modifications sur mon code mais ça marche toujours pas.

    Mon choix de forme et de syntaxe est surement une parfaite abomination j'ai récupéré des multiples bous de code sur pleins de forum.
    pour ta question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vu que tu utilises 3 boucles similaires pour tes 3 variables et qu'une seule "bouge", es-tu sûr de rentrer dans les 2 autres whiles ? Pour le savoir, passe en mode debug et met un breakpoint sur chacune des boucles pour voir dans lesquelles tu passes. Ou sinon, met un paramètre à la fonction LCD et affiche un caractère différent pour t'indiquer depuis quelle boucle LCD() a été appelée.
    Les retoures de mon arduino par le moniteur du logiciel sont illisibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    þPaP:þ2þ0þ0&#159;ÿ þPaP:þ2þ0þ0?ÿ þRpm:þ6?ÿ þPaP:þ2þ0þ0?ÿ
    le problème est peut ètre là ?

    Pour le debug, je vais me renseigner.

    Sinon il vaudrais mieux que je passe par des IF, ELSE, ELSE, ?

  12. #12
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Ca dépend du nombre de tests que tu dois faire.
    1 test et plein de solutions => case
    Pleins de test en oui ou non => if else
    Après c'est à toi de voir ^^

  13. #13
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    si mon pc reçois des informations de ce type existe t'il une manip pour y remédier. Ÿ‚ŸƒþPaP:þ2þ0þ0?ÿ þRpm:þ6?ÿ þPaP:þ2þ0þ0?ÿ

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Mon choix de forme et de syntaxe est surement une parfaite abomination j'ai récupéré des multiples bous de code sur pleins de forum.
    Tu ne sembles pas être informaticien d'après ton profil, donc on ne t'en voudra pas, mais fais quand même attention à ce que tu récupères. Il faut savoir si cela répond à ton problème et si le code est correct. Jette toujours un oeil critique sur ce que tu récupères du net.

    Les retoures de mon arduino par le moniteur du logiciel sont illisibles
    Ca ne répond pas vraiment à ma question. Qu'appelles-tu le "moniteur du logiciel" ? Tu parles d'un cable série connecté à ton PC ? Si oui, sache qu'il y a des paramètres à renseigner quand tu souhaites lire ce qui arrive sur un port série, notamment le baudrate. Un mauvais réglage donnera des affichages tout moisis, c'est peut-être le cas ici.

    As-tu essayé de rajouter un paramètre à la fonction LCD() ? Ton LCD affiche t-il correctement les données que tu lui demandes ?

    Sinon il vaudrais mieux que je passe par des IF, ELSE, ELSE, ?
    Que souhaites-tu faire ? Les mots-clés (on parle de structures de contrôle) tels que IF, ELSE, WHILE, FOR sont là pour traduire une pensée "algorithmique". Il faut d'abord écrire en français ce que tu souhaites faire et ensuite le traduire en code en utilisant la structure de contrôle adaptée.

  15. #15
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par alou38 Voir le message
    si mon pc reçois des informations de ce type existe t'il une manip pour y remédier. Ÿ‚ŸƒþPaP:þ2þ0þ0?ÿ þRpm:þ6?ÿ þPaP:þ2þ0þ0?ÿ
    A mon tu reçois des nombres écris en binaire, il te faut alors les lire avec fread.

  16. #16
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Qu'appelles-tu le "moniteur du logiciel" ?

    As-tu essayé de rajouter un paramètre à la fonction LCD() ? Ton LCD affiche t-il correctement les données que tu lui demandes ?

    J'appelle le moniteur du logiciel la console sur mon PC dans le logiciel d'Arduino ils le nomment moniteur série.

    Pour se qui est le la fonction LCD(9600); quant je la rentre dans mon code, l’écran est carrément déactivé. Sans, l'affichage marche très bien.

    Oui mon LCD affiche correctement les information que je lui demande.

  17. #17
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    1000 merci pour votre aide

    J'ai rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Moteurvite()   // Moteur vite
    {
      myStepper.setSpeed(rpm++);
    }
    Voici mon code final :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #include <SerialLCD.h>
    #include <SoftwareSerial.h>
     
    #define valeurMin 0
    #define valeurMax 202
     
    int rpm=0, stepsPerRevolution=10, tempsDePausePhoto=0, compteur;
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
     
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    int interupteur = 8;
    int analogValue = A0;
     
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup(void)
     
    {
     
     
     
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
    }
    void loop()
    {
      while (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
        slcd.setCursor(8,0);
     
        LCD();
        delay(100);
        delay (tempsDePausePhoto*1000);
        if (compteur<99999)compteur++,delay(150);
     
     
      }
      while (digitalRead(btnS1)==LOW) {
        Moteurvite();
        LCD();
      }
     
      while (digitalRead(btnS2)==LOW) {
        slcd.backlight();
        if (tempsDePausePhoto<valeurMax)tempsDePausePhoto++,delay(50);
        if(tempsDePausePhoto > 201) {
          tempsDePausePhoto = 0;
        }
        LCD();
      }
      while (digitalRead(btnS3)==HIGH) {
        slcd.backlight();
        if (stepsPerRevolution<valeurMax)stepsPerRevolution++,delay(50);
        if(stepsPerRevolution> 201) {
          stepsPerRevolution = 0;
        }
        LCD();
      }
    }
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(stepsPerRevolution,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
     
     
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
     
    }
     
    void Moteurvite()   // Moteur vite
    {
      myStepper.setSpeed(rpm++);
    }

  18. #18
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Bien si tu as pu résoudre ton problème

    Je souhaitais juste parler un peu de ton application : rail pour photo time-lapse. Tu utilises l'Arduino uniquement pour déplacer le rail ou aussi pour déclencher ? Le principe m'intéresse du time-lapse m'a toujours intéressé mais je ne me suis jamais penché sur la manière dont je pourrais dire à mon Nikkon "vas-y bonhomme, c'est l'heure de prendre une photo !". Bref, si tu peux m'en (nous en ?) dire plus sur le sujet, ça serait sympa

  19. #19
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Effectivement, le problème est intéressant.

  20. #20
    Membre averti
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Bien si tu as pu résoudre ton problème

    Je souhaitais juste parler un peu de ton application : rail pour photo time-lapse. Tu utilises l'Arduino uniquement pour déplacer le rail ou aussi pour déclencher ? Le principe m'intéresse du time-lapse m'a toujours intéressé mais je ne me suis jamais penché sur la manière dont je pourrais dire à mon Nikkon "vas-y bonhomme, c'est l'heure de prendre une photo !". Bref, si tu peux m'en (nous en ?) dire plus sur le sujet, ça serait sympa
    Coucou,

    Alors mon Arduino déplace l'appareil photo sur un rail et déclenche maintenant les photos (voir le nouveau code plus bas). J'utilise un câble de télécommande à distance et un relay pour le déclenchement. Si tu as d'autre question hésite pas :-)

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #include <SerialLCD.h>
    #include <SoftwareSerial.h>
     
    #define valeurMin 0
    #define valeurMax 202
     
    int rpm=0, stepsPerRevolution=200, tempsDePausePhoto=0, compteur;
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
     
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    int interupteur = 8;
    int analogValue = A0;
    int relayPin = A2;
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup(void)
     
    {
     
     
      pinMode(relayPin,OUTPUT);
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
    }
    void loop()
    {
      while (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
     
     
     
     
        slcd.setCursor(8,0);
     
        LCD();
        delay(100);
        digitalWrite(relayPin,HIGH);
        delay (tempsDePausePhoto*1000);
        digitalWrite(relayPin, LOW);
        if (compteur<99999)compteur++,delay(150);
     
     
      }
      while (digitalRead(btnS1)==LOW) {
        Moteurvite();
     
        LCD();
      }
     
      while (digitalRead(btnS2)==LOW) {
        slcd.backlight();
        if (tempsDePausePhoto<valeurMax)tempsDePausePhoto++,delay(50);
        if(tempsDePausePhoto > 201) {
          tempsDePausePhoto = 0;
          slcd.clear();
        }
     
        LCD();
      }
      while (digitalRead(btnS3)==HIGH) {
        slcd.backlight();
        if (stepsPerRevolution<valeurMax)stepsPerRevolution++,delay(50);
        if(stepsPerRevolution> 201) {
          stepsPerRevolution = 0;
          slcd.clear();
        }
     
        LCD();
      }
    }
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(stepsPerRevolution,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
     
     
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
     
    }
     
    void Moteurvite()   // Moteur vite
    {
      myStepper.setSpeed(rpm);
        if (rpm<valeurMax)rpm++,delay(50);
        if(rpm> 200) {
          rpm = 0;
          slcd.clear();
          LCD();
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Couleur non prise en compte en exécution
    Par BECHE dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2005, 18h14
  2. Installation SP2 + RAM non prise en compte
    Par laure_belette dans le forum Windows XP
    Réponses: 3
    Dernier message: 13/10/2005, 12h46
  3. [css] Feuille de style non prise en compte
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/06/2005, 11h49
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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