Go Down

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

ASSM

Pour les défilement c'est normal que se soit un peu lent car il y a aussi des personnes âgées qui vont lire le message.
Et le message passe bien en boucle tant qu'il n'y a pas de nouveau message envoyé.

lesept

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

J4l13n

Bonjour ASSM

Pourrais tu poster ton code ?

Ton projet m'intérresse pour une association :)

@+
while(success!=found){
   try++;
   if(fail){
        tryAgain();
}}

J4l13n

#348
Nov 30, 2018, 04:18 pm Last Edit: Nov 30, 2018, 04:19 pm by J4l13n
Re

Le code fonctionnel :


Code: [Select]

#include "FastLED.h"
#define NUM_LEDS 114 // Number of LED controls (remember I have 3 leds / controler
#define LED_TYPE WS2812B
#define COLOR_ORDER RGB
#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] = {
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //0
  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0}, //2
  {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //3
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}, //4
  {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //6
  {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}, //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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, //9 | 2D Array for numbers on 7 segment
};
bool Dot = true;  //Dot state
int ledColor = CRGB::DarkGreen; // 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<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
  LEDS.setBrightness(255); // Set initial brightness
  BrightnessCheck();
  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 = 255; // 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 = 3; i >= 0; i--) {
    int digit = Now % 10; // get last digit in time
    cursor = i * 28;
    if (i > 1) 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()
{
  bool EtatStart = digitalRead(BP_START);
  delay(50);
  bool EtatStop = digitalRead(BP_STOP);
  delay(50);
  bool EtatReset = digitalRead(BP_RESET);
  delay(50);
  //  Serial.print ("Etat des boutons : Start = ");
  //  Serial.print (EtatStart );
  //  Serial.print (" Stop = ");
  //  Serial.print (EtatStop );
  //  Serial.print (" Reset = ");
  //  Serial.println (EtatReset );

  if (!EtatStart)  StartChrono ();
  else if (!EtatStop)  StopChrono ();
  else if (!EtatReset) ResetChrono ();
  HeureMax = 4500;
  if (digitalRead(INTER)) HeureMax = 1500;
}

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

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

void StopChrono () {
  EtatChrono = false;
}

void ResetChrono () {
  EtatChrono = false;
  Heure = 0;
  TimeToArray();
  FastLED.show();
}



@+
while(success!=found){
   try++;
   if(fail){
        tryAgain();
}}

Go Up