Go Down

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

lesept

#75
May 28, 2018, 11:03 pm Last Edit: May 28, 2018, 11:18 pm by lesept
Les 3 boutons sont branchés entre leur broche d'un côté et le GND de l'autre ?

Tu as bien laissé input_pullup dans chaque déclaration ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

#76
May 28, 2018, 11:08 pm Last Edit: May 28, 2018, 11:08 pm by lesept
Peux-tu mettre dans les trois fonctions à la fin un Serial. println avec le nom de la fonction ? Ensuite joue avec les boutons pour voir s'il va bien dans les bonnes fonctions selon le bouton appuyé.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

Hello
Voici une version qui marche chez moi : à toi de tester de ton côté.

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
  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 = 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()
{
  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)
    {
      MiseAJour();
      TimeToArray();
      dernierTempsChrono += 1000;
      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();
}
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Bonjour

je teste la version ce soir en rentrant.

si je peux encore un peu abuser de tes connaissances il ne reste plus que a faire un dernier module pour compter les points sur deux chiffres (de 0 à 99) avec un BP pour incrémenter un BP pour décrémenter et un BP pour la remise a zéro.

lesept

Deux scores sur deux chiffres séparés par ":" ou bien un seul score sur deux chiffres ?
Deux scores impliquent 6 boutons
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Un seul score sur deux chiffres (car je doublerais le module pour une question de maintenance)

lesept

#81
May 29, 2018, 08:41 am Last Edit: May 29, 2018, 09:25 am by lesept
ça ne devrait pas être très compliqué, on a déjà tout !
Voici une première tentative :

Code: [Select]
#include "FastLED.h"
#define NUM_LEDS 55 // 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_PLUS  7 // Pin bouton Incrémentation
#define BP_MOINS 8 // Pin bouton Décrémentation
#define BP_RESET 9 // Pin bouton Reset

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
};
int ledColor = 0x0000FF; // Color used (in hex)
int Score = 0;

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
  BrightnessCheck();
  pinMode(BP_PLUS,  INPUT_PULLUP); // bouton PLUS
  pinMode(BP_MOINS, INPUT_PULLUP); // bouton MOINS
  pinMode(BP_RESET, INPUT_PULLUP); // bouton RESET
  AfficheScore();
  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 AfficheScore() {
  int cursor = 0;
  int Now = Score;
  for (int i = 1; i < 3; i++) {
    int digit = Now % 10; // get last digit in time
    cursor = (i - 1) * 28;
    Serial.print (" "); Serial.print(digit);
    for (int k = 0; k < 28; k++) {
      leds[cursor + k] = ledColor * digits[digit][k];
    }
    Now /= 10;
  }
  Serial.println();
}

void loop()
{
  bool EtatPlus = digitalRead(BP_PLUS);
  delay(50);
  bool EtatMoins = digitalRead(BP_MOINS);
  delay(50);
  bool EtatReset = digitalRead(BP_RESET);
  delay(50);
  Serial.print ("Etat des boutons : Plus = ");
  Serial.print (EtatPlus);
  Serial.print (" Moins = ");
  Serial.print (EtatMoins);
  Serial.print (" Reset = ");
  Serial.println (EtatReset);

  if (!EtatPlus) {
    Score++;
    AfficheScore();
  }
  else if (!EtatMoins) {
    Score--;
    AfficheScore();
  }
  else if (!EtatReset) {
    Score = 0;
    AfficheScore();
  }
}
S'il y a des rebonds, tu peux changer les delay(50) en delay(100) voire 150.
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

je teste tout cela ce soir et je ferais un retour.

ASSM

Bonsoir lesept

en ce qui concerne le chrono le bouton start fonctionne le bouton stop aussi mais le bouton reset remet bien le chrono a '00:00' que lorsque j'appuie de nouveau sur le bouton start.

pour le compteur de score il affiche bien 'oo' mais il ne s'incrémente pas ni se décrémente pas.

ASSM

Petite précision pour le compteur de score dans la console tout fonctionne correctement.

c'est a dire si j'appuie sur le BP+ il affiche de '00' a '01' si j'appuie sur le BP- il repasse a '00' si j'appuie deux fois sur le BP+ il passe à '02' et si j'appuie sur le bouton reset il passe a '00'

lesept

#85
May 29, 2018, 06:03 pm Last Edit: May 29, 2018, 06:07 pm by lesept
en ce qui concerne le chrono le bouton start fonctionne le bouton stop aussi mais le bouton reset remet bien le chrono a '00:00' que lorsque j'appuie de nouveau sur le bouton start.
Mais il indique bien 0 0 0 0 sur la console ?
Essaye de rajouter à la fin de la fonction ResetChrono
Code: [Select]
FastLED.show();

Au passage, on peut gagner un peu de précision en déplaçant la ligne
Code: [Select]
dernierTempsChrono += 1000;juste avant l'appel de la fonction MiseAJour()
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

Petite précision pour le compteur de score dans la console tout fonctionne correctement.

c'est a dire si j'appuie sur le BP+ il affiche de '00' a '01' si j'appuie sur le BP- il repasse a '00' si j'appuie deux fois sur le BP+ il passe à '02' et si j'appuie sur le bouton reset il passe a '00'
Ben oui, j'ai oublié de faire l'affichage des LEDs. Je vieillis...

Essaye de rajouter à la fin de la fonction AfficheScore
Code: [Select]
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

lesept

pour le compteur de points c'est ok sa fonctionne nickel

et pour le chronomètre c'était la même chose.

Code: [Select]

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


je te remercie énormément pour ta précieuse aide.

il me reste plus a finaliser tout cela et je mettrai une photo du résultat final

lesept

Plusieurs photos j'espère :) !!
Tu en feras combien au final ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ASSM

Je vais faire un seul panneaux d'affichage et je mettrais plusieurs photos avec un descriptif complet du projet et bien sur les codes de chaque module…..
je te remercie encore….
il me reste encore une quinzaine de jours de travail dessus pour que tout sois complètement fini….

Go Up