Delays vervangen in millis()
46 berichten
• Pagina 4 van 5 • 1, 2, 3, 4, 5
Re: Delays vervangen in millis()
Ik heb het niet uitgeprobeerd, maar ik zie toch echt niet "de andere led" er in zitten
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
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
Re: Delays vervangen in millis()
Ik pieker me suf maar kom er gewoon niet aan uit.
''for( int i=0; i<2; i++)'' is door beide kanalen, dus is ''int de_andere_led;'' dan ''int i=1;'' ?
''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);
}
Re: Delays vervangen in millis()
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.
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.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Delays vervangen in millis()
Pexy schreef:Ik pieker me suf maar kom er gewoon niet aan uit.
''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.......
Re: Delays vervangen in millis()
Is dit goed?
cpp code
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]);
}
}
}
Re: Delays vervangen in millis()
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.
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.
Re: Delays vervangen in millis()
Probeer dit eens:
cpp code
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);
}
Re: Delays vervangen in millis()
Nu weet ik het echt niet meer.
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.
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.
Re: Delays vervangen in millis()
Aha, dus de j die er nu bij komt zorgt ervoor dat de keuze word gemaakt tussen 0 en 1!
Re: Delays vervangen in millis()
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.
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.
46 berichten
• Pagina 4 van 5 • 1, 2, 3, 4, 5
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten