Delays vervangen in millis()

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Delays vervangen in millis()

Berichtdoor Koepel » 19 Mrt 2018, 20:05

Ik heb het niet uitgeprobeerd, maar ik zie toch echt niet "de andere led" er in zitten :cry:

Het scheelt code, maar belangrijker is dat de code er niet twee keer in zit. Het is mooier als bepaalde functionaliteit maar één keer wordt geprogrammeerd.

En het faden ?
Het faden staat dus los van door de kanalen lopen.

cpp code
void loop()
{
for( int i=0; i<2; i++) // ga beide kanalen af
{
...
}


// Kijk of er gefade moet worden
if( !active[0] && !active[1])
{
...
}
}

Advertisement

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 12:30

Ik pieker me suf maar kom er gewoon niet aan uit. :cry:

''for( int i=0; i<2; i++)'' is door beide kanalen, dus is ''int de_andere_led;'' dan ''int i=1;'' ?

Code: Alles selecteren
      if( !active[1])
      {
        digitalWrite( ledPins[1], LOW);
      }

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 17:17

In de taal 'c' begint een array bij index 0.

Dus dit array: const int switchPins[2] = { 2, 3}
dat heeft twee elementen.
Dat is switchPins[0], die is 2,
en dat is switchPins[1], die is 3.

De meest gangbare manier om een for-loop met een array te gebruiken is: for ( int i=0; i<2; i++)
Dat betekend: maak een variabele 'i', start met nul, en daarna verhogen zolang het kleiner dan twee blijft.
Dus alles binnen die for-loop wordt uitgevoerd met 'i' is 0 en 'i' is 1.

Dus de variabele 'i' is eerst 0, en die wordt gebruikt als index voor het array.
De index van de andere led is dan index 1.

Daarna is 'i' een 1, en de index van de andere led is dan 0.

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

Re: Delays vervangen in millis()

Berichtdoor nicoverduin » 20 Mrt 2018, 17:35

Pexy schreef:Ik pieker me suf maar kom er gewoon niet aan uit. :cry:

''for( int i=0; i<2; i++)'' is door beide kanalen, dus is ''int de_andere_led;'' dan ''int i=1;'' ?

Code: Alles selecteren
      if( !active[1])
      {
        digitalWrite( ledPins[1], LOW);
      }

https://www.arduino.cc/en/Tutorial/Arrays
scheelt piekeren.......
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 » 20 Mrt 2018, 20:01

Is dit goed?

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 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[0]) == LOW) // low is pressed
{
// start or restart the blinking of L1 led.
active[0] = true;
previousMillis[0] = millis();
count[0] = 0;
ledState[0] = HIGH;
digitalWrite( ledPins[0], HIGH);

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


if( digitalRead( switchPins[1]) == LOW) // low is pressed
{
// start or restart the blinking of L2 led.
active[1] = true;
previousMillis[1] = millis();
count[1] = 0;
ledState[1] = HIGH;
digitalWrite( ledPins[1], HIGH);

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


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

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

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


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



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

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

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


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


//
// kijk of de fade timer loopt
//
if( !active[0] && !active[1])
{
//
// 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( ledPins[0], 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( ledPins[1], fadeArray[fadeIndex2]);
}
}
}

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 20:48

Nee, nu loop je het moeras in.
De arrays zijn bedoelt om een bepaalde functionaliteit te programmeren, zodat er geen dubbele stukken code in staan. Nu heb je code voor index 0 en voor index 1 uitgeschreven, voor dat deel zou je dan net zo goed de arrays weg kunnen laten.

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 21:14

Probeer dit eens:

cpp code
// Stel in de wei staan een koe en een paard.
// De koe eet alleen appels en het paard eet alleen peren.
// Als de koe bezig is om een appel te eten, dat mag het paard geen peer eten.
// Als het paard een peer eet, dan mag de koe geen appels eten.
//
// De koe gooit daarom de peer weg, als hij een appel gaat eten.
// Het paard gooit de appel weg, al het een peer gaat eten.

char *beest[2] = { "koe", "paard" };
char *eten[2] = { "appel", "peer" };

void setup()
{
Serial.begin( 9600);
}

void loop()
{
for( int i=0; i<2; i++)
{
Serial.print( "Hallo ik ben nu een ");
Serial.print( beest[i]);
Serial.print( ". Ik ga een ");
Serial.print( eten[i]);
Serial.print( " eten, en ik gooi de ");
int j;
if ( i == 0 )
{
j = 1;
}
else
{
j = 0;
}
Serial.print( eten[j]);
Serial.print( " weg.");
Serial.println();
delay( 2000);
}
Serial.println("------------------------------------------------------------------------");
delay( 5000);
}

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 21:17

Nu weet ik het echt niet meer. :shock:

De tutorial die Nico liet zien laat de ledjes een richting op gaan en weer terug, en dat is in dit geval niet de bedoeling.
Hoop dat je me nog een hint in de code kan geven.

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

Re: Delays vervangen in millis()

Berichtdoor Pexy » 20 Mrt 2018, 21:24

Aha, dus de j die er nu bij komt zorgt ervoor dat de keuze word gemaakt tussen 0 en 1!

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

Re: Delays vervangen in millis()

Berichtdoor Koepel » 20 Mrt 2018, 21:28

De koe gaat bepalen wat het andere eten is. En het paard kijk ook wat het andere eten is.

Het wordt natuurlijk pas echt leuk, als er 10 verschillende beesten in de wei staan, en de koe moet eerst van alle andere het eten weg gaan gooien. Dat komt dan overeen met 10 schakelaar en 10 ledjes waarbij alle andere uitgezet worden. Maar goed, daar hoef je nu niet over na te denken.

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten