Sunrise - Sunset

algemene C code
Berichten: 12
Geregistreerd: 12 Feb 2020, 21:56

Re: Sunrise - Sunset

Berichtdoor HenkieVer » 14 Feb 2020, 14:58

Bedankt voor je reactie

Ik ga kijken wat ik kan doen..

Rob

Advertisement

Berichten: 12
Geregistreerd: 12 Feb 2020, 21:56

Re: Sunrise - Sunset

Berichtdoor HenkieVer » 16 Feb 2020, 21:48

Het weekend mee bezig geweest.
Van define gradient palette 1 gemaakt.
Je gaf ook aan dat er maar 1 every N-secconds functie in staat, maar volgens mij staan er 2 in.
Het schakelen van sunrise naar sunset blijft problemen geven.
Maar helaas ik kom er niet uit.
Daarvoor is mijn kennis hiervoor tekort.
Ik ga maar verder op internet wat zoeken en kijken of ik dan nog verder kom.

Rob

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Sunrise - Sunset

Berichtdoor zuid » 17 Feb 2020, 09:56

Zoals @shooter schreef zou je een gecombineerde palette van kunnen maken. Daarvoor moet je dus eerst proberen te begrijpen hoe een palette werkt.
De eerste kolom geeft aan welk deel van de 255 cycli elke kleur wijziging duurt (voor zover ik het begrijp) de overige kolommen betreffen de te tonen kleur.
Dus eerst Sunrise verdelen en vervolgens Sunset.
Nu staat daar 0 , 127 , 224 , 255
Dus een kleur wijziging van moment 0 naar 127 en van 127 naar 224 en van 224 naar 255
Als je regels toevoegt voor Sunset (zoals ik eerder onjuist probeerde) moet je de verdeling aanpassen. Misschien moet je daarna ook nog de tijd per stap vergroten.

Maar het kan zomaar zijn dat het ook dan nog niet werkt. :)
Ik heb namelijk het idee dat de toewijzing van het palette moet worden aangepast volgens de tekst van de pagina die ik eerder met een link aangaf.
Ik denk dat Sunset nu verwijst naar een standaard palette (HeatColors_p)

mvg Nico

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

Re: Sunrise - Sunset

Berichtdoor shooter » 17 Feb 2020, 10:08

Stel even je hebt voor elk uur een kleursamenstelling. en dus ook een regel in je array
in eerste instantie ga je dan op de hele uren over naar de volgende regel.
dus van 0 tot 23 heb je de uren dan heb je dus al 24 schakelmomenten
elke seconde kijk je waar je bent in de array en stuurt dat ook uit naar de lampen.
Daarna komt dat je ook wil gaan interpoleren dus kijk je als het bijvoorbeeld 1:23 is naar uur 1 , pak je 1 dus 23% en 77 % van uur 2.
dat hoeft natuurlijk niet op elke seconde of zo en ook het aantal stappen (regels mag best 10 zijn of zo.
paul deelen
shooter@home.nl

Berichten: 12
Geregistreerd: 12 Feb 2020, 21:56

Re: Sunrise - Sunset

Berichtdoor HenkieVer » 27 Feb 2020, 09:56

Hallo, sorry voor de later reactie. (ziek).

Ik kom er helaas niet uit.
Ik heb veel geprobeerd en gezocht op het internet, maar ik kom er niet uit.
Als ik hem nu aanzet dan gaat hij mooi van rood, naar geel en naar wit. Echt mooi.
Het vervelende is dat, als hij het einde van het programma bereikt heeft uitgaat.
Ik zou nu al blij zijn als hij het einde van het programma bereikt heeft gewoon aan blijf (wit licht) voor onbeperkte duur.
Dan laat ik dus de sunset maar zitten. en wil alleen dan de sunrise gebruiken.
Is er iemand die mij kan helpen zodat het licht aan het einde aan blijft?

Rob

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

Re: Sunrise - Sunset

Berichtdoor shooter » 28 Feb 2020, 11:16

laat eens zien wat je nu hebt, en hij gaat uit als de waardes die je naar de array stuurt 0 zijn.
maak het jezelf makkelijk door de tijd eerst maar op een paar seconden te zetten.
paul deelen
shooter@home.nl

Berichten: 12
Geregistreerd: 12 Feb 2020, 21:56

Re: Sunrise - Sunset

Berichtdoor HenkieVer » 28 Feb 2020, 20:35

Hoi Paul,

Het is dus de bedoeling dat als de arduimo aangezet wordt (dit met een externe schakelklok) deze van rood langzaam naar wit gaat in mijn aquarium. Dit gaat prima.
Dat snelheid ervan kan ik wel instellen.
Echter als het eerste deel (sunrise) klaar is begint hij weer overnieuw, van rood naar wit, terwijl hij wit moet blijven.
Naar een paar uur maakt mijn mijn schakelklok een contact en dan zou sunset, van wit naar rood moeten gaan.
De sunset werkt op zich ook prima, maar het combineren van die 2 lukt niet.
Ik hoop dat je een oplossing hebt, want ik kom er niet uit. veel gezocht op internet, maar lukt niet.
Ik gebruik nu nog een plaatje met 40 ledjes op mijn Arduino , wordt als het werkt een ledstrip ws2812b.

Rob

#include <Adafruit_NeoPixel.h>
#include "FastLED.h"
int buttonPin = 2; // momentary push button on pin 0
int oldButtonVal = 0;
#define pixels 40
#define PIN 6 // Parameter 1 = number of pixels in strip

DEFINE_GRADIENT_PALETTE( sun_rise ) {
0, 0, 0, 0, //black
127, 255, 0, 0, //red
224, 255, 255, 0, //bright yellow
255, 255, 255, 255}; //full white

DEFINE_GRADIENT_PALETTE( sun_set ) {
255, 255, 255, 255,
224, 255, 255, 0,
128, 255, 0, 0,
0, 0, 0, 0};

CRGB leds[pixels];
Adafruit_NeoPixel strip = Adafruit_NeoPixel(pixels, PIN, NEO_GRB + NEO_KHZ800);

int nPatterns = 2;
int lightPattern = 1;
uint16_t currentPixel = 0;// what pixel are we operating on
uint16_t led = 0;

unsigned long previousmillis = 0;
unsigned long time = 50;
// the setup routine runs once when you press reset:
void setup() {
FastLED.addLeds<NEOPIXEL, PIN>(leds, pixels);
strip.begin();
strip.show(); // initialize all pixels to 'off'
currentPixel = 0; // initialize the BUTTON pin as an input
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); // button pin is HIGH, so it drops to 0 if pressed
}

void loop() {
// read that state of the pushbutton value;
int buttonVal = digitalRead(buttonPin);
if (buttonVal == LOW && oldButtonVal == HIGH) {// button has just been pressed
lightPattern = lightPattern + 1;
}
if (lightPattern > nPatterns) lightPattern = 1;
oldButtonVal = buttonVal;

switch (lightPattern) {
case 1:
if ((unsigned long)(millis() - previousmillis) >= time) {
previousmillis = millis();
Sunrise();
break;
case 2:
if ((unsigned long)(millis() - previousmillis) >= time) {
previousmillis = millis();
Sunset();
break;
}
}
}
}

//Sunrise
void Sunrise() {
static const uint8_t sunriseLength = 30; // total sunrise length, in minutes
//7 seconds x 256 gradient steps = 1,792 seconds = ~30 minutes
static const uint8_t interval = (sunriseLength * 10) / 256; //De duur van het in faden
static uint8_t heatIndex = 0; // start out at 0 // current gradient palette color index
CRGB color = ColorFromPalette(HeatColors_p, heatIndex );
fill_solid(leds, pixels, color); // fill the entire strip with the current color

EVERY_N_SECONDS(interval) {
if (heatIndex < 240) {
heatIndex++;
}
FastLED.show();
}
}

//Sunset
void Sunset() {
static const uint8_t sunsetLength = 30; // total sunset length, in minutes
//7 seconds x 256 gradient steps = 1,792 seconds = ~30 minutes
static const uint8_t interval1 = (sunsetLength * 10) / 256; //De duur van het in faden
static uint8_t heatIndex1 = 200; // start out at 0 // current gradient palette color index
CRGB color1 = ColorFromPalette(HeatColors_p, heatIndex1 );
fill_solid(leds, pixels, color1); // fill the entire strip with the current color

EVERY_N_SECONDS(interval1) {
if (heatIndex1 > 0) {
heatIndex1--;
}
FastLED.show();
}
}

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

Re: Sunrise - Sunset

Berichtdoor shooter » 29 Feb 2020, 11:50

ik zie dat je nog steeds 2 paletten gebruikt, maak er een van met 7 of meer regels
als schakelaar aan (LOW) en tijd verstreken van vorigstand, en palette niet maximaal (bijvoorbeeld 5) (dat mag dus ook een getal zijn die in een array staat) dan volgende regel in je palette.
en precies zo ook als schakelaar uit dan wordt maximaal bijvoorbeeld 12.
bij stand 12 wordt de stand weer 0 en dan wordt er gewacht tot schakelaar weer aan is.
ik zou overigens de palette gebruiken en niet de heatindex maar ach is een manier van taal.
paul deelen
shooter@home.nl

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

Re: Sunrise - Sunset

Berichtdoor shooter » 29 Feb 2020, 11:51

en wat is sunrise en sunset eigenlijk in die palette
paul deelen
shooter@home.nl

Berichten: 12
Geregistreerd: 12 Feb 2020, 21:56

Re: Sunrise - Sunset

Berichtdoor HenkieVer » 29 Feb 2020, 12:26

Paul,
Ik heb de paletten ook al een keer gebruikt.
Dan kan je de kleuren aanpassen zoals je wilt. werkt prima.
Maar het heeft volgens mij geen enkele invloed op het programma.
Ik heb op internet gelezen dat als je dit (ColorFromPalette(HeatColors_p, heatIndex );) gebruikt,
dat de standaard kleuren gebruikt wordt.

Het gaat mij om de rest van het programma. Daar kom ik niet uit.
Ik heb een schakelaar op pin 2 zitten.

Rob

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten