Waar moet ik beginnen??
Re: Waar moet ik beginnen??
beste shooter,
Ook daar heb ik al een keer naar gekeken de blink without delay.
maar iedere voorbeeld wat ik kan vinden is met een interval dus een vaste tussen pauze tussen lampje aan en uit.
En omdat ik de programmeer taal niet machtig ben weet ik niet hoe je het anders moet doen.
en dat verhaal van array is dat beter als millis of gewoon ook een optie?
Ook daar heb ik al een keer naar gekeken de blink without delay.
maar iedere voorbeeld wat ik kan vinden is met een interval dus een vaste tussen pauze tussen lampje aan en uit.
En omdat ik de programmeer taal niet machtig ben weet ik niet hoe je het anders moet doen.
en dat verhaal van array is dat beter als millis of gewoon ook een optie?
Advertisement
Re: Waar moet ik beginnen??
Probeer deze eens.
- Code: Alles selecteren
/*
Blink without Delay
Turns on and off a light emitting diode (LED) connected to a digital pin,
without using the delay() function. This means that other code can run at the
same time without being interrupted by the LED code.
The circuit:
- Use the onboard LED.
- Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
is set to the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your
Arduino model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
modified 9 Jan 2017
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number:
const int ledPin = LED_BUILTIN;// the number of the LED pin
// Variables will change:
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
long interval = 1000; // interval is nu een variabele at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the difference
// between the current time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
interval = interval+200; // hier wordt interval steeds met 200 opgehoogd.
}
Re: Waar moet ik beginnen??
beste Frits ,
Heb de code geprobeerd maar er gebeurd niks het ledje gaat niet branden.
Maar als ik de code goed begrijp zou de interval bij iedere loop met 200millis verlangd moeten worden?
Heb de code geprobeerd maar er gebeurd niks het ledje gaat niet branden.
Maar als ik de code goed begrijp zou de interval bij iedere loop met 200millis verlangd moeten worden?
Re: Waar moet ik beginnen??
Oeps, had het optellen niet op de juiste plek neergezet.
- Code: Alles selecteren
/*
Blink without Delay
Turns on and off a light emitting diode (LED) connected to a digital pin,
without using the delay() function. This means that other code can run at the
same time without being interrupted by the LED code.
The circuit:
- Use the onboard LED.
- Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
is set to the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your
Arduino model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
modified 9 Jan 2017
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number:
const int ledPin = LED_BUILTIN;// the number of the LED pin
// Variables will change:
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change:
unsigned long interval = 100; // interval at which to blink (milliseconds)
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
interval += 200; // is zelfde als interval = interval +200
}
}
Re: Waar moet ik beginnen??
Je maakt een aantal fouten.
(Die weliswaar niet direct vallen te verwijten: de compiler had moeten protesteren, of heb je alle waarschuwingen uitstaan soms? Dom genoeg lijkt dat wel de verstekwaarde. )
1.
Op zich niet verkeerd, maar een integer kan niet omgaan met een boolean.
Wat jij hier doet komt neer op:
2.
Dat gaat nooit werken zoals jij dacht.
Dit wel:
Dat het compileert is geen bug in de arduino IDE.
Wat jij hier doet is aan currentMillis het adres van de functie millis() toewijzen.
In C geen foute actie, daarom compileert het.
3.
Geen fout an sich, hetzelfde bereik je echter met:
de ternary operator.
Of nog leuker:
Nieuwsgierig:
Heb jij ooit in Java, of een dergelijke taal, geprogrammeerd?
(Die weliswaar niet direct vallen te verwijten: de compiler had moeten protesteren, of heb je alle waarschuwingen uitstaan soms? Dom genoeg lijkt dat wel de verstekwaarde. )
1.
- Code: Alles selecteren
int ledState = LOW;
Op zich niet verkeerd, maar een integer kan niet omgaan met een boolean.
Wat jij hier doet komt neer op:
- Code: Alles selecteren
int ledState = 0;
bool ledState = LOW // ziet er al beter uit
2.
- Code: Alles selecteren
unsigned long currentMillis = millis();
Dat gaat nooit werken zoals jij dacht.
Dit wel:
- Code: Alles selecteren
unsigned long currentMillis;
currentMillis = millis();
Dat het compileert is geen bug in de arduino IDE.
Wat jij hier doet is aan currentMillis het adres van de functie millis() toewijzen.
In C geen foute actie, daarom compileert het.
3.
- Code: Alles selecteren
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
Geen fout an sich, hetzelfde bereik je echter met:
- Code: Alles selecteren
ledState = ledState ? LOW : HIGH
de ternary operator.
Of nog leuker:
- Code: Alles selecteren
ledState ^= ledState
Nieuwsgierig:
Heb jij ooit in Java, of een dergelijke taal, geprogrammeerd?
Laatst gewijzigd door ctunes op 09 Mei 2021, 00:33, in totaal 4 keer gewijzigd.
Re: Waar moet ik beginnen??
En dan nog iets: iedere keer als je weer in loop() komt en iets als: "int a" gebruikt, dan wordt "a" op nul gezet.
Wil je onthouden wat "a" was, dan moet je: of "a" "static" maken, of global.
Dus buiten setup() en loop():
intialiseert geheugenruimte waar de waarde van integer "a" opgeslagen wordt.
Binnen setup() en loop() kan:
Hetzelfde doen.
Het laatste geniet de voorkeur, want soms komen "globals" in flash terecht (bij ruimtegebrek) terwijl statics in sram worden gehouden.
(Althans, dat is mijn ervaring)
En het lezen van flash geeft een enorme "performance penalty".
En daar zit jij dan: je projectje te bestuderen, en je af te vragen waarom het op een 328 wel werkt en op een 168 niet.
Wil je onthouden wat "a" was, dan moet je: of "a" "static" maken, of global.
Dus buiten setup() en loop():
- Code: Alles selecteren
int a = 2;
intialiseert geheugenruimte waar de waarde van integer "a" opgeslagen wordt.
Binnen setup() en loop() kan:
- Code: Alles selecteren
static int a = 2;
Hetzelfde doen.
Het laatste geniet de voorkeur, want soms komen "globals" in flash terecht (bij ruimtegebrek) terwijl statics in sram worden gehouden.
(Althans, dat is mijn ervaring)
En het lezen van flash geeft een enorme "performance penalty".
En daar zit jij dan: je projectje te bestuderen, en je af te vragen waarom het op een 328 wel werkt en op een 168 niet.
Re: Waar moet ik beginnen??
clunes, geen idee waar je mee bezig ben maar volgens mij ben je iemand die voor het eerst rijlessen neemt aan het leren hoe hij een grandprix moet winnen. Wellicht wat minder grote stappen ?
Re: Waar moet ik beginnen??
Frits1956 schreef:clunes, geen idee waar je mee bezig ben maar volgens mij ben je iemand die voor het eerst rijlessen neemt aan het leren hoe hij een grandprix moet winnen. Wellicht wat minder grote stappen ?
?
Waar vlieg ik de bocht uit dan?
Re: Waar moet ik beginnen??
Frits1956 schreef:clunes, geen idee waar je mee bezig ben maar volgens mij ben je iemand die voor het eerst rijlessen neemt aan het leren hoe hij een grandprix moet winnen. Wellicht wat minder grote stappen ?
Oh wacht ...
Laat ik het als volgt interpreteren:
clunes, geen idee waar je mee bezig bent, maar volgens mij ben je iemand die voor het eerst rijlessen geeft aan iemand die aan het leren is hoe hij een grandprix moet winnen. Wellicht wat minder grote stappen.
Ok.
Delay() is evil!
Dat is stap 1.
Dat hoort achter het stuur niet thuis.
Re: Waar moet ik beginnen??
ctunes schreef:
- Code: Alles selecteren
unsigned long currentMillis = millis();
Dat gaat nooit werken zoals jij dacht.
Dit wel:
- Code: Alles selecteren
unsigned long currentMillis;
currentMillis = millis();
Dat het compileert is geen bug in de arduino IDE.
Wat jij hier doet is aan currentMillis het adres van de functie millis() toewijzen.
In C geen foute actie, daarom compileert het.
Waarom zou dat niet duidelijk genoeg zijn?
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten