Waar moet ik beginnen??

Alles wat niet past in bovenstaande onderwerpen
Berichten: 20
Geregistreerd: 28 Apr 2020, 21:24

Re: Waar moet ik beginnen??

Berichtdoor RichardZ » 08 Mei 2021, 21:43

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?

Advertisement

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Waar moet ik beginnen??

Berichtdoor Frits1956 » 08 Mei 2021, 22:17

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.
}

Berichten: 20
Geregistreerd: 28 Apr 2020, 21:24

Re: Waar moet ik beginnen??

Berichtdoor RichardZ » 08 Mei 2021, 22:34

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?

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Waar moet ik beginnen??

Berichtdoor Frits1956 » 08 Mei 2021, 23:08

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
  }

}

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Waar moet ik beginnen??

Berichtdoor ctunes » 08 Mei 2021, 23:43

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. :roll: )


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.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Waar moet ik beginnen??

Berichtdoor ctunes » 09 Mei 2021, 00:00

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():
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.

:geek:

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Waar moet ik beginnen??

Berichtdoor Frits1956 » 09 Mei 2021, 00:42

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 ?

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Waar moet ik beginnen??

Berichtdoor ctunes » 09 Mei 2021, 00:43

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?

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Waar moet ik beginnen??

Berichtdoor ctunes » 09 Mei 2021, 00:52

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.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Waar moet ik beginnen??

Berichtdoor ctunes » 09 Mei 2021, 00:57

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?

VorigeVolgende

Terug naar Theekransje

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten