28-02-2017, 20:11
(28-02-2017, 08:25)Smaczek napisał(a): Witam,
Dwie rzeczy:
- w pętli loop musisz zapisywać do zmiennej val wartość, gdyż w powyższym kodzie wartość masz przypisywaną jedynie w linijce jej deklaracji,
- jeśli val jest typu unsigned long to wartości podawane za case muszą być bez apostrofów.
Pozdrawiam.
Tymczasowo wyrzuciłem komendy odpowiedzialne za obsługę silników tylko żeby było to szybsze do odczytania:
Kod:
unsigned long previousMillis = 0;
int odczyt;
void setup()
{
Serial.begin(9600);
}
void loop(){
unsigned long val = (millis() - previousMillis);
if(Serial.available() > 0){
odczyt = Serial.read();}
if (odczyt == 'z') {
switch (val) {
case 1000:
Serial.println("CASE1");
break;
case 10000:
Serial.println("CASE2");
break;
case 20000:
Serial.println("CASE3");
break;
case 30000:
Serial.println("CASE4");
break;
case 40000:
Serial.println("CASE5");
break;
case 50000:
Serial.println("CASE6");
break;
}
}
}
Oczywiście ten kod się kompiluje i nawet coś działa, ale chyba nie do końca zgodnie z moim zamiarem, bo po wysłaniu 'z' do arduino, po 4 sekundach 10 razy wyświetla się 'CASE2', po 14 sekundach 10 razy 'CASE3' i tak dalej w odstępach 10 sekundowych kolejne, oprócz 'CASE1'.
Ale gdy na końcu pętli loop dodam delay(500); to po 20 sekundach wyświetla się 'CASE4', po kolejnych 10 sekundach 'CASE5' i po kolejnych 10 'CASE6' tym razem pojedynczo. To już lepiej, ale brakuje początku (CASE1, 2 i 3). Nie bardzo rozumiem dlaczego tak to działa?