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.
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter
12 december 2016 21:09
Hier ben ik aan tijdje naar op zoek Water Torture De code heb ik gedownload & er wat mee gespeeld maar ik krijg alleen foutmeldingen.
Het effect is echt cool, iemand hier die dit werkend heeft/krijgt? YouTube Link
(@ws2811person)
New Member
Deelgenomen: 8 jaar geleden
Berichten: 4
13 december 2016 15:42
Ik heb die code wel aan de praat gekregen, maar dat was makkelijker want het is mijn code
Belangrijk punt is dat deze code is geschreven voor een "kale AVR" op 8 Mhz. Je stelt je vraag in een arduinoforum dus vermoed ik dat je dit in de arduino-omgeving probeert te draaien. Zelfs als je het dan aan het compileren krijgt zal het niet werken op een normale arduino omdat die op een 16 Mhz klok draait. Ik moet erbij zeggen dat mijn ervaring met arduino minimaal is, dus misschien kun je de arduino configureren om op 8Mhz te draaien.
Compileren zou eigenlijk gewoon moeten werken, mits alle header files zijn meegekopieerd.
Dat gezegd hebbende, zou het mogelijk moeten zijn om de waterdruppel-code (in water_torture.hpp) aan te passen aan een arduino-vriendelijke ws2811 library zoals adafruits neopixel library. In essentie is het een kwestie van het aanpassen van de add_clipped_to () calls in de droplet class. Dat is de enige plek waar de code specifiek is voor mijn eigen ws2811-driver.
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter
13 december 2016 21:31
Je hebt een mooie code gemaakt & bedankt voor de reactie.
Ja ik heb het op een arduino mega 2560 geprobeerd met een 144 ledstrip ws2812b die in 2 delen achterop mijn beeldscherm is gemonteerd, waar ik dus 2 pins aanspreek.
Dit vond ik zo'n waanzinnig mooi effect dat ik het moest proberen, de hpp had ik gerenamed naar .ino, maar er is meer voor nodig, mogelijk dat Hans hier een oplossing voor weet.
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter
14 december 2016 16:31
Ik heb een poging gedaan, Arduino IDE 1.6.13 compileert error vrij, maar de Leds geven geen lichteffect. Mogelijk wil iemand er eens naar kijken, ik zal vast eea fout gedaan hebben.(rarfile in de bijlage)
De water_torture.hpp is nu water_torture.h
(@ws2811person)
New Member
Deelgenomen: 8 jaar geleden
Berichten: 4
14 december 2016 18:11
De aanpassingen lijkt zo op het eerste oog correct, met uitzondering van 2 zaken (maar hier speelt misschien mijn gebrek aan kennis van de Arduino-omgeving mee):
- De functie Drip() wordt nergens aangeroepen. Ik zou verwachten dat dit in loop() gebeurt (en het gebruik van een jump-label in die functie verontrust mij licht).
De code die uiteindelijk strip->SetPixelColor() aanroept in animate() is uitgecommentarieerd. (edit: never mind, ik zie dat je getPixels() aanroept)
Verder zou je de code kunnen versimpelen door overal waar add_clipped_to() staat in mijn code gewoon strip->SetPixelColor() aan te roepen (wel de functieargumenten overeenkomstig aanpassen). Het mengen van kleuren in add_clipped_to() heeft maar heel weinig effect, met name alleen maar als er twee druppels tegelijk bovenin aanzwellen. Op die manier bespaar je ook 3*ledcount ram bytes.
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter
14 december 2016 19:16
Dank je, de functie Drip() , daar had ik overheen gekeken. Ik heb nog wat wijzigingen in de code doorgevoerd. Nu werkt hij (alleen maar op 1 strip)
als ik LEFT_OUT omwissel en RIGHT_OUT boven zet werkt de rechterstrip ipv de linker.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LEFT_OUT, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, RIGHT_OUT, NEO_GRB + NEO_KHZ800);
Beide strips worden aangeroepen met .begin & .show, wat nu nog ontbreekt zie ik niet. (Aangepaste code wederom in de bijlage)
(@ws2811person)
New Member
Deelgenomen: 8 jaar geleden
Berichten: 4
14 december 2016 19:30
In de laatste versie van de code wordt alleen water_torture.animate() aangeroepen, niet water_torture1.animate(). Ik vermoed dat daardoor alleen strip wordt aangestuurd en niet strip1.
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter
15 december 2016 1:15
Wederom dank, nu werkt het op beide strips.
(@passie)
New Member
Deelgenomen: 8 jaar geleden
Berichten: 1
26 december 2016 13:19
Wou, hier mijn strip ook werkend.
Echter werkt de code alleen goed tot 254 ( leds ) ik heb een ledstrip van 5m die 300Leds bevat als ik boven de 254 kom gaat de strip heel gek doen.
Ik heb al in de code zitten zoeken waar het aan kan liggen maar kom er niet uit.
(@ws2811person)
New Member
Deelgenomen: 8 jaar geleden
Berichten: 4
26 december 2016 13:55
De oorspronkelijke code van water torture is beperkt tot 254 LEDs, dit komt omdat de positie weliswaar in 16 bits wordt bijgehouden, maar 8 bits daarvan "achter de komma" staan (technisch worden posities bijgehouden in 8.8 fixed point representatie). Je houdt dus 8 bits over voor de positie => 256 posities. Ik heb het nooit getest tot 255 LEDs, maar ik verwacht dat de laatste LEDs problemen geeft omdat er ook posities net voorbij de laatste LED worden bijgehouden. Specifiek kunnen vallende druppels voorbij de laatste LED vallen voordat wordt gedetecteerd dat ze moeten terugkaatsen.
Als je dit zou willen aanpassen (door b.v. een 12.4 fixed point representatie te gebruiken) zou dat moeten gebeuren in de functies step() (zie de regel "const uint16_t maxpos16 = maxpos << 8;") en draw().
De oorspronkelijke code had een rudimentaire static_assert om tijdens compilatie al aan te geven dat LED counts > 255 niet zouden werken.
edit: en oh ja: een fixed (of floating-) point notatie is echt nodig omdat anders de animatie en de versnelling van de druppels te grof worden en daardoor een stuk minder realistisch. Je kunt natuurlijk ook de code herschrijven om floating points te gebruiken, in de oorspronkelijke versie is dat niet gedaan omdat de code in een heel kleine code-space moest kunnen werken.
(nog een edit: 8 bits is 256 posities ipv 255).
(@franske)
New Member
Deelgenomen: 7 jaar geleden
Berichten: 1
1 december 2017 1:18
Super vet effect, erg bedankt daarvoor