Uitschakelvertraging
10 berichten
• Pagina 1 van 1
Uitschakelvertraging
Hoi,
Ik probeer nu om een uitschakelvertraging te maken.
Als je de knop indrukt moet het lampje aan gaan, en als je hem loslaat moet het lampje nog 10 seconden blijven branden en daarna uitgaan.
Op internet, youtube en het forum heb ik wel onderwerpen gevonden waar ik verder mee ben gekomen, maar het lukt nog steeds niet, hij gaat uit als je de knop los laat.
Dit is mijn sketch op dit moment:
const int buttonPin = 11;
const int ledPin = 5;
int buttonState = 0;
unsigned long previousMillis = 0;
const long interval = 10000;
long startTime;
long stopTime;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
buttonState = digitalRead(buttonPin);
if(buttonState ==HIGH) {
digitalWrite(ledPin, HIGH;
if (buttonState == LOW) {
startTime;
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
stopTime;
digitalWrite(ledPin, LOW);
}
}
} else {
digitalWrite(ledPin, LOW);
}
}
Waarschijnlijk werkt het niet omdat startTime en stopTime niet goed ingesteld zijn, het idee was dat startTime ervoor zorgt dat hij het aantal miliseconden (millis) gaat tellen en dat hij bij stopTime stopt met het tellen. Ik heb het ook geprobeerd zonder dit systeem maar dan blijft hij doortellen en wacht hij een paar seconden voordat hij uitgaat, in plaats van tien.
Alvast bedankt!
Ik probeer nu om een uitschakelvertraging te maken.
Als je de knop indrukt moet het lampje aan gaan, en als je hem loslaat moet het lampje nog 10 seconden blijven branden en daarna uitgaan.
Op internet, youtube en het forum heb ik wel onderwerpen gevonden waar ik verder mee ben gekomen, maar het lukt nog steeds niet, hij gaat uit als je de knop los laat.
Dit is mijn sketch op dit moment:
const int buttonPin = 11;
const int ledPin = 5;
int buttonState = 0;
unsigned long previousMillis = 0;
const long interval = 10000;
long startTime;
long stopTime;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
buttonState = digitalRead(buttonPin);
if(buttonState ==HIGH) {
digitalWrite(ledPin, HIGH;
if (buttonState == LOW) {
startTime;
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
stopTime;
digitalWrite(ledPin, LOW);
}
}
} else {
digitalWrite(ledPin, LOW);
}
}
Waarschijnlijk werkt het niet omdat startTime en stopTime niet goed ingesteld zijn, het idee was dat startTime ervoor zorgt dat hij het aantal miliseconden (millis) gaat tellen en dat hij bij stopTime stopt met het tellen. Ik heb het ook geprobeerd zonder dit systeem maar dan blijft hij doortellen en wacht hij een paar seconden voordat hij uitgaat, in plaats van tien.
Alvast bedankt!
Advertisement
Re: Uitschakelvertraging
Zoals het nu staat test je in princiepe alleen maar op de status van je druktoets
dat gebeurd met deze regel : if(buttonState ==HIGH) {
zodra je de druktoets loslaat is alles wat hierbinnen valt niet relevant.
dat is ook de reden waarom de rest van je code niet werkt.
ik heb verder nog niet gekeken of de rest van je code ook klopt, dat is aan jezelf om dit uit te zoeken, loop je ergens op vast, dan kan je altijd weer vragen stellen.
verder staat er in je code nog startTime en stopTime.
leuk dat je dit vermeld, maar daar gebeurd verder ook weinig mee.
succes!
dat gebeurd met deze regel : if(buttonState ==HIGH) {
zodra je de druktoets loslaat is alles wat hierbinnen valt niet relevant.
dat is ook de reden waarom de rest van je code niet werkt.
ik heb verder nog niet gekeken of de rest van je code ook klopt, dat is aan jezelf om dit uit te zoeken, loop je ergens op vast, dan kan je altijd weer vragen stellen.
verder staat er in je code nog startTime en stopTime.
leuk dat je dit vermeld, maar daar gebeurd verder ook weinig mee.
succes!
Met vriendelijke groet Arjan
Re: Uitschakelvertraging
Ik vraag me af welke voorbeelden je hebt bekeken
Probeer deze eens: https://github.com/Koepel/Fun_with_millis/blob/master/millis_single_delay.ino.
Wel nog jouw "const int ledPin = 5 ;" toevoegen en daar de sketch voor aanpassen.
Heb je de knop tussen 5V en pin 11 ? Dat voorbeeld heeft de knop aan GND en pin 2. Het is gemakkelijker om de knop aan de GND te leggen, dan om die voorbeeld-sketch te wijzigen.
Als dat werkt, dan kun je voor de lol eens deze proberen: https://github.com/Koepel/Fun_with_millis/blob/master/millis_and_finite_state_machine.ino.
Je hebt dan de seriële monitor nodig. Dan kun je een led aan- en uitzetten, soms met lang ingedrukt houden en de led laten knipperen.
Probeer deze eens: https://github.com/Koepel/Fun_with_millis/blob/master/millis_single_delay.ino.
Wel nog jouw "const int ledPin = 5 ;" toevoegen en daar de sketch voor aanpassen.
Heb je de knop tussen 5V en pin 11 ? Dat voorbeeld heeft de knop aan GND en pin 2. Het is gemakkelijker om de knop aan de GND te leggen, dan om die voorbeeld-sketch te wijzigen.
Als dat werkt, dan kun je voor de lol eens deze proberen: https://github.com/Koepel/Fun_with_millis/blob/master/millis_and_finite_state_machine.ino.
Je hebt dan de seriële monitor nodig. Dan kun je een led aan- en uitzetten, soms met lang ingedrukt houden en de led laten knipperen.
Re: Uitschakelvertraging
er staan wat tikfouen in je programma.
dus als de knop uit is dan moet je de huidige tijd milli() opslaan in starttijd
en je zet het ledje twee keer uit de laatste moet weg.
maak eens een schema.
dus als de knop uit is dan moet je de huidige tijd milli() opslaan in starttijd
en je zet het ledje twee keer uit de laatste moet weg.
maak eens een schema.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Uitschakelvertraging
Hoi,
Ik heb het geprobeerd met de link, ik heb het overgenomen maar LED_BUILTIN vervangen voor ledPin en de knop verplaatst naar ground en pin 2.
Alleen blijft het lampje steeds branden. Wat doe ik verkeerd?
Ik heb het geprobeerd met de link, ik heb het overgenomen maar LED_BUILTIN vervangen voor ledPin en de knop verplaatst naar ground en pin 2.
Alleen blijft het lampje steeds branden. Wat doe ik verkeerd?
Re: Uitschakelvertraging
Je programma iets aangepast:
cpp code
cpp code
/*
* Uitschakelvertraging
*/
/* constanten */
const byte buttonPin = 11;
const byte ledPin = 5;
const unsigned long interval = 10000;
/* variabelen */
unsigned long timerState = 0;
unsigned int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == 0) {
if (timerState == 0) {
} else {
if ((millis() - timerState) > interval) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
}
} else {
timerState = millis();
}
}
Re: Uitschakelvertraging
Mijn voorbeeld ( https://github.com/Koepel/Fun_with_millis/blob/master/millis_single_delay.ino ) heb ik aangepast, zodat het eenvoudiger is om de pin van de led te wijzigen.
Het voorbeeld van FPCUser gebruikt de waarde van millis() en de led gaat pas aan als de knop is losgelaten. Mijn voorbeeld is een soort van single shot timer in software. Kijk eens of je die voorbeelden begrijpt, en kies de sketch die je het gemakkelijkst vind. Kun je uitleggen wat er gebeurt in die sketch? De variabelen zoals "const byte" of "const int" of "unsigned long", dat kun je gewoon zo gebruiken. Het gaat er om dat je de structuur van de code ziet en begrijpt wat er gebeurt.
Als iets niet werkt, dan kun je de hele sketch weer laten zien.
Het voorbeeld van FPCUser gebruikt de waarde van millis() en de led gaat pas aan als de knop is losgelaten. Mijn voorbeeld is een soort van single shot timer in software. Kijk eens of je die voorbeelden begrijpt, en kies de sketch die je het gemakkelijkst vind. Kun je uitleggen wat er gebeurt in die sketch? De variabelen zoals "const byte" of "const int" of "unsigned long", dat kun je gewoon zo gebruiken. Het gaat er om dat je de structuur van de code ziet en begrijpt wat er gebeurt.
Als iets niet werkt, dan kun je de hele sketch weer laten zien.
Re: Uitschakelvertraging
Koepel schreef:
Dat is vreemd. Ik heb het programma nogmaals getest en het ledje gaat toch echt aan als ik de ingangspin hoog maak.
En... blijft nog 10 sec branden nadat hij weer laag is.
Wellicht dat ik een ander type Arduino gebruik, hier een Uno rev 3.
en de led gaat pas aan als de knop is losgelaten.
Dat is vreemd. Ik heb het programma nogmaals getest en het ledje gaat toch echt aan als ik de ingangspin hoog maak.
En... blijft nog 10 sec branden nadat hij weer laag is.
Wellicht dat ik een ander type Arduino gebruik, hier een Uno rev 3.
Re: Uitschakelvertraging
Volgens mij gebruik je het denderen van het signaal om de led aan te zetten.
Maar wat ik me eigenlijk afvraag: "Waar is de poëtische schoonheid van je sketch" ?
Maar wat ik me eigenlijk afvraag: "Waar is de poëtische schoonheid van je sketch" ?
Re: Uitschakelvertraging
Hoi,
Bedankt iedereen ! Het werkt nu allemaal!
Nogmaals bedankt voor iedereen die heeft tips heeft gegeven waarmee ik verder ben gekomen!
Bedankt iedereen ! Het werkt nu allemaal!
Nogmaals bedankt voor iedereen die heeft tips heeft gegeven waarmee ik verder ben gekomen!
10 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten