09-02-2019, 23:36
Witam
proszę o pomoc w zrozumieniu działania funkcji "millis" .
Założyłem sobie do wykonania proste (tak myślałem na starcie) zadanie:
- trzy wyjścia
- jedno wejście
- po podaniu na wejście "H", wystaw kolejno "H" na wyjścia.
Na pierwsze wyjście po 2s i każde następne po kolejnej sekundzie.
Nie chciałem tego robić z wykorzystaniem "delay" lecz za pomocą "millis".
Efekt mojej twórczości powoduje po podaniu "H" na wejście wystawianie natychmiastowe wystawienie "H" na wszystkich wyjściach.
Proszę o podpowiedź gdzie popełniam błąd
proszę o pomoc w zrozumieniu działania funkcji "millis" .
Założyłem sobie do wykonania proste (tak myślałem na starcie) zadanie:
- trzy wyjścia
- jedno wejście
- po podaniu na wejście "H", wystaw kolejno "H" na wyjścia.
Na pierwsze wyjście po 2s i każde następne po kolejnej sekundzie.
Nie chciałem tego robić z wykorzystaniem "delay" lecz za pomocą "millis".
Efekt mojej twórczości powoduje po podaniu "H" na wejście wystawianie natychmiastowe wystawienie "H" na wszystkich wyjściach.
Proszę o podpowiedź gdzie popełniam błąd
Kod:
#define L1 2 //blue
#define L2 3 //green
#define L3 4 //red
#define start 8 //sw1
int stateL1 = LOW;
int stateL2 = LOW;
int stateL3 = LOW;
const unsigned long period2 = 2000;
const unsigned long period3 = 3000;
//const unsigned long period4 = 4000;
unsigned long startMillis;
unsigned long current2Millis;
unsigned long current3Millis;
//unsigned long current4Millis;
void setup()
{
//Serial.begin(9600);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(start, INPUT);
startMillis = millis();
}
void loop()
{
if (digitalRead(start) == HIGH)
{
digitalWrite(L1,!digitalRead(L1));
current2Millis = startMillis; //przepisanie startMillis do current2Millis
if(current2Millis + period2 >= startMillis)
{
digitalWrite(L2,!digitalRead(L2));
current3Millis = startMillis;
}
if(current3Millis + period3 >= startMillis)
{
digitalWrite(L3,!digitalRead(L3));
}
}
}