ws 2812b push button 2 funtie's

Arduino specifieke Software
Berichten: 4
Geregistreerd: 18 Sep 2017, 21:12

ws 2812b push button 2 funtie's

Berichtdoor Ron » 13 Mrt 2020, 18:21

hallo,
ik heb een vraagje, en hoop dat iemand van jullie mij op weg kan helpen.
Ten eerste: geloof me ik heb avonden gezocht op het web maar kan niets vinden.
ik wil graag een ws2812 leestrip dmv een analoge schakelaar van kleur laten veranderen.
dat is me gelukt dmv van een sketch aan te passen naar mijn wensen.(button cycler).
alleen nu zou ik ook graag willen als ik bv een kleur geselecteerd heb, bv blauw en ik houd de drukschakelaar vast dat de geselecteerde kleur van lichtsterkte wijzigt.(fade in fader out)


1: is dit mogelijk
2: is dit ook te doen voor een leek als ik.
3: waar moet ik naar zoeken op internet.\
4: zijn er misschien al zulke projecten waar ik wat van af kan kijken.

ik hoop dat er iemand is die mij op weg kan helpen, en het hoeft geen kant en klare oplossing te zijn.

groeten Ron.

Advertisement

Gebruikers-avatar
Berichten: 2399
Geregistreerd: 06 Aug 2016, 01:03

Re: ws 2812b push button 2 funtie's

Berichtdoor Koepel » 14 Mrt 2020, 00:10

1. Ja, zo'n beetje alles wat je kunt bedenken met tijd en optellen en aftellen en dingen die veranderen kun je in code maken.
2. Nee, niet als het één knop is voor alles.
3. Zoek een op forum.arduino.cc naar "button" en "fade".
4. Ik kwam dit tegen: https://forum.arduino.cc/index.php?topic=372413.msg2568188#msg2568188.

Wil je één knop voor alles ?
Dan is een hele goede beschrijving nodig:
Bijvoorbeeld de knop gebruiken om de kleur te wijzigen, als de knop na het loslaten niet langer ingedrukt was dan een halve seconde. Het faden pas starten als de knop een halve seconde ingedrukt is. Beginnen met een lineaire toename tot 255 en daarna afname naar 0 enzovoorts. Misschien vier seconden van helemaal uit naar helemaal aan (en andersom). Voor een update van leds gebruik ik vaak 25 keer per seconde een update, dus iedere 40ms. Ik zie al een Finite State Machine in de verte opdoemen, maar het kan ook zonder. Een Finite State Machine is een handige manier om door verschillende stappen te lopen. De naam klinkt ingewikkelder dan het is: https://majenko.co.uk/blog/finite-state-machine

Maar hier gaat het heel vaak mis. Als ik vraag om een goede beschrijving, dan haken de meesten af. Als het je lukt om een goede beschrijving te geven, dan heb je de helft van de code al.

Als je meer dingen wilt doen in de loop() dan is het nodig om geen delay() te gebruiken. Dan zou ik de Bounce2 library gebruiken en met de functies van die library het proberen te maken. Er is een extra variabele nodig, die bijhoudt of het faden toeneemt of afneemt. Dan krijg je een sketch die gebruikt maakt van millis().

Wat is een analoge schakelaar ?

Onder het motto: "if you can do it, you can overdo it" heb ik meer dan 40 verschillende functies aan een schakelaar toegekend: https://github.com/Koepel/Fun_with_millis/blob/master/Too_Much_For_One_Button.ino. Dus ja, zo'n beetje alles is mogelijk met een paar variabelen en millis().

Berichten: 4
Geregistreerd: 18 Sep 2017, 21:12

Re: ws 2812b push button 2 funtie's

Berichtdoor Ron » 14 Mrt 2020, 09:32

hartelijk dank voor je snelle antwoord.
Idd het is precies zo als jij omschrijft.
als de pushbutton niet langer ingedrukt wordt dan een halve seconde, moet de ledstrip(ws2812b) de kleur wit weergegeven
op volle lichtsterkte.
wil ik de brightness wijzigen zou ik zoals je beschrijft de knop een halve seconde ingedrukt moeten houden waarna het fade start.
laat ik de knop dan los als de juiste lichtsterkte bereikt is moet de situatie zo blijven.
druk ik weer op de knop korter dan een halve seconde ,dan ga ik naar de volgende kleur(bv blauw).
en druk ik hem langer dan een halve sec in moet deze kleur gaan fade.
dit proces moet zich herhalen tot de laatste kleur, en dan moet de strip uit gaan.
zoals ik al zei heb ik het al werkend door met een pushbutton om van kleur te wisselen(daar ben ik al blij mee).
en op mijn vraag of het te doen is voor een leek, is het antwoord nee( als het 1 knop is voor alles.)
Ik denk dat je gelijk hebt, er komt veel bij kijken.
Maar ik geef het nog niet op, want met jou uitleg ben ik toch weer een stapje verder en weet ik in welke richting ik moet denken.
ik heb trouwens de sketch toegevoegd die ik verder aan zou willen passen .
dit project wil ik straks in mijn nieuwe vrachtauto gaan gebruiken als indirect licht rond het dakluik.
Het is ook als accessoire verkrijgbaar bij Mercedes voor meer als 500 euro, maar dat vind ik te gortig.
mocht het mij toch lukken om het werkend te krijgen, zeer kleine kans. dan laat ik het je weten.
Nogmaals hartelijk dank voor je tijd en uitleg.

Berichten: 3065
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: ws 2812b push button 2 funtie's

Berichtdoor shooter » 14 Mrt 2020, 10:36

een schakelaar is bijna altijd digitaal, omdat er maar twee toestanden in voorkomen, maar ach.
vervolgens moet je ook aan de hand van koepel afvragen welke toestand je hebt, en dan telkens afvragen of de tijd verstreken is die je duwt. is dat zo dan naar de volgende toestand en dus nieuwe waarden naar de ledstrip verzenden.
En ja dat is zeker mogelijk er zijn voorbeelden te over.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 2399
Geregistreerd: 06 Aug 2016, 01:03

Re: ws 2812b push button 2 funtie's

Berichtdoor Koepel » 14 Mrt 2020, 10:37

Als je wilt faden, dan wil je natuurlijk niet dat eerst de kleur wijzigt.
Dus het wijzigen van de kleur gebeurt niet bij het indrukken van de knop, maar bij het loslaten. Dan bij het loslaten kijken of hij minder dan een halve seconde was ingedrukt. Daar kun je mee beginnen, dan zit je al vollop met millis() te werken.
Als dat te ingewikkeld is, dan zou ik overschakelen naar de Bounce2 library. Die heeft functies om te kijken of een knop is ingedrukt met "read()", maar ook functies die kijken of een knop op dat moment werd ingedrukt of losgelaten met "rose()" en "fell()".

https://github.com/thomasfredericks/Bounce2.
In de loop() zet je een "update()" functie neer, en laat de loop() zo snel en zo vaak mogelijk uitvoeren. Dus zonder delay() te gebruiken.

Een boolean variabele die bijhoudt of de knop is ingedrukt is niet nodig als je de Bounce2.read() gebruikt.
Een boolean variabele die bijhoudt of het faden bezig is, is niet nodig als dat samen wordt genomen met de stapgrootte van het faden.
Een boolean variabele die bijhoudt of het faden omhoog gaat of omlaag is niet nodig, dan kan in diezelfde stapgrootte.

Hieronder staat pseude code, waarin ik probeerde om afzonderlijke brokjes te maken die elk hun ding doen, en uiteindelijk samen werken. Als je elk afzonderlijk brokje begrijpt, dan komt het goed. Ik kreeg vier brokjes:

Code: Alles selecteren
Eén knop is één Bounce2 object
unsigned long knopMillis;   // het moment waarop een knop werd ingedrukt
unsigned long updateMillis();  // voor de millis() timer om de leds te updaten tijden het faden
unsigned long updateInterval = 40; // 40 ms voor update interval van leds
int fadeStep = 0;  // 0 = niet faden, +1 = fade up, -1 = fade down
int brightness;  // helderheid voor de leds.

loop():
  Bounce2 update()

  if fell()    // als fell() betekent indrukken
  {
    knopMillis = millis();   // timestamp dit moment
  }

  if rose()   // rose() is losgelaten ?
  {
    elapsedMillis = millis() - knopMillis;
   
    if elapsedMillis < halve seconde
    {
      kleur veranderen
    }

    fadeStep = 0;     // stop het faden
  }

  if read() == ingedrukt && fadeStep == 0   // nog niet aan het faden ?
  {
    elapsedMillis = millis() - knopMillis;
   
    if elapsedMills > halve seconde
    {
      fadeStep = 1;       // of +4 of -2 of iets anders, de stapgrootte, start het faden
    }
  }

  if fadeStep != 0    // is op dit moment het faden actief ?
  {
    if millis() - updateMillis >= updateInterval    // een millis timer
    {
      updateMillis = millis();

     Stuur de brightness naar de RGB leds

      brightness += fadeStep;
      if brightness over de limiet van 0 of 255
      {
         corrigeer brightness voor de zekerheid dat de waarden binnen de grenzen is
         fadeStep = -fadeStep;  // andere kant op
      }
    }
  }


Als je wilt dat de helderheid van de leds zijn waarde behoudt bij het wijzigen van de kleur dan hoort dat nog bij de beschrijving.

Berichten: 4
Geregistreerd: 18 Sep 2017, 21:12

Re: ws 2812b push button 2 funtie's

Berichtdoor Ron » 14 Mrt 2020, 11:02

hartelijk dank heren.
ik heb het ff snell bekeken en ga er vanavond mee aan de slag moet nu weg.
jullie zijn super.
ik houd jullie op de hoogte.
groet,

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten