dimanche 10 mars 2013

Bon ça n'a rien à voir, mais...

Un vieux rêve vient de se réaliser... J'ai enfin réussi mon premier chenillard... Alors, je sais, que ça fait des années que ça doit être le premier exercice d'électronique et que d'utiliser un micro-controller pour ça revient certainement à utiliser une pelleteuse pour écraser une mouche, mais n'empêche que, moi, ça m'a donné de l'émotion...

Voilà ce que ça donne :


Bon, juste pour l'info, voici le schéma :

Les resistances font 220 Ω et le condensateur fait 100 µF. Voici le programme qui permet de faire varier la vitesse du chenillard en fonction du potentiomètre 10 kΩ :

// Branchement du potentiomètre
const int potPin = A0;

// Branchement de la premère led
const int minLed = 2;
// Branchement de la dernière led
const int maxLed = 9;

// Vitesse minimale
const int minPace = 20;
// Vitesse maximale
const int maxPace = 100;

// Vitesse courante
int pace = 0;

// Sens du chenillard
int sens = 1;
// Led actuellement allumée
int led = minLed;

// Dernière valeur en millisecondes
unsigned long previousTime = 0;

void setup() {
  // Mise en place des sorties pour toutes les led
  for (int x = minLed; x <= maxLed; x++) {
    pinMode(x, OUTPUT);
  } 
}

// Mise à jour de la vitesse depuis le potentiomètre
int updatePace() {
  int potVal = analogRead(potPin);

  pace = map(potVal, 0, 1023, minPace, maxPace);
}

void loop() {
  // Mise à jour de la vitesse
  updatePace();

  unsigned long currentTime = millis();

  // Si on a dépassé le temps d'allumage de la dernière led
  if (currentTime - previousTime > pace) {    
    // On note quand est-ce qu'on fait le changement
    previousTime = currentTime;

    // On éteint la led en cours
    digitalWrite(led, LOW);

    // On sélectionne la prochaine led
    led += sens;

    // Si c'est la dernière ou la première led
    if ((led == maxLed)||(led == minLed)) {
      // On change le sens
      sens = -sens;
    }

    // On allume la led en cours
    digitalWrite(led, HIGH);
  }

  // On fait une micro-pause
  delay(5);
}

Aucun commentaire:

Enregistrer un commentaire