[Résolu] horloge

bonjour voila j'ai fain une horloge avec un ring wall clock 60 ws2812 j'ai trouver un code sa marche (et pour une fois les librairie aussi XD)

voila le code

#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_NeoPixel.h>

#define PIN 6
#define PIXEL 60


Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);

RTC_DS1307 RTC; // Establish clock object
DateTime Clock; // Holds current clock time

byte hourval, minuteval, secondval;


void setup() {
 Serial.begin(9600);
  Wire.begin();          // Begin I2C
  RTC.begin();   // begin clock
  
    if (! RTC.isrunning()) {
//  Serial.println("RTC is NOT running!");
  // following line sets the RTC to the date & time this sketch was compiled

  }
  
//  RTC.adjust(DateTime(__DATE__, __TIME__));
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  strip.setBrightness(255);

}


void loop() {

   
    Clock = RTC.now(); // get the RTC time
    
    secondval = Clock.second();  // get seconds
    minuteval = Clock.minute();  // get minutes
    hourval = Clock.hour();   // get hours


    if(hourval > 11) hourval -= 12; // This clock is 12 hour, if 13-23, convert to 0-11
    hourval = (hourval*60 + minuteval) / 12;   
   
    strip.setPixelColor(hourval, 0x008080);strip.setPixelColor(hourval-1, 0x004040);strip.setPixelColor(hourval+1, 0x004040);
//    strip.setPixelColor(hourval-2, 0x001010);strip.setPixelColor(hourval+2, 0x001010);
    strip.setPixelColor(minuteval, 0x800080);
//    strip.setPixelColor(minuteval-1, 0x200020);strip.setPixelColor(minuteval+1, 0x200020);
    strip.setPixelColor(secondval, 0x808000);//strip.setPixelColor(secondval-1, 0x002F00);strip.setPixelColor(secondval+1, 0x002F00);
    strip.show();
    
    strip.setPixelColor(hourval, 0x000000);strip.setPixelColor(hourval-1, 0x000000);strip.setPixelColor(hourval+1, 0x000000);
    strip.setPixelColor(hourval-2, 0x000000);strip.setPixelColor(hourval+2, 0x000000); 
    strip.setPixelColor(minuteval, 0x000000);strip.setPixelColor(minuteval-1, 0x000000);strip.setPixelColor(minuteval+1, 0x000000);
    strip.setPixelColor(secondval, 0x000000);//strip.setPixelColor(secondval-1, 0x000000);strip.setPixelColor(secondval+1, 0x000000);
  
  delay(25);


/*
   Serial.print(hourval, DEC);
   Serial.print(':');
  Serial.print(minuteval, DEC);
   Serial.print(':');
   Serial.println(secondval, DEC);
*/



}

je veux juste savoir comment sa fonctionne quesqui fait quoi et comment on change de couleur

Tu définis ton anneau de leds ici

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);

NEO_GRB indique que les couleurs sont codées dans l'ordre Green Red Blue

Lorsque tu fais par exemple

strip.setPixelColor(hourval, 0x008080);

Tu allumes la led numéro hourval à la couleur 0x008080. Ceci vaut dans ton cas

  • Green = 00
  • Red = 80
  • Blue = 80
    c'est probablement un violet.

Si tu veux choisir toi même les couleurs, cherche un site avec un 'color picker'

ok et pour la partie de

 strip.setPixelColor(hourval, 0x008080);strip.setPixelColor(hourval-1, 0x004040);strip.setPixelColor(hourval+1, 0x004040);
//    strip.setPixelColor(hourval-2, 0x001010);strip.setPixelColor(hourval+2, 0x001010);
    strip.setPixelColor(minuteval, 0x800080);
//    strip.setPixelColor(minuteval-1, 0x200020);strip.setPixelColor(minuteval+1, 0x200020);
    strip.setPixelColor(secondval, 0x808000);//strip.setPixelColor(secondval-1, 0x002F00);strip.setPixelColor(secondval+1, 0x002F00);
    strip.show();
   
    strip.setPixelColor(hourval, 0x000000);strip.setPixelColor(hourval-1, 0x000000);strip.setPixelColor(hourval+1, 0x000000);
    strip.setPixelColor(hourval-2, 0x000000);strip.setPixelColor(hourval+2, 0x000000);
    strip.setPixelColor(minuteval, 0x000000);strip.setPixelColor(minuteval-1, 0x000000);strip.setPixelColor(minuteval+1, 0x000000);
    strip.setPixelColor(secondval, 0x000000);//strip.setPixelColor(secondval-1, 0x000000);strip.setPixelColor(secondval+1, 0x000000);

si j’enlève les // sur sa (peux pas tester mon truc ne marche plusu il a u un accident collatérale :cry: :sob:

//    strip.setPixelColor(hourval-2, 0x001010);strip.setPixelColor(hourval+2, 0x001010);
    strip.setPixelColor(minuteval, 0x800080);
//    strip.setPixelColor(minuteval-1, 0x200020);strip.setPixelColor(minuteval+1, 0x200020);

et pour sa je suis pas sur met d’après ce que jai compris sa met juste en noir

strip.setPixelColor(hourval, 0x000000);strip.setPixelColor(hourval-1, 0x000000);strip.setPixelColor(hourval+1, 0x000000);
    strip.setPixelColor(hourval-2, 0x000000);strip.setPixelColor(hourval+2, 0x000000);
    strip.setPixelColor(minuteval, 0x000000);strip.setPixelColor(minuteval-1, 0x000000);strip.setPixelColor(minuteval+1, 0x000000);
    strip.setPixelColor(secondval, 0x000000);//strip.setPixelColor(secondval-1, 0x000000);strip.setPixelColor(secondval+1, 0x000000);

Oui tu fais une horloge un peu comme j'avais fait une 'horloge infinie' (voir section projets terminés).

hourval est le numéro de la led pour les heures. Tu allumes cette led d'une couleur, et les deux leds autour (hourval - 1 et +1) d'une autre couleur, un peu plus pâle (4040 au lieu de 8080).

Même chose avec les minutes, led numéro minuteval. Tu as commenté les leds -1 et +1 donc juste une led pour les minutes.

Puis viennent les secondes, aussi -1 et +1.

strip.show(); sert à effectivement allumer les leds.

Ensuite tu les éteins en mettant des zéro.

Il risque juste d'y avoir un problème vers minuit, car hourval vaut 0 et tu ne peux pas allumer la led numéro -1. Il faut ajouter un test pour gérer ce cas particulier.

ok merci j'ai regarder les projet que tu a fait je pourrais jamais atteindre ton niveaux mes tu a gagner un abonner ^^

je revins ici comment on fait pour que sa sois pas sur 60 led mes 15 30 ou45 led (jai changer le #define led 60 avec c'st valeur sa marche toujour mes sa change pas le nombre de led

pour que sa sois pas sur un cercle complet mes sur 1/4 1/2 ou 3/4 du cercle

Il faut aussi changer le calcul des numéros des leds à allumer. Comme ça, sans étudier le problème, je dirais que tu dois diviser hourval, minuteval et secondval par 4 pour passer sur 15 leds

j'ai fais sa sa allaire de marcher merci

strip.setPixelColor(hourval/4, 0x008080);strip.setPixelColor(hourval-1, 0x004040);strip.setPixelColor(hourval+1, 0x004040);
//    strip.setPixelColor(hourval-2, 0x001010);strip.setPixelColor(hourval+2, 0x001010);
    strip.setPixelColor(minuteval/4, 0x800080);
//    strip.setPixelColor(minuteval-1, 0x200020);strip.setPixelColor(minuteval+1, 0x200020);
    strip.setPixelColor(secondval/4, 0x808000);//strip.setPixelColor(secondval-1, 0x002F00);strip.setPixelColor(secondval+1, 0x002F00);

Bonjour,

ludocraft:
j'ai fais sa sa allaire de marcher merci

????

Faut diviser partout:

strip.setPixelColor(hourval / 4, 0x008080);
strip.setPixelColor(hourval/4 - 1, 0x004040);
strip.setPixelColor(hourval/4 + 1, 0x004040);

Mais sur 15 leds, je doute de l'intérêt d'allumer plusieurs leds pour l'heure

de retoure ici juste pour une question

strip.setPixelColor(hourval, 0x008080);strip.setPixelColor(hourval-1, 0x004040);strip.setPixelColor(hourval+1, 0x004040);

et t'il possible de remplacer par une variable les truc des couleur

strip.setPixelColor(hourval, couleur1 );strip.setPixelColor(hourval-1, couleur2);strip.setPixelColor(hourva couleur 3);

Oui :slight_smile:

uint32_t Gris1 = 0x008080;
uint32_t Gris2 = 0x004040;
strip.setPixelColor(hourval  , Gris1);
strip.setPixelColor(hourval-1, Gris2);
strip.setPixelColor(hourval+1, Gris2);

ok merci ^^