Répondre à : USS Défiant.

Accueil/Projets/USS Défiant./Répondre à : USS Défiant.
Répondre à : USS Défiant. 2015-07-15T08:13:10+00:00

Accueil Forums Projets USS Défiant. Répondre à : USS Défiant.

Asgard
Participant
Nombre d'articles : 42

Comme d’habitude, j’ai un soucis dans le shield et je n’ai pas encore trouvé pourquoi.

Voici une vidéo juste pour vous montrer ce que ça donne.

https://www.dropbox.com/s/xzks3yk5mo4l731/D%C3%A9fiant.mp4?dl=0

Je ferais une meilleure vidéo lorsque j’aurais solutionné mon problème.

Je vous met aussi le programme pour ceux qui sont curieux.

Bonne journée.

Marc

[code]

#include « Timer.h »

// Définition de tous les pins associés aux secteurs qu’ils controlent

byte Vaisseau = 48;
byte FeuxPosition = 47;
byte FeuxNavigation = 44;
byte Phares = 43;
byte Radar = 8;
byte EvansDisto = 39;
byte CollecteurBuzzard = 36;
byte MoteurImpulsions = 35;
byte MoteurDistorsion = 30;
byte Lasers = 29;

byte bouton = 2;

// Variable pour indiquer si le bouton a été appuyé ou non (veille du programme ou non)
boolean veille = true;
long lastT = 0;

// Variable qui a la luminusité du radar
long lumRadar;

// Définition des timers que l’on va utiliser ainsi que des variables pour stocker les ids

Timer allumageSimple; // ce timer s’occupera d’allumer les leds qui doivent simplement s’allumer au bout d’un certain temps
int IDSimple[7] = {
  0};

Timer clignotement; // ce timer fera clignoter les leds qui doivent clignoter
int IDClignotement[4] = {
  0};

Timer delaiClignotement; // ce timer declenchera le clignotement des leds (elles ne doivent pas clignoter immediatement)
int IDDelai[2] = {
  0};

Timer allumageProgressif; // ce timer va gerer l’allumage progressif du radar
int IDProgressif[2] = {
  0};

Timer attaque; // ce timer va servir à faire clignoter les torpilles
int IDAttaque[5] = {
  0};

// Timers
long delayVaisseau = 2000;
long delayEvansDisto = 27000;
long delayMoteurImpulsions = 22000;
long delayBuzzard = 17000;
long delayMoteurDisto = 32000;
long delayPhares = 42000;

long delayBeforeLasers = 47000;
long delayEntreAttaque = 8000;

long delayBeforeRadar = 37000;
long speedRadar = 50; // En combien de temps le radar s’allume au total

long delayBeforeFeuxPos = 7000;
long delayOnFeuxPos = 3000;
long delayOffFeuxPos = 2000;

long delayBeforeFeuxNav = 12000;
long delayOnFeuxNav = 50;
long delayOffFeuxNav = 1000;

// Fonction setup

void setup() {
  Serial.begin(9600);
  pinMode(Vaisseau, OUTPUT);
  pinMode(FeuxPosition, OUTPUT);
  pinMode(FeuxNavigation, OUTPUT);
  pinMode(Phares, OUTPUT);
  pinMode(Radar, OUTPUT);
  pinMode(EvansDisto, OUTPUT);
  pinMode(CollecteurBuzzard, OUTPUT);
  pinMode(MoteurImpulsions, OUTPUT);
  pinMode(MoteurDistorsion, OUTPUT);
  pinMode(Lasers, OUTPUT);

  digitalWrite(Vaisseau, LOW);
  digitalWrite(FeuxPosition, LOW);
  digitalWrite(FeuxNavigation, LOW);
  digitalWrite(Phares, LOW);
  digitalWrite(EvansDisto, LOW);
  digitalWrite(CollecteurBuzzard, LOW);
  digitalWrite(MoteurImpulsions, LOW);
  digitalWrite(MoteurDistorsion, LOW);
  digitalWrite(Lasers, LOW);
  analogWrite(Radar, 0);

  attachInterrupt(0, Boutonpresse, RISING);

  Boutonpresse();
}

// Fonction principale

void loop(){

  // si le programme n’est pas en veille, on actualise l’état des leds
  if(!veille) {
    allumageSimple.update();
    clignotement.update();
    delaiClignotement.update();
    allumageProgressif.update();
    attaque.update();
  }

}

// Fonction appellé lorsque le bouton est appuyé

void Boutonpresse(){

  if(millis()-lastT > 500){
   
    if(veille){ // si le programme est en veille, alors on programme l’allumage des différentes leds
Serial.println(« Systeme enclenche! »);
      // on s’occupe d’abord de programmer l’allumage simple des leds qui doivent seulement s’allumer
      IDSimple[0] = allumageSimple.after(delayVaisseau, allumVaisseau);
      // on passe pour le moment les feux de positions et navigation, car on doit les faire clignoter, on le fera après
      IDSimple[1] = allumageSimple.after(delayEvansDisto, allumEvansDisto);
      IDSimple[2] = allumageSimple.after(delayBuzzard, allumBuzzard);
      IDSimple[3] = allumageSimple.after(delayMoteurImpulsions, allumImpulsions);
      IDSimple[4] = allumageSimple.after(delayMoteurDisto, allumDisto);
      IDSimple[5] = allumageSimple.after(delayPhares, allumPhares);

      // on s’occupe de l’allumage progressif du radar
      IDProgressif[0] = allumageProgressif.after(delayBeforeRadar, allumeRadar);

      // on s’occupe maintenant de declencher le clignotement des feux et des torpilles après un certain temps
      // cette fonction va appeller la fonction ‘allumeFeuxPosition’ dans 12 secondes, et c’est la fonction
      // ‘allumeFeuxPosition’ qui va faire clignoter les leds
      IDDelai[0] = delaiClignotement.after(delayBeforeFeuxPos, allumeFeuxPosition);
      IDDelai[1] = delaiClignotement.after(delayBeforeFeuxNav, allumeFeuxNavigation);

      // enfin il reste à faire clignoter les torpilles
      IDAttaque[0] = attaque.after(delayBeforeLasers, allumageAttaque);

      veille = false;
    }
    else{ // sinon on eteint toutes les leds et on stop tous les timers
    Serial.println(« Systeme desactive! »);

      // on stop d’abord les timers à l’aide des IDs :
      for(int i = 0; i < 7; i++){
        allumageSimple.stop(IDSimple);
      }
      for(int i = 0; i < 2; i++){

        delaiClignotement.stop(IDDelai);
        allumageProgressif.stop(IDProgressif);
      }
      for(int i = 0; i < 4; i ++){
        clignotement.stop(IDClignotement);
      }
      for(int i = 0; i < 5; i++){
        attaque.stop(IDAttaque);
      }
      // puis on eteind tout :
      lumRadar = 0;
      digitalWrite(Vaisseau, LOW);
      digitalWrite(FeuxPosition, LOW);
      digitalWrite(FeuxNavigation, LOW);
      digitalWrite(Phares, LOW);
      digitalWrite(EvansDisto, LOW);
      digitalWrite(CollecteurBuzzard, LOW);
      digitalWrite(MoteurImpulsions, LOW);
      digitalWrite(MoteurDistorsion, LOW);
      digitalWrite(Lasers, LOW);
      analogWrite(Radar, 0);

      veille = true;

    }
    lastT=millis();
  }
}

void allumeFeuxPosition(){ // cette fonction fait clignoter les feux de position indefiniment quand on l’appelle
Serial.println(« Allumage des feux de position »);
  if(delayOffFeuxPos > delayOnFeuxPos)
    IDClignotement[0] = clignotement.every(delayOffFeuxPos, pulseFeuxPos);
  else {
    IDClignotement[0] = clignotement.every(delayOnFeuxPos, pulseFeuxPos);
    digitalWrite(FeuxPosition, HIGH);
  }
}

void allumeFeuxNavigation(){ // cette fonction fait clignoter les feux de navigation indefiniment quand on l’appelle
Serial.println(« Allumage des feux de navigation »);
  if(delayOffFeuxNav > delayOnFeuxNav)
    IDClignotement[1] = clignotement.every(delayOffFeuxNav, pulseFeuxNav);
  else {
    IDClignotement[1] = clignotement.every(delayOnFeuxNav, pulseFeuxNav);
    digitalWrite(FeuxNavigation, HIGH);
  }
}

void allumeRadar(){ // cette fonction declenche l’allumage prograssif du radar quand on l’appelle
Serial.println(« Allumage du radar »);
  IDProgressif[1] = allumageProgressif.every(speedRadar, augmenteLumRadar, 255); // toutes les 15millisecondes, on augmente la luminausité du radar, et ce 255 fois (car 255 est le max de luminausité)
}

void augmenteLumRadar() { // cette fonction augmente la luminausité du radar de 1 à chaque fois qu’on l’appelle
  lumRadar ++;
  analogWrite(Radar, lumRadar);
}

void allumageAttaque() { // cette fonction va provoquer une attaque toute les 8 secondes avec les lasers
  Serial.println(« Allumage des Lasers »);
  IDAttaque[1] = attaque.every(delayEntreAttaque, debutattaque);
}

void debutattaque() { // cette fonction fait clignoter les lasers
  IDAttaque[2] = attaque.oscillate(Lasers, 50, LOW, 10);
}

void allumVaisseau() {
  Serial.println(« Allumage du Vaisseau »);
  digitalWrite(Vaisseau, HIGH);
}

void allumEvansDisto() {
  Serial.println(« Allumage des Evans Disto »);
  digitalWrite(EvansDisto, HIGH);
}

void allumBuzzard() {
  Serial.println(« Allumage du collecteur de buzzard »);
  digitalWrite(CollecteurBuzzard, HIGH);
}

void allumImpulsions() {
  Serial.println(« Allumage du moteur à impulsion »);
  digitalWrite(MoteurImpulsions, HIGH);
}

void allumDisto() {
  Serial.println(« Allumage du moteur à distorsion »);
  digitalWrite(MoteurDistorsion, HIGH);
}

void allumPhares() {
  Serial.println(« Allumage des phares »);
  digitalWrite(Phares, HIGH);
}

void pulseFeuxPos(){
  if(delayOffFeuxPos > delayOnFeuxPos)
    IDClignotement[2] = clignotement.pulse(FeuxPosition, delayOnFeuxPos, LOW);
  else IDClignotement[2] = clignotement.pulse(FeuxPosition, delayOffFeuxPos, HIGH);

}
void pulseFeuxNav(){
  if(delayOffFeuxNav > delayOnFeuxNav)
    IDClignotement[3] = clignotement.pulse(FeuxNavigation, delayOnFeuxNav, LOW);
  else IDClignotement[3] = clignotement.pulse(FeuxNavigation, delayOffFeuxNav, HIGH);
}

[/code]