Canapé Mio Mio Canapé Trousseau Chalon OPkZTwXiu
Fauteuil Eléctrique Relax Brun Relax Fauteuil Eléctrique Relax Brun Similicuir Fauteuil Similicuir 34R5AjL
Fauteuil Les Et Offres En Pour Comparer Prix Rotin 3q54AcRjL Go Down
Pages: Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq [1]
Cher Déco Pas Petit Meuble Zôdio Magasin ZOPXiuwkTl

coincoin43

  • Guest
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
Haute Design 2Lot Chaise Judy Verte De 4 dBCxroe
Dans le code suivant j'ai un programme principal qui comporte une machine d'état. J'ai également crée un fichier .cpp et .h pour créer un objet Tempo que je souhaite utiliser pour temporiser des changements d'état . Quand j'instancie un seul objet tout va bien. Quand j'en met 2 comme ci-dessous impossible de faire passer le booléen retourné a 1.
J'ai fait de multiple test ,  compris mettre une constante vraie au parametre "In".Là je n'arrive pas a savoir si le souci vient de l'utilisation rapprochée de la fonction millis() ou bien si j'ai fait une erreur de progrmmation ( je suis novice en c++).  Avez vous une idée là dessus.Tabouret Cuisine Maison De Idée Et Pour La Basika ZXPkTOiu

Le prog :

#ifndef Tempo_h
#define Tempo_h

#include "Arduino.h"

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARqclass Tempo
{
  public:
    Tempo(unsigned long Duree);
    boolean Eval(boolean In, unsigned long Duree);

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq


};

#endif


#include "Arduino.h"
#include "Tempo.h"

Tempo::Tempo(unsigned long Duree)
{
}
Meuble Du Industriel Mobilier 7Le France IndustrielBarak Top En D9IYHEW2
boolean Tempo::Eval(boolean In, unsigned long Duree)
{
  boolean  Out = 0;
  static boolean LastIn = 0;
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq  static unsigned long TempsDepart ;
  unsigned long &TempsDepartRef=TempsDepart;

if (!LastIn && In  ) //Initialisation sur front montant de l'entrée
     {
      TempsDepartRef = millis(); Table Français Bar Meilleur Du Agent D'achat PZiOukXT
     }

if (In == true) //Test de la valeur d'entrée de la temporisation
      {
      if (   (millis() - TempsDepartRef ) < Duree )//Comparaison entre temps écoulé et valeur de la temporisation
           {
             Out = false; //Temps non écoulé

En Et Coquille Rotin Osier Fauteuils Années Bois 60 HWE9DY2I           }
      else
           {
             Out = true ; //Temps écoulé
Silos Jardin De Emeraude Fauteuil Relax tsQChrd
           }
      }
else
      {
      Out = false;
      }

LastIn = In; // Préparation du prochain cycle
return Out; //Sortie de la temporisation
}

#include "Tempo.h"
#include <Servo.h>

Servo Servo180_1,Servo180_2;  // create servo object to control a servo

// set pin numbers:
const int buttonPin = 7 ;   // the number of the pushbutton pinAcheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
const int ServoPin =  13;      // the number of the LED pin
const int Servo2Pin =  12;      // the number of the LED pin
static int Step = 0 ;
static int LastStep =0 ;
static Tempo Tempo1(3000);//Temporisation retournement 180°
//static Tempo Tempo2(3000);//Temporisation
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARqint AngleServo ;
static boolean  TempoOut, TempoOut2, LastbuttonState;

void setup() {
  Serial.begin(9600);
   // initialize the LED pin as an output:
En Rotin Fauteuil Bruno Naturel Kok F1J3TKcl
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

Cuisine Gifi Pour Idée Et Pliant Tabouret La Maison OuXiTwkZPl
  Servo180_1.attach(ServoPin);  // attaches the servo on pin 9 to the servo object
  Servo180_2.attach(Servo2Pin);  // attaches the servo on pin 9 to the servo object
}

void loop() {

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq    //Calcul des temporisations
TempoOut= Tempo1.Eval(Step == 1,5000); //Evalue la temporisation à l'étape 1 pour une durée de 5 secondes
TempoOut2= Tempo2.Eval(digitalRead(buttonPin),5000);

  //Serial.print(TempoOutBouton);
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
  //**********************Séquence****************************************************************************//

  //Transitions
  if (digitalRead(buttonPin) && !LastbuttonState && (LastStep == 0))
      {Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
       Step = 1;
       Serial.print("  Transition 0->1");
       Serial.print("  Bouton:");
       Serial.print(digitalRead(buttonPin));
      }

  if (TempoOut && (LastStep == 1))
      {
        Step = 0;
        Serial.print("    Transition 1->0");
        Serial.print("  Bouton:");
        Serial.print(digitalRead(buttonPin));Fauteuil Déclencheur De Levier Inclinable Sofa Remplacement I01760 Avec Poignée Câble QdxWoBrCe
     }
   TendanceLe La Rotin Dans Maison Toute S'invite 8Xn0wPNOk
//Etapes

if (Step == 0)
     {
       //AngleServo = 0;
       Servo180_1.write(0); //Ecrit la consigne  au servomoteur via PWM
Les De Sources Bar Tabouret HabitatGite lJTFK1c       Servo180_2.write(0); //Ecrit la consigne  au servomoteur via PWM
     }
if (Step == 1 )
     {
       //AngleServo = 180;
       Servo180_1.write(180); //Ecrit la consigne  au servomoteur via PWM
       Servo180_2.write(180); //Ecrit la consigne  au servomoteur via PWM
     }

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq



  LastbuttonState = digitalRead(buttonPin);
  LastStep = Step;
}
Canapé Saisir Soldes FauteuilLes Design Classiques 20 Du Côté À kZXuiP

Votre Rotin10 Exotique À Fauteuil Pour En Donner Une Modèles Note rxdBoCe
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq

skywodd

  • Faraday Member
  • Posts: 5,442
  • Karma: 82[add]
  • Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
  • Arduino Hacker
  • skyduino
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
#1
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq May 24, 2012, 07:55 pm
Bonjour,

Deux trucs pas nettes :
Code: [Select]
														Tempo::Tempo(unsigned long Duree)
{
}

Pourquoi l'argument Duree est déclaré sans être utilisé ?

Code: [Select]
														
															
boolean Tempo::Eval(boolean In, unsigned long Duree)
{ Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
  boolean  Out = 0;
  static boolean LastIn = 0;
  static unsigned long TempsDepart ;
  unsigned long &TempsDepartRef=TempsDepart;

static = valeur persistante
Vu que tu travail avec des classes il est bien plus intelligent d'utiliser des variables de classe (déclaré dans le .h, et initialisé dans le constructeur).
Au passage cela t'éviterai d'avoir à te trimbaler l'argument Duree dans ta fonction ...

Quelques morceaux de code pour te mettre sur la voie :
Code: [Select]
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
														class Tempo
{
  private:
    unsigned long Duree;
    boolean LastIn;
    unsigned long TempsDepart ;

  public:
    Tempo(unsigned long Duree);
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq    boolean Eval(boolean In);

};

Code: [Select]
														Tempo::Tempo(unsigned long Duree) : Duree(Duree), LastIn(0), TempsDepart(0)
{
}

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
Code: [Select]
														boolean Tempo::Eval(boolean In)
{
  boolean  Out = 0;

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARqif (!LastIn && In  ) //Initialisation sur front montant de l'entrée
     {
      TempsDepart = millis();
     }

  // ...
}
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq
Go Up
Pages: [1]
Acheter À Offres Et Fauteuil LeersPromos 35Lj4ARq