Woordklok met 79 neoleds

Hallo forumleden
ik ben Hans 65 jaar en sinds kort begonnen met arduino ,ben van huis uit
een mechanische jongen dus elektronica(arduino) is voor mij geen gesneden koek.
Ben in het bezit van 3d printer en lasersnijder kan daar goed mee overweg
de 3 d klok is klaar maar heb veel moeite met het progammeren van de uno.
De klok bestaat uit totaal 79 leds waarvan veel in combinatie worden gebruikt wil ook gebruik maken van de real time clock DS3231
Heeft misschien iemand voor mij een ino file die ik evt. kan aanpassen of kan mij iemand
op weg helpen.
alvast bedankt gr.Hans

Hansi! 65 is hier aan de jonge kant. Welkom!

Ik heb de laatste tijd veel plezier beleefd aan het werken aan een woordklok, omdat ik hier pas vorig jaar over hoorde. Het moeilijkste voor mij was het efficiënt plaatsen van woorden, om duplicaten te elimineren of te vermijden.

Hier is mijn woordkloksimulatie met behulp van 256 LED's, in mijn taal. U kunt verschillende bestanden zien die de monotone code bevatten die de woordlocatie en verschillende testfuncties beschrijft. Maak het de jouwe! Als je vastzit, vraag me dan alles.

heel erg bedankt voor de reactie
in mijn geval praat ik over 21 woorden.verdeelt over 77 led.(maak geen gebruik van minuten)
Hoe dit allemaal over te zetten naar de schets die ik van jou heb gekregen is mij nog niet helemaal duidelijk.
de ledstrip die ik gebruik is de WS2812B
wil gebruik gaan maken gaan maken van de uno of de nano zijn beide daarvoor geschikt ?
hier onder de woorden en de nummering van deze

Het 0,1,2
is 3,4
tien 5,6,7,8
vijf 9,10,11,12
kwart 13.14,15,16,17
over 18,19,20,21
half 22,23,24,25
voor 26,27,28,29
acht 30,31,32,33
twee 33,34,35,36
zes 37,38,39
tien 40,41,42,43
elf 44,45,46
drie 46,47,48,49
zeven 50,51,52,53,54
negen 54,55,56,57,58
twaalf 59,60.61,62,63
vier 64,65,66,67
een 68,69,70
vijf 71,72,73,74
uur 75,76,77

Uno en Nano zijn geschikt voor 77 LED's. U wilt een even aantal WS812 om het "vierkant" te maken, tenzij u een bepaalde vorm wilt. De volgende stap is om een handtekening te maken en je woorden met één letter over één WS812 te rangschikken. Zorg ervoor dat er spaties tussen de woorden staan.

Is dit logisch? (Ik spreek geen Nederlands)

    1 2 3 4 5 6 7 8 9 0 1
 1. H E T . I S . T I E N 
 2. V I L F . . K W A R T 
 3. . O V E R . . H A L F 
 4. . . V O O R . A C T .
 5. . T W E E Z E S . . .
 6. . . T I E N . . E L F 
 7. D R I E . Z E V E N .
 8. N E G E N T W A A L F 
 9. . . . V I E R E E N .
10. V I J F U U R . . . .

alweer bedankt
hoop dat deze foto duidelijkheid geven

Uitstekend plan dat je laat zien, maar anders dan je plan. Vind je het 10x9 raster leuk? Het geeft je meer ruimte voor woorden en spaties.

    1 2 3 4 5 6 7 8 9 0 1
 1. H E T . I S . T I E N 
 2. V I L F . . K W A R T 
 3. . O V E R . . H A L F 
 4. . . V O O R . A C T .
 5. . T W E E Z E S . . .
 6. . . T I E N . . E L F 
 7. D R I E . Z E V E N .
 8. N E G E N T W A A L F 
 9. . . . V I E R E E N .
10. V I J F U U R . . . .

maybe on the next one I build first get this working :grinning:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
// Library = RTClib, version 2.1.1 by Adafruit
#include <DS3231.h> 
DS3231  rtc(4, 5);
Time  t;

#include <Adafruit_NeoPixel.h>
#include <BasicEncoder.h>

// Which pin on the Arduino is connected to the NeoPixels?
#define NeoPixelsDataPin   4

// How many NeoPixels are attached to the Arduino?
#define numberOfPixels 77
#define ROTARYPA 8
#define ROTARYPB 9
#define BUTTON 3

//BasicEncoder encoder1(2,3,HIGH,4) / pins rest low, 2 steps per detent
BasicEncoder encoder(ROTARYPA, ROTARYPB, LOW, 4);

int r, g, b;
int mmInt, hhInt;
bool getNewColor = true;
int mode = 0, lastmode = 1;
bool buttonpressed = false;
bool inSetup = false;

Adafruit_NeoPixel pixels(numberOfPixels, NeoPixelsDataPin, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  pinMode( BUTTON , INPUT_PULLUP);
  attachInterrupt (digitalPinToInterrupt(3), rotaryPress, LOW); // For rotary encoder press

  rtc.begin();
  pixels.begin(); // INITIALIZE NeoPixel strip object
  pixels.clear(); // Set all pixel colors to 'off'
  pixels.show();

}

void rotaryPress()
{
  delay(1);
  unsigned long t=0;
  
  while (!digitalRead(3)) {
    t++;
  }
  
  if (t > 10000) 
    buttonpressed = true;
}



int rc = 0;

void getNextColor(int rcp) {
  int ic = 0;
  if (mode != lastmode) {
    rc++;
    if (rc > 10) rc = 0;
  }


  if (inSetup) {
    r = 255;
    g = 0;
    b = 0;
    return;
  }

  unsigned long pallet[] = {0xFFD000, 0xB825FF, 0xFF0040, 0xFF9933, 0xFF0000, 0x00FF00, 0x0000FF, 0xFF7F00, 0x158FFF, 0xFF7F7F, 0x00FF47} ;
  union COLOUR
  {
    unsigned long RGB;
    byte bytes[3];
  };

  union COLOUR assembledColour;

  ic = rc + rcp;
  if (ic > 10) ic = ic - 11;

  assembledColour.RGB = pallet[ic];

  b = assembledColour.bytes[0] ;
  g = assembledColour.bytes[1] ;
  r = assembledColour.bytes[2] ;

}

void het() {
  getNextColor(0);
  pixels.setPixelColor(0, pixels.Color(r, g, b));
  pixels.setPixelColor(1, pixels.Color(r, g, b));
  pixels.setPixelColor(2, pixels.Color(r, g, b));
}


 
 void is 
  getNextColor(1);
  pixels.setPixelColor(3, pixels.Color(r, g, b));
  pixels.setPixelColor(4, pixels.Color(r, g, b));

  
}

void tien1() {
  getNextColor(1);
  pixels.setPixelColor(40, pixels.Color(r, g, b));
  pixels.setPixelColor(41, pixels.Color(r, g, b));
  pixels.setPixelColor(43, pixels.Color(r, g, b));
  pixels.setPixelColor(44, pixels.Color(r, g, b));
}

void kwart() {
  getNextColor(1);
  pixels.setPixelColor(14, pixels.Color(r, g, b));
  pixels.setPixelColor(14, pixels.Color(r, g, b));
  pixels.setPixelColor(15, pixels.Color(r, g, b));
  pixels.setPixelColor(16, pixels.Color(r, g, b));
  pixels.setPixelColor(17, pixels.Color(r, g, b));
}

void voor() {
  getNextColor(2);
  pixels.setPixelColor(26, pixels.Color(r, g, b));
  pixels.setPixelColor(27, pixels.Color(r, g, b));
  pixels.setPixelColor(28, pixels.Color(r, g, b));
  pixels.setPixelColor(29, pixels.Color(r, g, b));
}

void over() {
  getNextColor(2);
  pixels.setPixelColor(18, pixels.Color(r, g, b));
  pixels.setPixelColor(19, pixels.Color(r, g, b));
  pixels.setPixelColor(20, pixels.Color(r, g, b));
  pixels.setPixelColor(21, pixels.Color(r, g, b));
}

void half() {
  getNextColor(4);
  pixels.setPixelColor(22, pixels.Color(r, g, b));
  pixels.setPixelColor(23, pixels.Color(r, g, b));
  pixels.setPixelColor(24, pixels.Color(r, g, b));
  pixels.setPixelColor(25, pixels.Color(r, g, b));
}

void een() {
  getNextColor(3);
  pixels.setPixelColor(68, pixels.Color(r, g, b));
  pixels.setPixelColor(69, pixels.Color(r, g, b));
  pixels.setPixelColor(70, pixels.Color(r, g, b));
}

void vijf() {
  getNextColor(3);
  pixels.setPixelColor(71, pixels.Color(r, g, b));
  pixels.setPixelColor(72, pixels.Color(r, g, b));
  pixels.setPixelColor(73, pixels.Color(r, g, b));
  pixels.setPixelColor(74, pixels.Color(r, g, b));
}

void vier() {
  getNextColor(3);
  pixels.setPixelColor(64, pixels.Color(r, g, b));
  pixels.setPixelColor(65, pixels.Color(r, g, b));
  pixels.setPixelColor(66, pixels.Color(r, g, b));
  pixels.setPixelColor(67, pixels.Color(r, g, b));
}

void drie() {
  getNextColor(3);
  pixels.setPixelColor(46, pixels.Color(r, g, b));
  pixels.setPixelColor(47, pixels.Color(r, g, b));
  pixels.setPixelColor(48, pixels.Color(r, g, b));
  pixels.setPixelColor(49, pixels.Color(r, g, b));
}

void twee() {
  getNextColor(3);
  pixels.setPixelColor(33, pixels.Color(r, g, b));
  pixels.setPixelColor(34, pixels.Color(r, g, b));
  pixels.setPixelColor(35, pixels.Color(r, g, b));
  pixels.setPixelColor(36, pixels.Color(r, g, b));
}

void zes() {
  getNextColor(3);
  pixels.setPixelColor(37, pixels.Color(r, g, b));
  pixels.setPixelColor(38, pixels.Color(r, g, b));
  pixels.setPixelColor(39, pixels.Color(r, g, b));
}

void zeven() {
  getNextColor(3);
  pixels.setPixelColor(50, pixels.Color(r, g, b));
  pixels.setPixelColor(51, pixels.Color(r, g, b));
  pixels.setPixelColor(52, pixels.Color(r, g, b));
  pixels.setPixelColor(53, pixels.Color(r, g, b));
  pixels.setPixelColor(54, pixels.Color(r, g, b));
}

void acht() {
  getNextColor(3);
  pixels.setPixelColor(30, pixels.Color(r, g, b));
  pixels.setPixelColor(31, pixels.Color(r, g, b));
  pixels.setPixelColor(32, pixels.Color(r, g, b));
  pixels.setPixelColor(33, pixels.Color(r, g, b));
}

void negen() {
  getNextColor(3);
  pixels.setPixelColor(54, pixels.Color(r, g, b));
  pixels.setPixelColor(55, pixels.Color(r, g, b));
  pixels.setPixelColor(56, pixels.Color(r, g, b));
  pixels.setPixelColor(57, pixels.Color(r, g, b));
  pixels.setPixelColor(58, pixels.Color(r, g, b));
}

void tien() {
  getNextColor(3);
  pixels.setPixelColor(40, pixels.Color(r, g, b));
  pixels.setPixelColor(41, pixels.Color(r, g, b));
  pixels.setPixelColor(42, pixels.Color(r, g, b));
  pixels.setPixelColor(43, pixels.Color(r, g, b));

}

void elf() {
  getNextColor(3);
  pixels.setPixelColor(44, pixels.Color(r, g, b));
  pixels.setPixelColor(45, pixels.Color(r, g, b));
  pixels.setPixelColor(46, pixels.Color(r, g, b));
}

void twaalf() {
  getNextColor(3);
  pixels.setPixelColor(59, pixels.Color(r, g, b));
  pixels.setPixelColor(60, pixels.Color(r, g, b));
  pixels.setPixelColor(61, pixels.Color(r, g, b));
  pixels.setPixelColor(62, pixels.Color(r, g, b));
  pixels.setPixelColor(63, pixels.Color(r, g, b));
}

void uur() {
  getNextColor(4);
  pixels.setPixelColor(75, pixels.Color(r, g, b));
  pixels.setPixelColor(76, pixels.Color(r, g, b));
  pixels.setPixelColor(77, pixels.Color(r, g, b));
}

void outputTime() {
  t = rtc.getTime();
  mmInt = t.min;
  hhInt = t.hour;

  if (mmInt > 17 ) hhInt++ ;
  if (hhInt > 12) {
    hhInt = hhInt - 12;  // we want 12 our format, not 24
  }
  if (hhInt == 0) hhInt = 12;

  // eerst alle pixels uitzetten
  for (int x = 0; x < 38 ; x++) {
    pixels.setPixelColor(x, pixels.Color(0, 0, 0));
  }

  if (mmInt >= 57 or mmInt < 3) {  // uur aanzetten
    mode = 0;
    uur();
  }

  if (mmInt >= 3 and mmInt <= 7) {  // vijf over aanzetten
    mode = 1;
    vijf1();
    over();

  } else  if (mmInt >= 8 and mmInt <= 12) {  // tien over aanzetten
    mode = 2;
    tien1();
    over();

  } else  if (mmInt >= 13 and mmInt <= 17) {  // Kwart over aanzetten
    mode = 3;
    kwart();
    over();

  } else  if (mmInt >= 18 and mmInt <= 22) {  // tien voor half aanzetten
    mode = 4;
    tien1();
    voor();
    half();

  } else  if (mmInt >= 23 and mmInt <= 27) {  // vijf voor half aanzetten
    mode = 5;
    vijf1();
    voor();
    half();

  } else  if (mmInt >= 28 and mmInt <= 32) {  // Half aanzetten
    mode = 6;
    half();

  } else  if (mmInt >= 33 and mmInt <= 37) {  // vijf over half aanzetten
    mode = 7;
    vijf1();
    over();
    half();

  } else  if (mmInt >= 38 and mmInt <= 42) {  // tien over half aanzetten
    mode = 8;
    tien1();
    over();
    half();

  } else  if (mmInt >= 43 and mmInt <= 47) {  // kwart voor aanzetten
    mode = 9;
    kwart();
    voor();

  } else  if (mmInt >= 48 and mmInt <= 52) {  // tien voor aanzetten
    mode = 10;
    tien1();
    voor();

  } else  if (mmInt >= 53 and mmInt <= 56) {  // vijf voor aanzetten
    mode = 11;
    vijf1();
    voor();
  }

  // Nu het aantal uren weergeven.
  if (hhInt == 1)   een();
  else if (hhInt == 2) twee();
  else if (hhInt == 3) drie();
  else if (hhInt == 4) vier();
  else if (hhInt == 5) vijf();
  else if (hhInt == 6) zes();
  else if (hhInt == 7) zeven();
  else if (hhInt == 8) acht();
  else if (hhInt == 9) negen();
  else if (hhInt == 10) tien();
  else if (hhInt == 11) elf();
  else if (hhInt == 12) twaalf();

  // Het is aanzetten
  hetis();

  // alleen als de tekst anders is, de pixels updaten

  pixels.show();
  //Serial.print("mode= ");
  //Serial.println(mode);

  lastmode = mode;

  // Extra uur erweer vanaf trekken (anders gaat het mis in de setup)
  if (mmInt > 17 ) hhInt-- ;
}

int bright = 255;

void loop() {
  outputTime();

  // Set brightness met behulp van de LDR
  int a = constrain(analogRead(A1), 200, 750);
  bright = map(a, 200, 750, 15, 255);

  //Serial.print("A1 = ");
  //Serial.print(a);
  //Serial.print(" brightness = ");
  //Serial.println(bright);
  
  pixels.setBrightness(bright);
  pixels.show();

  // Handel de draaiknop encoder af
  encoder.service();
  int encoder_change = encoder.get_change();
  if (encoder_change) {
    lastmode++;
  }

  // Als de knop word ingedrukt gaan we naar de setup.
  if (buttonpressed and !inSetup) {
    Serial.println("Enter Setup");
    buttonpressed = false;
    SetTime();
  }

}

void SetTime() {
  inSetup = true;
  t = rtc.getTime();
  mmInt = t.min;
  hhInt = t.hour;
  lastmode = 99;
  outputTime();
  while (1) {
    encoder.service();
    int encoder_change = encoder.get_change();

    if (encoder_change) {
      mmInt += 5 * encoder_change;

      if (mmInt > 59) {
        mmInt = 0;
        hhInt += 1;
        if (hhInt > 12 ) hhInt = 1;
      }

      if (mmInt < 0) {
        mmInt = 55;
        hhInt -= 1;
        if (hhInt < 1 ) hhInt = 12;
      }

      Serial.println("Set Time");
      rtc.setTime(hhInt, mmInt, 00);
      t = rtc.getTime();
      mmInt = t.min;
      hhInt = t.hour;
      lastmode++;
      outputTime();
    }

    if (buttonpressed) {
      break;
    }
  }

  inSetup = false;
  buttonpressed = false;
  lastmode++;
  return;
````Gebruik code tags om code te formatteren voor het forum`

Hello, @hansuitmook - Please, "wrap" your code in "code tags". Doing this makes the code readable (keyword highlighting, brace and parenthesis alignment) as well as usable (no HTML special-character interference, copy/paste on one button)

  1. Open your post
  2. Select all of your code
  3. Cut your code
  4. Open your IDE
  5. Paste your code
  6. Format (CTRL-T)
  7. Select all of your code
  8. Cut your code
  9. Return to the forum post
  10. Click the <CODE> button
  11. Paste your code between the three backticks - they look like this -> ```
  12. Click REPLY

Where did you get this code? The real-time clock commands look like a mix of Time.h, DS1307.h and NOT DS3231.h (what is "4, 5"?).

hopefully this is better sorry everything is new to me here
got the code with copy paste and changed the number of leds and the combination of them so it might work for my clock
I'm afraid it won't work

1 Like

PerfecT!

That is fine. Did you test the RTC with a small sketch to get hour and minute? I am having trouble finding the right library for the RTC code you are using. Here is and example from the library I am using... DS3231/examples/now/now.ino at master · NorthernWidget/DS3231 · GitHub

#include <Wire.h>
#include <DS3231.h>

RTClib myRTC;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    delay(500);
    Serial.println("Nano Ready!");
}

void loop () {
    
    delay(1000);
    
    DateTime now = myRTC.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
}

hoi Hans is dit de code van Bart Venneker

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.