Delays vervangen in millis()
46 berichten
• Pagina 5 van 5 • 1, 2, 3, 4, 5
Re: Delays vervangen in millis()
Dit lijkt er meer op volgens mij, sketch werkt wel op deze manier.
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Delays vervangen in millis()
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.
Re: Delays vervangen in millis()
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
Vervangen door:
cpp code
Als je toch bezig bent, dan kan dat faden er ook wel weer bij
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
Re: Delays vervangen in millis()
Zo dus.
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
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]);
}
}
}
}
Re: Delays vervangen in millis()
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.
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.
46 berichten
• Pagina 5 van 5 • 1, 2, 3, 4, 5
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten