Delays vervangen in millis()

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 50
Geregistreerd: 12 Mrt 2016, 23:38

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 22:11

Dit lijkt er meer op volgens mij, sketch werkt wel op deze manier.

cpp code
// Arduino IDE 1.0.5
// Led knoppen millis timing
// Maart 2018
// viewtopic.php?f=25&t=2920


const int switchPins[2] = {
2, 3}; // switch P1=2 / switch P2=3
const int ledPins[2] = {
10, 11}; // led P1=10 / led P2=11


unsigned long previousMillis[2];
const int Interval = 100; // led blink interval in milliseconds
boolean active[2] = {
false, false }; // indicates if led is blinking
int count[2]; // count the blinks
int ledState[2]; // the state of the led


void setup()
{
// set each pin connected to an SWITCH to input mode
for(int i=0; i<2; i++){ //this is a loop and will repeat two times
pinMode(switchPins[i],INPUT_PULLUP); //we use this to set each LED pin to output
}
// set each pin connected to an LED to output mode
for(int i=0; i<2; i++){ //this is a loop and will repeat two times
pinMode(ledPins[i],OUTPUT); //we use this to set each LED pin to output
}
}

void loop()
{
for( int i=0; i<2; i++)
{
if( digitalRead( switchPins[i]) == LOW) // low is pressed
{
// start or restart the blinking of L1 led.
active[i] = true;
previousMillis[i] = millis();
count[i] = 0;
ledState[i] = HIGH;
digitalWrite( ledPins[i], HIGH);


int j;
if ( i == 0 )
{
j = 1;
}
else
{
j = 0;
}

if( !active[j])
{
digitalWrite( ledPins[j], LOW);
}
}




int j;
if ( i == 0 )
{
j = 1;
}
else
{
j = 0;
}

if( ledPins[j])
{
if( millis() - previousMillis[j] >= Interval)
{
previousMillis[j] = millis();

count[j]++;
if( count[j] > 24) // count longer
{
active[j] = false;
}

if( ledState[j] == HIGH || count[j] > 20) // force low above 20
ledState[j] = LOW;
else
ledState[j] = HIGH;


digitalWrite( ledPins[j], ledState[j]);
}
}
}
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Delays vervangen in millis()

Berichtdoor nicoverduin » 20 Mrt 2018, 22:26

Het voorbeeld gaat over het gebruik van arrays. Als iemand arrays niet begrijpt dan kan een tutorial verduidelijking geven. Los van jouw probleem. Maar goed inmiddels is het kennelijk wel gevallen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 22:36

De variabele 'j' is alleen om de andere led uit te zetten.
Nu ga je ook het knipperen met de andere led doen.

Zou je dat tweede deel weer normaal willen maken ?

Dus dit
cpp code
int j;
if ( i == 0 )
{
j = 1;
}
else
{
j = 0;
}

if( ledPins[j])
{
if( millis() - previousMillis[j] >= Interval)
{
previousMillis[j] = millis();

count[j]++;
if( count[j] > 24) // count longer
{
active[j] = false;
}

if( ledState[j] == HIGH || count[j] > 20) // force low above 20
ledState[j] = LOW;
else
ledState[j] = HIGH;


digitalWrite( ledPins[j], ledState[j]);
}
}


Vervangen door:
cpp code
if( ledPins[i])
{
if( millis() - previousMillis[i] >= Interval)
{
previousMillis[i] = millis();

count[i]++;
if( count[i] > 24) // count longer
{
active[i] = false;
}

if( ledState[i] == HIGH || count[i] > 20) // force low above 20
ledState[i] = LOW;
else
ledState[i] = HIGH;


digitalWrite( ledPins[i], ledState[i]);
}
}


Als je toch bezig bent, dan kan dat faden er ook wel weer bij ;)

Berichten: 50
Geregistreerd: 12 Mrt 2016, 23:38

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 22:51

Zo dus.

cpp code
// Arduino IDE 1.0.5
// Led knoppen millis timing
// Maart 2018
// viewtopic.php?f=25&t=2920


const int switchPins[2] = {
2, 3}; // switch P1=2 / switch P2=3
const int ledPins[2] = {
10, 11}; // led P1=10 / led P2=11


unsigned long previousMillis[2];
const int Interval = 100; // led blink interval in milliseconds
boolean active[2] = {
false, false }; // indicates if led is blinking
int count[2]; // count the blinks
int ledState[2]; // the state of the led


void setup()
{
// set each pin connected to an SWITCH to input mode
for(int i=0; i<2; i++){ //this is a loop and will repeat two times
pinMode(switchPins[i],INPUT_PULLUP); //we use this to set each LED pin to output
}
// set each pin connected to an LED to output mode
for(int i=0; i<2; i++){ //this is a loop and will repeat two times
pinMode(ledPins[i],OUTPUT); //we use this to set each LED pin to output
}
}

void loop()
{
for( int i=0; i<2; i++)
{
if( digitalRead( switchPins[i]) == LOW) // low is pressed
{
// start or restart the blinking of L1 led.
active[i] = true;
previousMillis[i] = millis();
count[i] = 0;
ledState[i] = HIGH;
digitalWrite( ledPins[i], HIGH);


int j;
if ( i == 0 )
{
j = 1;
}
else
{
j = 0;
}

if( !active[j])
{
digitalWrite( ledPins[j], LOW);
}
}


if( ledPins[i])
{
if( millis() - previousMillis[i] >= Interval)
{
previousMillis[i] = millis();

count[i]++;
if( count[i] > 24) // count longer
{
active[i] = false;
}

if( ledState[i] == HIGH || count[i] > 20) // force low above 20
ledState[i] = LOW;
else
ledState[i] = HIGH;


digitalWrite( ledPins[i], ledState[i]);
}
}
}
}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 22:58

Ja.
Begrijp je nu het uitzetten van "de andere led", dat even met variabele 'j' de andere index bepalen.

Intussen heb je dus alleen maar code van anderen. Dus ik vraag me of in hoeverre je alles begrijpt. Wanneer je iets wilt wijzigen, dan kom je misschien in de problemen.

Het omzetten van delay() naar millis() gaat op deze manier. Dat is dus een hele andere opzet van de sketch.

Berichten: 50
Geregistreerd: 12 Mrt 2016, 23:38

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 23:16

Ik begrijp het ;), bedankt voor je geduld.

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten