Go Down

Topic: Horloge Géante (Read 16430 times) previous topic - next topic

ASSM

Voici se que la console affiche :

Digit 4 is : 0 0000111111111111111111111111
Digit 3 is : 0 0000111111111111111111111111
Digit 2 is : 0 000011111111111111Digit 4 is : 0 0000111111111111111111111111
Digit 3 is : 0 0000111111111111111111111111
Digit 2 is : 0 000011111111111111Digit 4 is : 0 0000111111111111111111111111
Digit 3 is : 0 0000111111111111111111111111

Ainsi de suite en boucle

lesept

#46
May 26, 2018, 12:56 pm Last Edit: May 26, 2018, 01:09 pm by lesept
Il n'affiche pas Mise a jour : heure = xxxx ?
Ces textes s'affichent bien toutes les secondes, pas en continu ?

Au passage, à la fin de la fonction StartChrono, il faut ajouter
Code: [Select]
dernierTempsChrono = millis();

Après cette modif, peux-tu poster le code tel qu'il est et ce qu'affiche la console ? Merci
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

si je rajoute le code

dernierTempsChrono = millis();

sa me met que se n'est pas declaré dans le scope

ASSM

le code actuel est

Code: [Select]

#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include "FastLED.h"
#define NUM_LEDS 114 // Number of LED controls (remember I have 3 leds / controler
#define COLOR_ORDER BRG  // Define color order for your strip
#define DATA_PIN 6  // Data pin for led comunication
#define BP_START 7 // Pin bouton Start
#define BP_STOP   8 // Pin bouton Stop
#define BP_RESET 9 // Pin bouton Reset
#define INTER 10   // Pin inter 15 / 45

CRGB leds[NUM_LEDS]; // Define LEDs strip
byte digits[10][28] = {
  {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //0
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, //1
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //2
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //3
  {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1}, //4
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //5
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //6
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //7
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //8
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //9 | 2D Array for numbers on 7 segment
};
bool Dot = true;  //Dot state
int ledColor = 0x0000FF; // Color used (in hex)
int Heure = 0;
bool EtatChrono = false;  // Chrono arrêté
int HeureMax = 4500;

void setup() {
  Serial.begin(9600);
  //  Wire.begin();
  LEDS.addLeds<WS2811, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
  LEDS.setBrightness(255); // Set initial brightness
  pinMode(BP_START, INPUT_PULLUP); // bouton START
  pinMode(BP_STOP, INPUT_PULLUP); // bouton STOP
  pinMode(BP_RESET, INPUT_PULLUP); // bouton RESET
  pinMode(INTER, INPUT_PULLUP); // inter 15 / 45
  TimeToArray();
  FastLED.show();

}

// Check Light sensor and set brightness accordingly
void BrightnessCheck() {
  const byte sensorPin = 3; // light sensor pin
  const byte brightnessLow = 5; // Low brightness value
  const byte brightnessHigh = 255; // High brightness value
  int sensorValue = digitalRead(sensorPin); // Read sensor
  if (sensorValue == 0) {
    LEDS.setBrightness(brightnessHigh);
  }
  else {
    LEDS.setBrightness(brightnessLow);
  }
}

// Convert time to array needet for display
void TimeToArray() {
  int cursor = 0;
  int Secondes = Heure % 100;
  int Now = Heure;

  Dot = true;
  if (Secondes % 2 == 1) Dot = false;
  if (Dot) {
    leds[56] = ledColor;
    leds[57] = ledColor;
  }
  else {
    leds[56] = 0x000000;
    leds[57] = 0x000000;
  }

  for (int i = 1; i <= 4; i++) {
    int digit = Now % 10; // get last digit in time
    if (i == 1) {
            Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 0;
      for (int k = 0; k <= 27; k++) {
                Serial.print(digits[digit][k]);
        leds[cursor + k] = ledColor * digits[digit][k];
        cursor ++;
      }
            Serial.println();
    }
    else if (i == 2) {
            Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 28;
      for (int k = 0; k <= 27; k++) {
                Serial.print(digits[digit][k]);
        leds[cursor + k] = ledColor * digits[digit][k];
        cursor ++;
      }
            Serial.println();
    }
    else if (i == 3) {
            Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 58;
      for (int k = 0; k <= 27; k++) {
                Serial.print(digits[digit][k]);
        leds[cursor + k] = ledColor * digits[digit][k];
        cursor ++;
      }
            Serial.println();
    }
    else if (i == 4) {
            Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 86;
      for (int k = 0; k <= 27; k++) {
                Serial.print(digits[digit][k]);
        leds[cursor + k] = ledColor * digits[digit][k];
        cursor ++;
      }
            Serial.println();
    }
    Now /= 10;
  }
}

void MiseAJour()
{
  Heure += 1;
  if (Heure % 100 == 60) Heure = Heure + 40;
  Serial.print(" Mise a jour : heure = ");
  Serial.println(Heure);
}

void LectureBoutons()
{
  int EtatBPStart = digitalRead(BP_START);
  int EtatBPStop = digitalRead(BP_STOP);
  int EtatBPReset = digitalRead(BP_RESET);
  int EtatInter = digitalRead(INTER);
  if (EtatBPStart) StartChrono ();
  if (EtatBPStop) StopChrono ();
  if (EtatBPReset) ResetChrono ();
  HeureMax = 4500;
  if (EtatInter) HeureMax = 1500;
}

void loop()  // Main loop
{
  LectureBoutons();
  if (EtatChrono)
  {
    unsigned long dernierTempsChrono;
    if (millis() - dernierTempsChrono >= 1000)
    {
      MiseAJour();
      TimeToArray();
      dernierTempsChrono += 1000;
    }
  }
  FastLED.show(); // Display leds array
  if (Heure >= HeureMax) EtatChrono = false;
}

void StartChrono () {
  EtatChrono = true;
}

void StopChrono () {
  EtatChrono = false;
}

void ResetChrono () {
  EtatChrono = false;
  Heure = 0;
}

lesept

#49
May 26, 2018, 01:42 pm Last Edit: May 26, 2018, 01:45 pm by lesept
Merci
pour que ça compile, il faut déplacer le ligne
Code: [Select]
   unsigned long dernierTempsChrono;
dans l'entête, après int HeureMax par exemple

Au passage, commente les lignes
Code: [Select]
                Serial.print(digits[digit][k]);c'est à dire que tu mets // en début de ces lignes
ça évitera trop de texte qui ne sert pas
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

le code compile et dans la console sur une ligne sa ecrit:

Dig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDigitDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮tDig⸮T⸮tDigitDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮tDig⸮T⸮tDigitDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮tDig⸮T⸮tDigitDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮tDig⸮T⸮tDigitDig⸮T⸮tDig⸮T⸮tDigitDig⸮T⸮tDig⸮T⸮tDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDigitDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮tDig⸮T⸮tDigitDigitDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮tDig⸮T⸮⸮⸮⸮⸮⸮⸮⸮⸮

Ainsi de suite

lesept

Tu as bien sélectionné 9600 en bas de la console ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

#52
May 27, 2018, 01:09 am Last Edit: May 27, 2018, 10:10 am by lesept
J"ai fini par avancer : ça marche chez moi sauf pour les boutons que je n'ai pas connectés. Donc s'il y a encore un problème, ça vient des boutons. Notamment, je n'ai pas géré les rebonds. Si on veut être précis, il ne faut pas utiliser un delay (je vais me renseigner sur e point) et faire plutôt une gestion matérielle. Là je ne suis pas très au courant, il faudra demander sur le forum.

Voici le code :
Code: [Select]
#include "FastLED.h"
#define NUM_LEDS 114 // Number of LED controls (remember I have 3 leds / controler
#define COLOR_ORDER BRG  // Define color order for your strip
#define DATA_PIN 6  // Data pin for led comunication
#define BP_START 7 // Pin bouton Start
#define BP_STOP   8 // Pin bouton Stop
#define BP_RESET 9 // Pin bouton Reset
#define INTER 10   // Pin inter 15 / 45

CRGB leds[NUM_LEDS]; // Define LEDs strip
byte digits[10][28] = {
  {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //0
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, //1
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //2
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //3
  {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1}, //4
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //5
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //6
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, //7
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //8
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //9 | 2D Array for numbers on 7 segment
};
bool Dot = true;  //Dot state
int ledColor = 0x0000FF; // Color used (in hex)
int Heure = 0;
bool EtatChrono = false;  // Chrono arrêté
int HeureMax = 4500;
unsigned long dernierTempsChrono;

void setup() {
  Serial.begin(115200);
  LEDS.addLeds<WS2811, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
  LEDS.setBrightness(255); // Set initial brightness
  pinMode(BP_START, INPUT_PULLUP); // bouton START
  pinMode(BP_STOP, INPUT_PULLUP); // bouton STOP
  pinMode(BP_RESET, INPUT_PULLUP); // bouton RESET
  pinMode(INTER, INPUT_PULLUP); // inter 15 / 45
  TimeToArray();
  FastLED.show();
  dernierTempsChrono = millis();
}

// Check Light sensor and set brightness accordingly
void BrightnessCheck() {
  const byte sensorPin = 3; // light sensor pin
  const byte brightnessLow = 5; // Low brightness value
  const byte brightnessHigh = 255; // High brightness value
  int sensorValue = digitalRead(sensorPin); // Read sensor
  if (sensorValue == 0) {
    LEDS.setBrightness(brightnessHigh);
  }
  else {
    LEDS.setBrightness(brightnessLow);
  }
}

// Convert time to array needet for display
void TimeToArray() {
  int cursor = 0;
  int Secondes = Heure % 100;
  int Now = Heure;

  Dot = true;
  if (Secondes % 2 == 1) Dot = false;
  if (Dot) {
    leds[56] = ledColor;
    leds[57] = ledColor;
  }
  else {
    leds[56] = 0x000000;
    leds[57] = 0x000000;
  }

  for (int i = 1; i < 5; i++) {
    int digit = Now % 10; // get last digit in time
    cursor = (i - 1) * 28;
    if (i > 2) cursor += 2;
    Serial.print (" "); Serial.print(digit);
    for (int k = 0; k < 28; k++) {
      leds[cursor + k] = ledColor * digits[digit][k];
    }
    Now /= 10;
  }
  Serial.println();
}

void MiseAJour()
{
  Heure += 1;
  if (Heure % 100 == 60) Heure = Heure + 40;
  Serial.print("Heure = "); Serial.print(Heure); Serial.print (" :");
}

void LectureBoutons()
{
  if (digitalRead(BP_START)) StartChrono ();
  if (digitalRead(BP_STOP))  StopChrono ();
  if (digitalRead(BP_RESET)) ResetChrono ();
  HeureMax = 4500;
  if (digitalRead(INTER)) HeureMax = 1500;
}

void loop()  // Main loop
{
  LectureBoutons();
  if (EtatChrono)
  {
    if (millis() - dernierTempsChrono >= 1000)
    {
      MiseAJour();
      TimeToArray();
      dernierTempsChrono += 1000;
      FastLED.show(); // Display leds array
    }
  }
  if (Heure >= HeureMax) EtatChrono = false;
}

void StartChrono () {
  EtatChrono = true;
  dernierTempsChrono = millis();
}

void StopChrono () {
  EtatChrono = false;
}

void ResetChrono () {
  EtatChrono = false;
  Heure = 0;
}


Il faut que tu règles la console à 115200 (tout en bas, liste déroulante). Le code attend que tu appuies sur le bouton Start pour lancer le chrono. Bouton stop pour l'arrêter et start pour le relancer. Reset remet à 0 et attend start pour lancer le chrono.
Enfin, l'interrupteur permet de choisir entre 15 et 45 minutes.

Dis-moi si ça marche ...
A+
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Bonsoir lesept

je te ferais un retour demain soir ou mardi.

Merci

ASSM

Bonsoir lesept

j'ai fait l'essais pour le chronomètre il affiche bien'00:00'

mais impossible de le lancer ?

j'ai verifié a plusieurs fois mon câblage et se n'est pas un problème d'affichage.

lesept

#55
May 28, 2018, 07:26 pm Last Edit: May 28, 2018, 07:30 pm by lesept
Je n 'ai pas testé les boutons, c'est vrai. On va mettre des serial dans la fonction de lecture des boutons : tu peux tester ça ?

Code: [Select]
void LectureBoutons()
{
  int EtatStart = digitalRead(BP_START);
  int EtatStop = digitalRead(BP_STOP);
  int EtatReset = digitalRead(BP_RESET);
  Serial.print ("Etat des boutons : Start = ");
  Serial.print (EtatStart);
  Serial.print (" Stop = ");
  Serial.print (EtatStop);
  Serial.print (" Reset = ");
  Serial.println (EtatReset);
  if (EtatStart)  StartChrono ();
  if (EtatStop)  StopChrono ();
  if (EtatReset) ResetChrono ();
  HeureMax = 4500;
  if (digitalRead(INTER)) HeureMax = 1500;
}

Et me dire ce qui s'affiche sur la console (115200 bauds). Merci

EDIT : au fait, si tu veux voir le chrono fonctionner (malgré les boutons), tu peux mettre (temporairement)
Code: [Select]
bool EtatChrono = true;  // <-- true au lieu de false
Il devrait marcher (je croise les doigts, je n'ai plus de corbeaux...:) )
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

#56
May 28, 2018, 08:05 pm Last Edit: May 28, 2018, 08:08 pm by ASSM
Je viens de faire le test et voici l'affichage dans la console:

Etat des boutons : Start = 1 Stop = 1 Reset = 1

le code tourne en boucle

lorsque j'appuie sur l'un des bouton l'état passe a 0 (exemple :Etat des boutons : Start = 0 Stop = 1 Reset = 1)

(j'avais déjà mis la valeur a true pour 'bool EtatChrono = true;' sans succes)

lesept

#57
May 28, 2018, 08:09 pm Last Edit: May 28, 2018, 08:10 pm by lesept
Ok, lis ça et en particulier la différence entre pullup et pulldown. J'avais une chance sur 2...

Du coup, il faut changer PULLUP en PULLDOWN dans ces lignes :
Code: [Select]
 pinMode(BP_START, INPUT_PULLUP); // bouton START
  pinMode(BP_STOP, INPUT_PULLUP); // bouton STOP
  pinMode(BP_RESET, INPUT_PULLUP); // bouton RESET
  pinMode(INTER, INPUT_PULLUP); // inter 15 / 45


Sinon ceci :
Code: [Select]
  if (!EtatStart)  StartChrono ();
  if (!EtatStop)  StopChrono ();
  if (!EtatReset) ResetChrono ();
"!" après les if.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

j'ai mis le '!' après les if

le chrono se lance tout seul je peux l'arreter si après j'appuie sur start le chrono se relance mais en affichant le temps qui c'est réellement ecoulé (c'est a dire si je l'arrete a '00:20' et que j'attend 20 secondes et que j'appuie sur start il repart a '00:40')

la remise a zero du chrono ne fonctionne pas

ASSM

si je met PULLDOWN a la place de PULLUP il me met que se n'est pas déclaré dans le scope.

Go Up