Delays vervangen in millis()

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Delays vervangen in millis()

Berichtdoor nicoverduin » 15 Mrt 2018, 20:21

Wat altijd weer jammer is dat de TS zich afvraagt waarom er een S-curve is en niet even de moeite neem om een simpel test programmatje maakt om het verschil te zien.....:(
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 16 Mrt 2018, 17:42

Sketch omzetten naar arrays is dus eigelijk de code verminderen als ik het goed begrijp,
en
als 'i' een '0' is, dan is '1' de andere en omgekeerd.
is dus kiezen welke led er iets moet doen?
Daar ben ik niet aan uit, heb de sketch wel gewijzigd maar doet nog totaal niet wat het moet doen.
Heb het stukje faden wel even uitgeschakeld:
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


// Later in de code is "sizeof(fadeArray)" gebruikt,
// dat kan omdat het enkele bytes zijn.
byte fadeArray[] =
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 22, 26,
30, 35, 40, 45, 50, 56, 62, 68, 74, 81, 88, 95, 102, 110, 118, 126, 135,
143, 152, 161, 170, 180, 190, 200, 210, 221, 232, 243, 249, 254
};

int fadeIndex = 0; // index in de fade tabel
unsigned long fadeTimer; // timer om van stap naar stap te springen
const int fade_interval = 100; // verspringen van sterkte 1 x per 100 msec
bool up = true; // beginnen met oplopen van fading effect


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 eight times
pinMode(switchPins[i],INPUT); //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 eight 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);

if( !active[i])
{
digitalWrite( ledPins[i], 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]);
}
}


/*
//
// kijk of de fade timer loopt
//
if( !L1Active && !L2Active)
{
//
// timer loopt dus controleer of deze is verlopen
//
if( millis() - fadeTimer > fade_interval)
{
fadeTimer = millis();
//
// timer is verlopen dus nu kijken of we op of neer moeten gaan
//
if( up)
{
//
// oplopend dus verhoog de fade index
//
fadeIndex++;
//
// en kijk of we op het maximum zitten
//
if( fadeIndex == sizeof(fadeArray))
{
//
// we zitten op de top dus richting omzetten en aflopen
//
up = !up;
fadeIndex--; // op de hoogste positie van de tabel
}
}
else
{
//
// richting is aflopend dus verlaag de index
//
fadeIndex--;
//
// kijk of we onderaan de array zitten
//
if( fadeIndex == -1)
{
//
// we hebben de laatste index bereikt dus gaan we weer omhoog
//
up = !up;
fadeIndex = 0; // op de laagste positie van de tabel
}
}
//
// nu nog de output wegschrijven
//
analogWrite( L1Pin, fadeArray[fadeIndex]);

// Als de ene led op het helderste punt is, dan is de andere het meest gedimd.
// En halverwege de tabel komen ze elkaar tegen.
// De hoogste index is "sizeof(array) - 1"
int fadeIndex2 = sizeof( fadeArray) - 1 - fadeIndex;
analogWrite( L2Pin, fadeArray[fadeIndex2]);
}
*/
}
}

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 16 Mrt 2018, 18:42

Dat ziet er best goed uit hoor :D

Het faden zou ik gewoon met de index helemaal uitschrijven:
Code: Alles selecteren
if( !active[0] && !active[1])


Je hebt als het ware twee kanalen van een schakelaar-met-led. En de for-loop "for( int i=0; i<2; i++)" loopt door de kanalen.
Het faden hoort daar buiten te zitten, die heb je nu per ongeluk er binnen gezet.

Tot nu toe leveren wij vrijwel alle code. Dus ik wil graag dat je het probleem van "de andere led" zelf oplost.
Bij het starten of herstarten van het knipperen, dan wordt gekeken of "de andere led" actief is, en die wordt eventueel uitgezet.

Dus de for-loop "for( int i=0; i<2; i++)" doet eerst kanaal voor 'i' is '0' en dan voor 'i' is '1'. Wat is dan "de andere led" of "het andere kanaal" ?

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 16 Mrt 2018, 20:47

Ik zal mijn grijze massa eens flink aan het werk zetten ;) , tot nu toe lukt het me nog niet om het i=0 en i=1 op te roepen.

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

Re: Delays vervangen in millis()

Berichtdoor nicoverduin » 16 Mrt 2018, 21:17

Misschien eens tijd om energie in basiskennis steken?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 16 Mrt 2018, 22:14

nicoverduin schreef:Misschien eens tijd om energie in basiskennis steken?


Geloof me dat doe ik echt, maar voor een simpele ziel als mij is C++(zelfde als arduino?) programmeren echt next level, zeker zo uit het blote hoofdje zoals jullie dat doen ;)
maar ik zou het zo graag willen.
Moet ook zeggen dat internet vol staat met tutorials, maar iedereen heeft toch weer een andere manier en dat is verwarrend.
Laat ik maar zeggen dat het wel goed komt, ooit :D

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 17 Mrt 2018, 00:01

Begrijp je de bedoeling?

In het stukje "hier jouw code !" daar graag "de_andere_led" de waarde (de array index) geven van de andere led. Er zijn meer dan 10 goede manieren. Ik krijg de indruk dat je nog niet eerder met array's had gewerkt.

En ja, ieder heeft zijn eigen stijl. En iedereen vindt zijn eigen stijl het beste.
Misschien krijg je ook wel een eigen stijl die het beste bij je past, en misschien ga je ook wel denken dat jouw stijl de beste is ;)

cpp code
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 de_andere_led;

// hier jouw code !

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

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

Re: Delays vervangen in millis()

Berichtdoor nicoverduin » 17 Mrt 2018, 09:27

Of hij let beter op in de les:)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 17 Mrt 2018, 13:13

nicoverduin schreef:Of hij let beter op in de les:)
Ik ben niet bepaald een school jongen meer ;) misschien dat het daarom wat roestig gaat, maar sketch werkt nu wel zonder het stukje faden.


In het stukje "hier jouw code !" daar graag "de_andere_led" de waarde (de array index) geven van de andere led.
Het spreekwoordelijke kwartje wil niet vallen :( , en nu helemaal, nu de sketch het wel doet alleen zonder het faden. Dat is weer het volgende probleem. :D


Ik krijg de indruk dat je nog niet eerder met array's had gewerkt.
Dat klopt als een bus, daarom ben ik blij dat je het mij probeert uit te leggen.

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 19 Mrt 2018, 13:35

Hallo, ik snap de telling van arrays van 0 t&m een x nummer.
De sketch werkt op deze manier en scheelt inderdaad een hoop code. :D
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);

if( !active[i])
{
digitalWrite( ledPins[i], 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]);
}
}
}
}

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten