Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Arduino scorebord N...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Arduino scorebord Neopixel, onbegrijpelijk stukje code.

87 Berichten
2 Gebruikers
0 Reactions
5,076 Bekeken
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Ga hem even 10x lezen, maar het grove ervan begrijp ik zeker. Applaus waard vind ik! De arrays is wat ingewikkeld, maar ik denk het te begrijpen...

Je begint nu bovenaan (time minutes, colomn, seconds etc.), maar die heb ik precies andersom. Geen probleem, ik heb de verbindingsdraden nog niet gesoldeerd, dus dat is eenvoudig te wijzigen. Momenteel bezig met een inklapbare tafelsteun te ontwerpen (om te printen), geeft me genoeg tijd om je uitleg te leren! Chapeau 👍 👍 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Dank je wel 😊 

Op zich maakt de volgorde niet zo veel uit, zolang bepaalde nummers maar bij elkaar blijven.
B.v. de tijd als minuten:seconden, etc. zodat de volgorde logisch blijft. De begin posities (LED nummer) bepaal je met de defines:

#define StartLEDMinutes10        0
#define StartLEDMinutes1         TotalSegmentSize
#define StartLEDSecondsSeparator StartLEDMinutes1 + TotalSegmentSize
#define StartLEDSeconds10        StartLEDSecondsSeparator + TimeSeparatorSize
#define StartLEDSeconds1         StartLEDSeconds10 + TotalSegmentSize
                          
#define StartLEDPeriod           FailHomeStartLED + (FailDotCount*FailLEDsPerDot) 

#define StartLEDScoreHome100     FailGuestsStartLED + (FailDotCount*FailLEDsPerDot)
#define StartLEDScoreHome10      StartLEDScoreHome100 + (2*SegmentVSize)
#define StartLEDScoreHome1       StartLEDScoreHome10 + TotalSegmentSize

#define StartLEDScoreGuests100   StartLEDScoreHome1 + (FailDotCount*FailLEDsPerDot)
#define StartLEDScoreGuests10    StartLEDScoreGuests100 + (2*SegmentVSize)
#define StartLEDScoreGuests1     StartLEDScoreGuests10 + TotalSegmentSize

 

Ik reken ze hier uit, maar je kunt de berekening naar wens aanpassen natuurlijk, en er zelfs absolute nummers voor gebruiken.
Mocht de reken logica niet helemaal duidelijk zijn: vraag gerust, dan loop ik er even doorheen. 😊 


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Een paar vraagjes:

tijdens uploaden sketch geeft de ide steeds een waarschuwing over Segment B. Die staat er ook 2x in. 1x als Segment B 16, en 1x als Segment B 56. Wat is de functie van de tweede (56)?

Ik heb de code aangepast naar de volgorde van solderen, dus dacht ik dat ik het zo juist had gedaan :

#define StartLEDScoreHome100     FailGuestsStartLED + (FailDotCount*FailLEDsPerDot)
#define StartLEDScoreHome10      StartLEDScoreHome100 + (2*SegmentVSize)
#define StartLEDScoreHome1       StartLEDScoreHome10 + TotalSegmentSize

#define StartLEDScoreGuests100   StartLEDScoreHome1 + (FailDotCount*FailLEDsPerDot)
#define StartLEDScoreGuests10    StartLEDScoreGuests100 + (2*SegmentVSize)
#define StartLEDScoreGuests1     StartLEDScoreGuests10 + TotalSegmentSize  

#define StartLEDPeriod           FailHomeStartLED + (FailDotCount*FailLEDsPerDot)

#define StartLEDMinutes10        332
#define StartLEDMinutes1         TotalSegmentSize
#define StartLEDSecondsSeparator StartLEDMinutes1 + TotalSegmentSize
#define StartLEDSeconds10        StartLEDSecondsSeparator + TimeSeparatorSize
#define StartLEDSeconds1         StartLEDSeconds10 + TotalSegmentSize

 

De failhome heb ik zo aangepast :

#define FailHomeStartLED      256     // First LED for the Home fail counter
#define FailGuestsStartLED    322    // First LED for the Guests fail counter

Vervolgens gaan de leds van fail home en guest wel branden (flikkeren een beetje), maar de rest van het bord doet niets. Als ik de fail home en guest terugzet naar 2 en 10, dan gaat alles in volgorde werken, maar wel achter elkaar aan, dus het houdt op bij de score guest, zoals te zien op de foto. Wat doe ik verkeerd?


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Ik heb het nu wel werkend in WokWi, maar dat komt niet overeen met mijn aansluitvolgorde....

WokWi

Dat begrijp ik nog wel, maar waar in de code pas ik dit aan?

Dit bericht is gewijzigd 3 jaar geleden door Anoniem

   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Testen in WokWiki is misschien niet zo handig meer gezien de omvang van de hardware.

Geplaatst door: @fredrossi

Die staat er ook 2x in. 1x als Segment B 16, en 1x als Segment B 56. Wat is de functie van de tweede (56)?

Oh foutje van mijn kant ... ik denk dat de 2de de punt had moeten zijn - het 8ste segment wat we niet op die manier gebruiken 😁 

Geplaatst door: @fredrossi

Ik heb de code aangepast naar de volgorde van solderen

Ik weet niet precies in welke volgorde je het e.e.a. hebt gesoldeerd. 

Uitgaande van SetScore(12, CRGB::Blue, 2, CRGB::Blue); zouden we hier dus 12 moeten zien. <- is dat wat je gebruikt om te testen?

 

Als ik het goed lees:

100-tallen Score home volgt na de Fouls van de Guests - Foul guests + 5x2
De 10-tallen staat goed - 100-tallen + 2 vertikale segmenten.
De 1-tallen lijken me ook goed - 10-tallen + 7xSegment.

Voor de Guests score gaat het fout denk ik: 
100-tallen zou dat de 1-tallen van home score moeten zijn plus een 7xSegment (hele getal van de 1-tallen).

Dus StartLEDScoreGuests100 wordt dan:

#define StartLEDScoreGuests100 StartLEDScoreHome1 + TotalSegmentSize

#define StartLEDScoreHome100 FailGuestsStartLED + (FailDotCount*FailLEDsPerDot)
#define StartLEDScoreHome10 StartLEDScoreHome100 + (2*SegmentVSize)
#define StartLEDScoreHome1 StartLEDScoreHome10 + TotalSegmentSize

#define StartLEDScoreGuests100 StartLEDScoreHome1 + TotalSegmentSize
#define StartLEDScoreGuests10 StartLEDScoreGuests100 + (2*SegmentVSize)
#define StartLEDScoreGuests1 StartLEDScoreGuests10 + TotalSegmentSize

#define StartLEDPeriod FailHomeStartLED + (FailDotCount*FailLEDsPerDot)

 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 
Geplaatst door: @fredrossi

Vervolgens gaan de leds van fail home en guest wel branden (flikkeren een beetje)

Flikkeren kunnen we minimaliseren door zo min mogelijk FastLED.show aan te roepen.
Misschien geeft dit wat inzicht:

FastLED heeft een array met de kleuren voor jouw RFB strip (leds[]).
Hierin zetten we de gewenste kleuren maar dat is alles - het doet verder niets.

Als we FastLED.show() aanroepen, dan vertellen we FastLED pas dat de kleur waarden naar de LED strip gestuurd wordt, waar de strip per LED blokje een kleur van de reeks afsnoept.

Dus als we LEDs aan/uit willen zetten, of van helderheid of kleur willen veranderen, dan kunnen we het beste ervoor zorgen dat de leds[] array zo compleet mogelijk is en daarna pas naar de strip gestuurd wordt. Dus in ons geval, FastLED.show uit de functie "void SetFail" halen en de void loop als volgt aanpassen:

void loop()
{
   SetFail(3,4); // zet de foutelling voor Home (3) en Guests (4)
   SetTime(12,43,CRGB::Red);
   SetPeriod(StartLEDPeriod, CRGB::Green, 2);
   SetScore(12, CRGB::Blue, 2, CRGB::Blue); 
   FastLED.show();
}

   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Ik ga hier even mee aan de slag (leer iedere keer weer wat!). Voor de duidelijkheid, volgorde van solderen en aansluiten is : 100/10/1 score thuis, 100/10/1 score gast, fouten thuis, periode, fouten gast, 10/1 minuten, colom, 10/1 seconden.

Zoals in het word document.


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Om het e.e.a. even voor elkaar te verduidelijken, heb ik de volgorde aangepast van het bord. Ik heb namelijk het idee dat we niet op 1 lijn zitten qua aansluiting, dus heb ik het aangepast naar wat ik denk dat jij voor ogen had. Volgorde is nu tijd 10/1min, colom, tijd 10/1sec, fouten thuis, periode, fouten uit, score thuis 100/10/1, score uit 100/10/1.

Vervolgens ben ik aan het spelen geweest met je aanpassingen, maar het wil nog niet werken....al kom ik wel steeds dichterbij.

Als ik je aanbeveling volg van define StartLEDScoreGuests100 StartLEDScoreHome1 + TotalSegmentSize, dan gebeurt er helemaal niets meer op mijn bord. Als ik het hou zoals het was (maar dus wel met de verbeterde aansluitings-volgorde) dan krijg ik dit :

