kun je noch meer aan uit tijden bij zetten dan kun je op een dag 3 keer de led aan uit zetten
Inderdaad. Dus vul eens een extra aan/uit tijd in tijdblok 3 van pin 8 en kijk eens wat er gebeurt.
maar ik wil bij pin 8 hem eerst 6 hours uit hebben en daarna pas daarna 3 hours aan
Je moet anders denken; niet in "hoe lang" maar in "klok tijd".
Dat vertaalt dus naar "ik wil dat het licht aan gaat om 6 uur in de ochtend en dat het weer uit gaat om 9 uur in de ochtend".
1 Like
sterretje:
#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
// model tijden
const uint32_t oneMinute = 1000UL;
const uint32_t oneHour = 60000UL;
const uint32_t oneDay = 1440000UL;
struct TIMING
{
const uint32_t timeOn;
const uint32_t timeOff;
};
struct LIGHTS
{
const uint8_t pin;
const TIMING t[4];
};
LIGHTS lightTiming[] = {
{8, {{(1 * oneHour), (2 * oneHour)}, {(3 * oneHour), (4 * oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
{9, {{(1 * oneHour), (3 * oneHour)}, {(5 * oneHour) + (7 * oneMinute), (20 * oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
{10, {{(23 * oneHour), (1 * oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
};
// middernacht
uint32_t midnight;
void setup()
{
Serial.begin(115200);
// toon de configuratie
for (uint8_t ltCnt = 0; ltCnt < NUMELEMENTS(lightTiming); ltCnt++)
{
Serial.print(F("Lade "));
Serial.println(ltCnt);
Serial.print(F("\tPin "));
Serial.println(lightTiming[ltCnt].pin);
Serial.println(F("\tTijden"));
for (uint8_t tCnt = 0; tCnt < NUMELEMENTS(lightTiming[ltCnt].t); tCnt++)
{
if (lightTiming[ltCnt].t[tCnt].timeOn == 0xFFFFFFFF)
{
Serial.println(F("\t\tGeen tijden"));
}
else
{
Serial.print(F("\t\tAan "));
Serial.print(lightTiming[ltCnt].t[tCnt].timeOn);
Serial.print(F("\tUit "));
Serial.println(lightTiming[ltCnt].t[tCnt].timeOff);
}
}
}
// zet pinnen als uitgang
for (uint32_t ltCnt = 0; ltCnt < NUMELEMENTS(lightTiming); ltCnt++)
{
pinMode(lightTiming[ltCnt].pin, OUTPUT);
digitalWrite(lightTiming[ltCnt].pin, LOW);
// debugging
Serial.print(F("Pin "));
Serial.print(lightTiming[ltCnt].pin);
Serial.println(F(" output"));
}
// middernacht
midnight = millis();
}
void loop()
{
// test voor nieuwe dag
if (millis() - midnight >= oneDay)
{
midnight = millis();
Serial.println(F("Een dag voorbij"));
}
lightControl();
}
void lightControl()
{
uint32_t timeAfterMidnight = millis() - midnight;
// loop door alle laden (LEDs)
for (uint8_t ltCnt = 0; ltCnt < NUMELEMENTS(lightTiming); ltCnt++)
{
// bijhouden of LED aan of uit moet; default uit
bool lightOn = false;
// loop door alle lightTimings rijen in een lade
for (uint8_t tCnt = 0; tCnt < NUMELEMENTS(lightTiming[ltCnt].t); tCnt++)
{
// overslaan indien niet gespecificeerd
if (lightTiming[ltCnt].t[tCnt].timeOn == 0xFFFFFFFF)
{
// volgende lightTiming rij in de lade
continue;
}
// controleren of de huidige tijd in een gespecificeerde aan/uit tijd valt
// aan tijd kleiner dan uit tijd
if (lightTiming[ltCnt].t[tCnt].timeOn < lightTiming[ltCnt].t[tCnt].timeOff)
{
if (timeAfterMidnight >= lightTiming[ltCnt].t[tCnt].timeOn && timeAfterMidnight < lightTiming[ltCnt].t[tCnt].timeOff)
{
// debugging
if (digitalRead(lightTiming[ltCnt].pin) == LOW)
{
Serial.print(F("Pin "));
Serial.print(lightTiming[ltCnt].pin);
Serial.print(F(" aan tussen "));
Serial.print(lightTiming[ltCnt].t[tCnt].timeOn);
Serial.print(F(" en "));
Serial.println(lightTiming[ltCnt].t[tCnt].timeOff);
}
// aangeven dat LED moet worden ingeschakeld
lightOn = true;
}
}
// (2) aan tijd groter dan uit tijd; bv 23 tot 1
else
{
if (timeAfterMidnight >= lightTiming[ltCnt].t[tCnt].timeOn || timeAfterMidnight < lightTiming[ltCnt].t[tCnt].timeOff)
{
if (digitalRead(lightTiming[ltCnt].pin) == LOW)
{
// debugging
Serial.print(F("Pin "));
Serial.print(lightTiming[ltCnt].pin);
Serial.print(F(" aan tussen "));
Serial.print(lightTiming[ltCnt].t[tCnt].timeOn);
Serial.print(F(" en "));
Serial.println(lightTiming[ltCnt].t[tCnt].timeOff);
}
// aangeven dat LED moet worden ingeschakeld
lightOn = true;
}
}
}
// indien de LED aan moet zijn
if (lightOn == true)
{
// schakel LED aan
digitalWrite(lightTiming[ltCnt].pin, HIGH);
}
else
{
// debugging
if (digitalRead(lightTiming[ltCnt].pin) == HIGH)
{
Serial.print(F("Pin "));
Serial.print(lightTiming[ltCnt].pin);
Serial.println(F(" uit "));
}
// schakel LED uit
digitalWrite(lightTiming[ltCnt].pin, LOW);
}
}
}
hoe kan ik deze code aanpassen dat de lamp pas om 6 uur in de ochtend aan gaat en 9 uur in de ochtend uit gaat en om 5 uur in de middag aan gaat en om 10 uur in de avond weer uit gaat
ik heb al heel wat geprobeerd maar het lukt niet zou u dat wel snappen en wat moet ik dan aanpassen
alvast bedankt u heeft me al een heel eind geholpen
Laat de poging maar zien.
Er van uitgaande dat je niks anders hebt veranderd hoef je alleen het array lightTiming te laten zien.
Dat lijkt verdacht veel op wat er in mijn programma zat?
Laat jouw poging zien waar je de tijden aangepast hebt.
[/quote]
sterretje:
LIGHTS lightTiming[] = {
{2, {{(1 * oneHour), (2 * oneHour)}, {(5 * oneHour), (8 * oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
{3, {{(6 * oneHour), (3 * oneHour)}, {(5 * oneHour) + (5 * oneMinute), ( 8* oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
{4, {{(3 * oneHour), (9 * oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
};
dit is wat ik heb geprobeerd het is bij pin 3
sterretje:
(6 * oneHour)
Die zit goed; gaat aan om 6 uur in de ochtend
sterretje:
(3 * oneHour)
Dat zit verkeerd, gaat uit om 3 uur in de ochtend, noet na 3 uur.
Dat is 5 minuten over 5 in de ochtend.
sterretje:
( 8* oneHour)
En dat is 8 uur in de ochtend
De klok is een 24 uurs klok, niet een 12 uur klok
{3, {{(6 * oneHour), (9 * oneHour)}, {(17 * oneHour), (20* oneHour)}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}}},
ja nu snap ik het dee het steeds fout
hoi @sterretje maar ik kwam noch op een idee als bij voorbeeld led 3 aan staat dat je die dan kunt dimmen met een potmeter kan dat of kan dat niet
Ik stel voor dat je hier een simpele simpele sketch post die de potentiometer leest en gebaseerd op de gelezen waarde de intensiteit van de LED op pin 3 instelt.
Indien je niet weet hoe je een potentiometer moet lezen en hoe je een pin kunt dimmen stel ik voor dat je dat eerst zelf probeert uit te vogelen.
MAS3
December 30, 2022, 9:51pm
37
Het uitlezen van een potmeter staat in de voorbeelden die bij de IDE geleverd worden.
Ook het dimmen van een LED staat daarbij.
Dit is het eerste wat ik gedaan heb toen ik begon met Arduino (alweer 10 jaar geleden), en heb toen zelf de 2 gecombineerd en een hele reeks van verschillende dingen gemaakt die daar allemaal op gebaseerd zijn.
Ik heb in de eerste 2 weken met Arduino enorm veel opgestoken van de voorbeelden en wat ik daar zelf mee in elkaar kon fröbelen.
int pin = 3;
void setup () {
Serial.begin(9600);
}
void loop() {
analogRead(3);
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1);
}
En nu dat nog combineren met het aansturen van een PWM pin en ik kan je verder helpen.
Kijk verder eens hoe jouw programma eruit ziet in het forum en hoe die van mij eruit zien. Gebruik code tags !!
Selecteer de code en gebruik de </> knop boven het venster waar je je antwoord typt om code tags toe te voegen rondom je code.
system
Closed
July 1, 2023, 4:51pm
40
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.