Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Jean-Luc

Pages: 1 ... 86 87 [88] 89 90 ... 93
1306
Débuter / Re : Objets et répétition d'objets
« le: février 20, 2015, 08:51:36 pm »
Exactement   ;)

1307
Débuter / Re : Objets et répétition d'objets
« le: février 20, 2015, 08:42:36 pm »
On pourrait effeçtivement faire deux objets et les mettre sur le même broche mais il faudrait définir le comportement lorsque les valeurs des broches sont différentes. Dans le code tel qu'il est, l'analogWrite est répété a chaque appel de la fonction. Donc en ayant deux objets sur la meme broche, l'état de la PWM va alterner entre les deux états définis dans les deux objets.

Pour que ça fonctionne, il faudrait ne pas répéter l'appel de analogWrite mais le mettre dans les case du switch. De cette manière le dernier objet qui change d'état imposerait sa valeur de la PWM.

Pour info on parle de ce programme

1308
Débuter / Re : Structures et class objets
« le: février 20, 2015, 08:31:31 pm »
Historiquement, le C++ a étendu les structures du C avec des fonctions (ou méthodes dans le jargon objet). Comme sur Arduino on est en C++, on peut également utiliser des struct en y définissant des méthodes. Les classes, comme présentées par Thierry dans Le monde des objets (2) ajoutent la possibilité de rendre des membres privés (private) ou protégés (protecteur). Sinon c'est exactement la même chose. Donc autant utiliser les classes qui ajoutent une protection des membres

Faut-il utiliser le C et les struct ou le C++ et les classes ? Si on se sent à l'aise avec les objets, il vaut mieux utiliser le C++ car c'est un « meilleur C »

1309
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 20, 2015, 05:04:24 pm »
Ca intéresserait quelqu'un une bibliothèque permettant d'ordonnancer des appels de fonction à des intervalles dans le temps ?

1310
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 20, 2015, 02:50:27 pm »
La difficulté est de faire plusieurs choses simultanément. Un seul éclairage est très facile a faire  :)

1311
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 20, 2015, 10:07:24 am »
Plusieurs erreurs : il faut appeler temps() au lieu de millis() au début de gereEclairage :)

Ensuite mes comparaisons de temps ... c'était n'importe quoi  :o

Voici le code corrigé. J'ai laissé les print de debug et c'est accéléré 1000 fois :

const unsigned long dureeDuTick = 1;

const byte pinLedVerte = 3;

unsigned long temps()
{
    return millis()/dureeDuTick;
}

enum { ETEINT1, AUGMENTATION1, ALLUME1, DIMINUTION1, ETEINT2, AUGMENTATION2, ALLUME2, DIMINUTION2 };

struct eclairage {
  const byte pin; /* pin de PWM */
  byte etat;
  unsigned long duree;
  unsigned long dateChargementduree;
  unsigned long dateChargementIntervallePWM;
  unsigned long intervallePWM; /* nombre de ticks entre 2 changement de PWM */
  byte valeurPWM;
  const int dureeEteint1;
  const int dureeAugmentation1;
  const int dureeAllume1;
  const int dureeDiminution1;
  const int dureeEteint2;
  const int dureeAugmentation2;
  const int dureeAllume2;
  const int dureeDiminution2;
};

void afficheEtatEclairage(byte etat)
{
  switch (etat)
  {
    case ETEINT1:       Serial.print("ETEINT-1");       break;
    case AUGMENTATION1: Serial.print("AUGMENTATION-1"); break;
    case ALLUME1:       Serial.print("ALLUME-1");       break;
    case DIMINUTION1:   Serial.print("DIMINUTION-1");   break;
    case ETEINT2:       Serial.print("ETEINT-2");       break;
    case AUGMENTATION2: Serial.print("AUGMENTATION-2"); break;
    case ALLUME2:       Serial.print("ALLUME-2");       break;
    case DIMINUTION2:   Serial.print("DIMINUTION-2");   break;
    default:            Serial.print("etat inconnu");
  }
}

void afficheEclairage(struct eclairage& lumiere)
{
  Serial.print("date:"); Serial.print(temps()); Serial.print(", ");
  Serial.print(lumiere.pin); Serial.print(", "); afficheEtatEclairage(lumiere.etat); Serial.print(", ");
  Serial.print("duree="); Serial.print(lumiere.duree);
  Serial.print(", progression="); Serial.print(temps() - lumiere.dateChargementduree);
  Serial.println();
}

struct eclairage ledVerte = { pinLedVerte, ETEINT1, 25200, 0, 0, 0, 0, 30600, 7200, 0, 10800, 18000, 7200, 6400, 7200 };

void gereEclairage(struct eclairage& lumiere)
{
  unsigned long dateCourante = temps();
 
  switch (lumiere.etat) {
    case ETEINT1:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeAugmentation1;
        lumiere.etat = AUGMENTATION1;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION1:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeAllume1;
        lumiere.etat = ALLUME1;
        lumiere.valeurPWM = 255;
      }
      else if (dateCourante - lumiere.dateChargementIntervallePWM > lumiere.intervallePWM)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
      }
      break;
    case ALLUME1:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeDiminution1;
        lumiere.etat = DIMINUTION1;
        lumiere.valeurPWM = 255;
        lumiere.intervallePWM = lumiere.dureeDiminution1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION1:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeEteint2;
        lumiere.etat = ETEINT2;
        lumiere.valeurPWM = 0;
      }
      else if (dateCourante - lumiere.dateChargementIntervallePWM > lumiere.intervallePWM)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
    case ETEINT2:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeAugmentation2;
        lumiere.etat = AUGMENTATION2;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION2:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeAllume2;
        lumiere.etat = ALLUME2;
        lumiere.valeurPWM = 255;
      }
      else if (dateCourante - lumiere.dateChargementIntervallePWM > lumiere.intervallePWM)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
        analogWrite(lumiere.pin, lumiere.valeurPWM);
      }
      break;
    case ALLUME2:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeDiminution2;
        lumiere.etat = DIMINUTION2;
        lumiere.valeurPWM = 255;
        lumiere.intervallePWM = lumiere.dureeDiminution2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION2:
      if (dateCourante - lumiere.dateChargementduree > lumiere.duree)
      {
        lumiere.dateChargementduree = dateCourante;
        lumiere.duree = lumiere.dureeEteint1;
        lumiere.etat = ETEINT1;
        lumiere.valeurPWM = 0;
      }
      else if (dateCourante - lumiere.dateChargementIntervallePWM > lumiere.intervallePWM)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
  }
  analogWrite(lumiere.pin, lumiere.valeurPWM);
}

void setup() {
  Serial.begin(9600);
  afficheEclairage(ledVerte);
  pinMode(ledVerte.pin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  gereEclairage(ledVerte);
 
  static unsigned long dateAff = 0;
  unsigned long date = millis();
  if (date - dateAff > 1000)
  {
    afficheEclairage(ledVerte);
    dateAff = date;
  }
}


Pour les autres lumières, il suffit de déclarer autant de variables de type struct eclairage qu'il y a de lumières avec les durées voulues dans l'initialisation de la struct et d'appeler gereEclairage pour chacune d'entre elles.

1312
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 20, 2015, 09:25:19 am »
Le TLC5940 va juste te donner des PWM supplémentaires et 12 bits (de 0 à 4095) au lieu de 8 bits. Mais leur gestion restera identique aux PWM internes de l'Arduino.

Effectivement la LED s'allume et reste allumée tout le temps. Je regarde où je me suis trompé.

1313
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 20, 2015, 08:19:27 am »
Note que pour tester, il suffit de diminuer la constante dureeDuTick pour enchaîner la séquence à plus grande vitesse.

1314
Vos projets / Re : Re : Un Arduino par module....ou pas.
« le: février 19, 2015, 08:29:34 pm »
... il faut passer par d'autres langages. Ne connaissant pas le C#, j'ai peur de pas tout comprendre.

Hummmm. Ce n'est pas du C#. C'est du C c'est à dire le langage de l'Arduino qui a de multiples facettes.

Si tu as des soucis de compréhension, regarde mon dernier article : Les structures

Ce que tu essayes de faire n'est pas des plus simple  :) et ça va nécessiter des notions au delà du niveau débutant.

1315
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 19, 2015, 03:15:46 pm »
Hem, j'avais pas vu le graphique.

Pour s'en sortir avec un programme, il faut d'abord établir les données nécessaires. Une fois les données nécessaires déterminées, le code vient (presque) tout seul. Ton appli n'est pas des plus simples car tu as plusieurs intervalles de temps à gérer et qui plus est 2 chronomètre, un pour compter les durées des rampes d'augmentation et de diminution et un pour compter les intervalles de temps entre deux augmentations ou diminutions de la PWM.

Il faut tout d'abord exprimer le temps en unités qui correspondent à ton application. Par exemple, le tick est la seconde. Le mieux est de faire une fonction qui te renvoie dans le nombre de ticks :

const unsigned long dureeDuTick = 1000;

unsigned long temps()
{
    return millis()/dureeDuTick;
}

Pour gérer tes éclairages, tu as besoin, en plus du temps, de gérer l'état de chacun des éclairages. Comme tu as certains éclairages qui accomplissent 2 cycles par 24h, la led verte et la led rouge, il faut 8 états. À savoir :

ETEINT1, AUGMENTATION1, ALLUME1, DIMINUTION1, ETEINT2, AUGMENTATION2, ALLUME2 et DIMINUTION2.

Je te propose de représenter cela par un enum

enum { ETEINT1, AUGMENTATION1, ALLUME1, DIMINUTION1, ETEINT2, AUGMENTATION2, ALLUME2, DIMINUTION2 };

Ensuite il te faut un chronomètre par éclairage pour compter le temps écoulé avant de passer d'un état au suivant et il te faut également les durées, en nombre de ticks, des états. Il te faut aussi le nombre de tick entre 2 augmentations de valeur de PWM. C'est donné par la durée de l'augmentation ou de la diminution divisée par 255.

Et enfin la pin PWM concernée et la valeur de la PWM.

Je te propose de représenter cela par une structure :

struct eclairage {
  const byte pin; /* pin de PWM */
  byte etat;
  byte valeurPWM;
  byte intervallePWM; /* nombre de ticks entre 2 changement de PWM */
  unsigned long chronometre;
  const int dureeEteint1;
  const int dureeAugmentation1;
  const int dureeAllume1;
  const int dureeDiminution1;
  const int dureeEteint2;
  const int dureeAugmentation2;
  const int dureeAllume2;
  const int dureeDiminution2;
};


Ensuite il faut instancier une struct par éclairage. Si je reprends ton graphique, on a ledVerte, ledRouge, ledBleue, ledBlancChaud et halogene.

Je n'arrive pas bien à voir les date exactes sur ton graphique mais on va dire que la led verte reste éteinte pendant 8h30 = 27000s. Puis elle augmente pendant 2h = 7200. Puis elle reste allumée pendant 0. Puis elle diminue pendant 3h = 10800. Puis elle reste éteinte pendant 5h = 18000s puis elle augmente pendant 2h = 7200 puis reste allumée 1h30 = 5400s puis diminue pendant 2h = 7200s. Total = 30600 + 7200 + 0 + 10800 + 18000 + 7200 + 5400 +7200 = 86400 / 3600 = 24. On est bon
Les temps sont en seconde car le tick est à la seconde. Ce qui donne pour ledVerte :

struct eclairage ledVerte = { pinLedVerte, ETEINT1, 0, 25200, 30600, 7200, 0, 10800, 18000, 7200, 6400, 7200 };

Le chronomètre est initialisé à une durée de 7h car au 0 de ton cycle, on a déjà consommé 1h30.

La gestion du cycle de lumière :

void gereEclairage(struct eclairage& lumiere)
{
  unsigned long dateCourante = millis();
 
  switch (lumiere.etat) {
    case ETEINT1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAugmentation1;
        lumiere.etat = AUGMENTATION1;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAllume1;
        lumiere.etat = ALLUME1;
        lumiere.valeurPWM = 255;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
        analogWrite(lumiere.pin, lumiere.valeurPWM);
      }
      break;
    case ALLUME1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeDiminution1;
        lumiere.etat = DIMINUTION1;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeDiminution1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeEteint2;
        lumiere.etat = ETEINT2;
        lumiere.valeurPWM = 0;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
    case ETEINT2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAugmentation2;
        lumiere.etat = AUGMENTATION2;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAllume2;
        lumiere.etat = ALLUME2;
        lumiere.valeurPWM = 255;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
        analogWrite(lumiere.pin, lumiere.valeurPWM);
      }
      break;
    case ALLUME2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeDiminution2;
        lumiere.etat = DIMINUTION2;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeDiminution2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeEteint1;
        lumiere.etat = ETEINT1;
        lumiere.valeurPWM = 0;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
  }
  analogWrite(lumiere.pin, lumiere.valeurPWM);
}

Dans setup :

void setup() {
  pinMode(ledVerte.pin, OUTPUT);
}

Dans loop :

void loop() {
  // put your main code here, to run repeatedly:
  gereEclairage(ledVerte);
}

Le code complet, ça compile mais ce n'est absolument pas testé.

const unsigned long dureeDuTick = 1000;

const byte pinLedVerte = 3;

unsigned long temps()
{
    return millis()/dureeDuTick;
}

enum { ETEINT1, AUGMENTATION1, ALLUME1, DIMINUTION1, ETEINT2, AUGMENTATION2, ALLUME2, DIMINUTION2 };