Wat me opvalt, behalve het geknipper, is dat ik de fouten voor zowel thuis als uit op 5 heb staan, maar er voor thuis maar 2 zichtbaar zijn. Periode staat op 2, score op 12 en 2. De tijd is in ieder geval wel in orde.

Als ik absolute aantallen invoer, dan gebeurt er ook helemaal niets. Frustrerend, voor ons beide denk ik, maar ik weet het even niet.

Door het vele proberen, is mijn steun inmiddels wel geprint en hij past. Heeft 6,5uur geprint, dus ben al even aan het sketchen..... 😆 (vannacht niet meegerekend.)


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Nog even dit :

Als ik FastLED.show terugzet naar de "originele" locatie, dan knippert alles nog steeds, maar zijn het aantal fouten wel juist. Misschien dat je hier wat aan hebt, vandaar dat ik het post.


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Als ik alle leds via een strandtest volledig wit laat branden, dan gaat dat ook zonder problemen, dus aan de power ligt het denk ik niet 🤔 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

OK heb even een sketch gemaakt om de waarden even te testen zodat we kunnen controleren of de define's goed werken, de berekening heb ik ook aangepast aan de info die je net gepost hebt (ik was het Word document al helemaal vergeten). Dus volgorde van solderen en aansluiten is : 100/10/1 score thuis, 100/10/1 score gast, fouten thuis, periode, fouten gast, 10/1 minuten, colom, 10/1 seconden.

#define FailHomeStartLED      10    // First LED for the Home fail counter
#define FailGuestsStartLED    20    // First LED for the Guests fail counter

#define FailLEDsPerDot        2     // Number of LEDs in a fail dot
#define FailDotCount          5     // Number of fails/dots for Home or Guests

#define FailHomeLeftToRight   true  // Home: true = from left to right, false = from right to left
#define FailGuestsLeftToRight true  // Guests: true = from left to right, false = from right to left

#define SegmentA 8
#define SegmentB 16
#define SegmentC 48
#define SegmentD 40
#define SegmentE 32
#define SegmentF 0
#define SegmentG 24
#define SegmentB 56

#define SegmentHSize 8
#define SegmentVSize 8 

#define TotalSegmentSize  (3*SegmentHSize)+(4*SegmentVSize)
#define TimeSeparatorSize  4   // 2 dots, each 2 LEDS



// 100/10/1 score thuis, 100/10/1 score gast, fouten thuis, periode, fouten gast, 10/1 minuten, colom, 10/1 seconden.

#define StartLEDScoreHome100     0
#define StartLEDScoreHome10      StartLEDScoreHome100 + (2*SegmentVSize)
#define StartLEDScoreHome1       StartLEDScoreHome10 + TotalSegmentSize

#define StartLEDScoreGuests100   StartLEDScoreHome1 + TotalSegmentSize
#define StartLEDScoreGuests10    StartLEDScoreGuests100 + (2*SegmentVSize)
#define StartLEDScoreGuests1     StartLEDScoreGuests10 + TotalSegmentSize  

#define FailHomeStartLED         StartLEDScoreGuests1 + TotalSegmentSize
#define StartLEDPeriod           FailHomeStartLED + (FailDotCount*FailLEDsPerDot)
#define FailGuestsStartLED       StartLEDPeriod + TotalSegmentSize

#define StartLEDMinutes10        FailGuestsStartLED + (FailDotCount*FailLEDsPerDot)
#define StartLEDMinutes1         StartLEDMinutes10 + TotalSegmentSize
#define StartLEDSecondsSeparator StartLEDMinutes1 + TotalSegmentSize
#define StartLEDSeconds10        StartLEDSecondsSeparator + TimeSeparatorSize
#define StartLEDSeconds1         StartLEDSeconds10 + TotalSegmentSize

// verify values through serial monitor:

void setup() {
  // ....
  
  
  Serial.begin(9600);
  Serial.println("Calculated LED positions:");

  Serial.print("SegmentHSize = ");             Serial.println(SegmentHSize);
  Serial.print("SegmentVSize = ");             Serial.println(SegmentVSize);
  Serial.print("TotalSegmentSize = ");         Serial.println(TotalSegmentSize);

  Serial.print("StartLEDScoreHome100 = ");     Serial.println(StartLEDScoreHome100);
  Serial.print("StartLEDScoreHome10 = ");      Serial.println(StartLEDScoreHome10);
  Serial.print("StartLEDScoreHome1 = ");       Serial.println(StartLEDScoreHome1);
 
  Serial.print("StartLEDScoreGuests100 = ");   Serial.println(StartLEDScoreGuests100);
  Serial.print("StartLEDScoreGuests10 = ");    Serial.println(StartLEDScoreGuests10);
  Serial.print("StartLEDScoreGuests1 = ");     Serial.println(StartLEDScoreGuests1);

  Serial.print("FailHomeStartLED = ");         Serial.println(FailHomeStartLED);
  Serial.print("StartLEDPeriod = ");           Serial.println(StartLEDPeriod);
  Serial.print("FailGuestsStartLED = ");       Serial.println(FailGuestsStartLED);

  Serial.print("StartLEDMinutes10 = ");        Serial.println(StartLEDMinutes10);
  Serial.print("StartLEDMinutes1 = ");         Serial.println(StartLEDMinutes1);
  Serial.print("StartLEDSecondsSeparator = "); Serial.println(StartLEDSecondsSeparator);
  Serial.print("StartLEDSeconds10 = ");        Serial.println(StartLEDSeconds10);
  Serial.print("StartLEDSeconds1 = ");         Serial.println(StartLEDSeconds1);
  
  
  // ....
}

void loop() {}

 

De output (zie WokWi):

Calculated LED positions:
SegmentHSize = 8
SegmentVSize = 8
TotalSegmentSize = 56
StartLEDScoreHome100 = 0
StartLEDScoreHome10 = 16
StartLEDScoreHome1 = 72
StartLEDScoreGuests100 = 128
StartLEDScoreGuests10 = 144
StartLEDScoreGuests1 = 200
FailHomeStartLED = 256
StartLEDPeriod = 266
FailGuestsStartLED = 322
StartLEDMinutes10 = 332
StartLEDMinutes1 = 388
StartLEDSecondsSeparator = 444
StartLEDSeconds10 = 448
StartLEDSeconds1 = 504

 

We kunnen nu met deze code rommelen om de juiste posities te bepalen en verifiëren. 😊 

 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

De verkeerde kleuren enzo (Score thuis en uit) ligt waarschijnlijk aan de posities. Het lijkt erop dat de posities in de array correct zijn (omdat de tijd en periode correct wordt weergegeven).
Het knipperen komt vermoedelijk omdat we ergens te snel FastLED.show() aanroepen.

Kun je jouw sketch als attachment hier posten? Dan kan ik even mee kijken.


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Dit is de code van gisteravond (alleen getallen van score heb ik aangepast naar 188, maar het resultaat is hetzelfde).

Ik ga zometeen alles weer origineel aansluiten en je code uploaden. Kijken wat er dan gebeurt. Ik hou je op de hoogte!


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Ik ben gisteravond nog wat bezig geweest, maar ging eigenlijk alleen maar verder achteruit.... Even van vooraf aan beginnen (in mijn ogen dan).

Met de volgende code wordt er niets weergegeven op het bord ( FailHomeStartLED 256 FailGuestsStartLED 322) :

 

Maar als ik FailHomeStartLED en FailHomeGuestsLED wijzig naar 10 en 20, dan wordt dit weergegeven :

Dus de eerste 16 Leds branden niet.

Verander ik vervolgens ook de FastLED.show van de void loop naar void setfail, dan gebeurt er dit :

Dus de eerste 9 doen niets (verwacht) maar de segment "A" van de 10-tallen home knippert.

Ik post dit omdat ik dacht dat je hier misschien wat mee kan. De bedrading is inmiddels aangesloten zoals in eerste instantie bedacht, dus beginnend bij score thuis.

Je had het over arrays, kan het hier mee te maken hebben?


   
BeantwoordenCiteren
(@Anoniem)
Deelgenomen: 1 seconde geleden
Berichten: 0
Topic starter  

Succes!

Meerdere pogingen en wijzigingen uitgeprobeerd, maar werkend heb ik hem volgens onderstaande wijzigingen :

FastLED.show(); verzet naar void SetPeriod :

void SetPeriod(int StartLED, CRGB PeriodColor, int Period) {
  if(Period<0) { 
    SetDigit(StartLED, CRGB::Black, Period);
  } else {
    SetDigit(StartLED, PeriodColor, Period);
    FastLED.show();
  }  
}

 

In voidSetDigit regel 181 uitgeschakeld (staat er ook in de comment, maar was niet gedaan):

void SetDigit(int StartLED, CRGB DigitColor, int DigitValue) {
  //SetDigitDark(StartLED); // set LED to dark, do not make this change visible yet (avoid flicker)

 

Even een paar wijzigingen gemaakt voor kleurtest in void loop :

void loop() {
   SetFail(3,4); // zet de foutelling voor Home (3) en Guests (4)
   SetTime(19,59,CRGB::Red);
   SetPeriod(StartLEDPeriod, CRGB::Red, 3);
   SetScore(189, CRGB::White, 124, CRGB::White);

 

Met dit als resultaat (zonder flickering) :

 

Hier wordt ik persoonlijk wel vrolijk van 👍 


   
BeantwoordenCiteren
Pagina 4 / 6
Deel: