Go Down

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

lesept

Ça me semble être une usine à gaz pour pas grand chose. Il utilise la bibli TaskScheduler qui simule du multitasking : je ne la connais pas, donc difficile pour moi d'aider ici.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Mince alors

je me demande comment je vais pouvoir réellement faire ce programme pour pouvoir finir ce panneau d'affichage.

je bloque énormément.

ASSM

Bonjour

Lesept si tu pouvais m'expliquer un peu plus dans le détail par rapport au post 26 comment je dois faire.

En espérant avoir été assez claire dans mes descriptions.

lesept

Voici un début :

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
}

// 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;
}

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;
}
Ça compile chez moi, mais est-ce que ça marche ? Je te laisse voir...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Merci lesept....

j'essaye ce soir ou demain matin en réel et je ferais un retour...

ASSM

Bonsoir

lesept J'ai essayé le code mais rien ne se passe…..

il n'y a même pas une led qui s'allume.

lesept

#36
May 25, 2018, 07:31 pm Last Edit: May 25, 2018, 07:38 pm by lesept
Le précédent fonctionnait correctement ?
Je l'ai fait à tout vitesse : peux-tu décommenter tous les Serial.print et Serial.println et me dire ce qu'il affiche sur la console ?

Ajoute
Code: [Select]
Serial.print(" Mise a jour : heure = ");
Serial.println(Heure);

à la fin de la fonction MiseAJour.

Au passage, cette ligne est inutile :
Code: [Select]
#include <DS3232RTC.h>
Les deux suivantes aussi je pense...

Tu as bien branché les boutons et les LEDs selon ces définitions ?
Code: [Select]
#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
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

le programme pour l'horloge fonctionne parfaitement.

J'ai branche les leds au pin 6 de la carte en insérant une resistance de 470 ohms
le bouton start d'un coté au pin 7 de la carte et de l'autre au gnd(comme pour l'horloge)


Comment faire pour decommenter tout les serial print?

lesept

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 enlevé les // devant tout les serialprint

et ajouter le code comme cela

Code: [Select]

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



mais après je fait quoi ?

lesept

Tu l'exécute et tu me dis ce qu'affiche 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).

ASSM

J'ai televersé sur la carte et a la fin j'ai avrdude done thank you

lesept

Pour afficher la console, il y a un bouton en haut à droite de la fenêtre, je ne sais plus à quoi il ressemble. Cherche sur internet si besoin, la je ne peux pas, je suis sur mon téléphone donc assez limité.
Ça ouvre donc une nouvelle fenêtre qui va afficher du texte, c'est ce texte qui m'intéresse...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

En fin du setup, tu peux ajouter:
Code: [Select]
      TimeToArray();
     FastLED.show();
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

j'ai essayé de mettre ce code pour vérifier la console et j'ai bien le mot "bonjour" qui s'affiche dans la console

void setup()
{
  Serial.begin(9600);
  Serial.print("Bonjour !");
}

void loop()
{
  // Vide, rien à répéter.
}

avec le programme du chronometre rien ne s'affiche dans la console.

Go Up