struct eclairage {
  const byte pin; /* pin de PWM */
  byte etat; /* etat : ETEINT, AUGMENTATION, ALLUME, DIMINUTION */
  unsigned long chronometre;
  unsigned long dateChargementChronometre;
  unsigned long dateChargementIntervallePWM;
  unsigned long intervallePWM; /* nombre de ticks entre 2 changement de PWM */
  byte valeurPWM;
  const int dureeEteint1;
  const int dureeAugmentation1;
  const int dureeAllume1;
  const int dureeDiminution1;
  const int dureeEteint2;
  const int dureeAugmentation2;
  const int dureeAllume2;
  const int dureeDiminution2;
};

struct eclairage ledVerte = { pinLedVerte, ETEINT1, 25200, 0, 0, 0, 0, 30600, 7200, 0, 10800, 18000, 7200, 6400, 7200 };

void gereEclairage(struct eclairage& lumiere)
{
  unsigned long dateCourante = millis();
 
  switch (lumiere.etat) {
    case ETEINT1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAugmentation1;
        lumiere.etat = AUGMENTATION1;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAllume1;
        lumiere.etat = ALLUME1;
        lumiere.valeurPWM = 255;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
        analogWrite(lumiere.pin, lumiere.valeurPWM);
      }
      break;
    case ALLUME1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeDiminution1;
        lumiere.etat = DIMINUTION1;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeDiminution1 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION1:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeEteint2;
        lumiere.etat = ETEINT2;
        lumiere.valeurPWM = 0;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
    case ETEINT2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAugmentation2;
        lumiere.etat = AUGMENTATION2;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeAugmentation2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case AUGMENTATION2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeAllume2;
        lumiere.etat = ALLUME2;
        lumiere.valeurPWM = 255;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM++;
        analogWrite(lumiere.pin, lumiere.valeurPWM);
      }
      break;
    case ALLUME2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeDiminution2;
        lumiere.etat = DIMINUTION2;
        lumiere.valeurPWM = 0;
        lumiere.intervallePWM = lumiere.dureeDiminution2 / 255;
        lumiere.dateChargementIntervallePWM = dateCourante;
      }
      break;
    case DIMINUTION2:
      if (lumiere.dateChargementChronometre + lumiere.chronometre > dateCourante)
      {
        lumiere.dateChargementChronometre = dateCourante;
        lumiere.chronometre = lumiere.dureeEteint1;
        lumiere.etat = ETEINT1;
        lumiere.valeurPWM = 0;
      }
      else if (lumiere.dateChargementIntervallePWM + lumiere.intervallePWM > dateCourante)
      {
        lumiere.dateChargementIntervallePWM = dateCourante;
        lumiere.valeurPWM--;
      }
      break;
  }
  analogWrite(lumiere.pin, lumiere.valeurPWM);
}

void setup() {
  pinMode(ledVerte.pin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  gereEclairage(ledVerte);
}

1316
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 19, 2015, 12:20:52 pm »
Bonjour,

D'après ce que je comprends de ton programme :

La variable a est incrémentée de 0 à 500 toutes les 20ms. Au total le cycle prend 10 secondes

Quand a vaut 10, soit après 200ms la première branche du case est exécutée. Cette première branche n'incrémente x que si l'exécution a lieu après 50 ms. La première fois c'est toujours vrai. Ensuite il faut attendre 10,2 secondes pour que a vaille de nouveau 10. La seconde fois c'est également vrai et x est incrémenté. etc. Pour que la lumière passe de 0 à 255, il faudra 42 minutes et des poussière. Est-ce le comportement attendu ? Que veux tu faire exactement ?

1317
Vos projets / Re : Un Arduino par module....ou pas.
« le: février 18, 2015, 11:24:17 pm »
Bonsoir,

Qu'entends-tu par plus rien ne marche ?

1318
Composants / Re : Un nouveau composant prometteur : le VL6180
« le: février 18, 2015, 06:41:19 pm »
Ca me semble effectivement faisable en HO  :)

1319
Vos projets / Re : Un Arduino par canton
« le: février 18, 2015, 09:34:46 am »
Voici la vidéo avec une petite BR64 au ralenti. L'ovale d'essai est incliné comme on peut le voir sur la 2e moitié de la vidéo via l'absence de parallélisme entre les joints du carrelage  et le rebord. La loco descend donc au début puis remonte la pente de l'autre côté de l'ovale.

https://dl.dropboxusercontent.com/u/67740546/ralenti.m4v

1320
Vos projets / Re : Un Arduino par canton
« le: février 17, 2015, 11:41:16 am »
J'ai fait une vidéo, je vous mets ça en ligne dès que possible.

Pages: 1 ... 86 87 [88] 89 90 ... 93