• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
z pętlą zgubiłem się w czasie
#1
Dzień dobry
jako bardzo świeży użytkownik arduino i C++ zgubiłem się i nie potrafię rozwiązać problemu. Przeglądając różne kursy itp nie udało mi się  znaleźć odpowiedzi. Być może gdzieś ona była ale nie wpadłem na to że to ona.
Problem tkwi w reakcji funkcji na wartości czasu. 
Cały projekt  docelowo,  za pomocą czujnika ultradźwiękowego ma wyzwalać funkcję (sekwencję) która steruje 16toma przekaźnikami, sekwencja ma wyzwolić się na określony czas. 
Tak ma to być sterowanie oświetleniem świątecznym które załączy się gdy ktoś przejdzie za płotemSmile

Problemem jest to że sekwencja sama w sobie działa prawidłowo czyli poszczególne wyjścia załączają się zgodnie z zaplanowanymi częstotliwościami, ale dodanie jakiegokolwiek warunku (nawet prostego guzika) powoduje że wszystkie zaczynają działać synchronicznie i reagują tylko na jedną zmienną (w moim przypadku tempo), tak jakby zmienna "memczask.." nie była rozpoznawana.
w którym miejscu popełniam błąd i w którym miejscu kodu powinna być pobierana wartość czasu by sekwencja działała prawidłowo.
Z góry bardzo dziękuję za pomoc

Kod:
#define trigPin 3
#define echoPin 2
#define ldgr 52 // dioda zielona
#define ldrd 53 // dioda czerwona
#define fr 11
#define sw 12
#define k1 22  // przekaźnik 1
#define k2 23  // przekaźnik 2
#define k3 24  // przekaźnik 3
#define k4 25  // przekaźnik 4
#define k5 26  // przekaźnik 5
#define k6 27  // przekaźnik 6
#define k7 28  // przekaźnik 7
#define k8 29  // przekaźnik 8
#define k9 30  // przekaźnik 9
#define k10 31 // przekaźnik 10
#define k11 32 // przekaźnik 11
#define k12 33 // przekaźnik 12
#define k13 34 // przekaźnik 13
#define k14 35 // przekaźnik 14
#define k15 36 // przekaźnik 15
#define k16 37 // przekaźnik 16
int l = 1; // licznik zdarzeń
int sk1 = HIGH; // włączone
int sk2 = HIGH; // włączone
int sk3 = HIGH; // włączone
int sk4 = HIGH; // włączone
int sk5 = HIGH; // włączone
int sk6 = HIGH; // włączone
int sk7 = HIGH; // włączone
int sk8 = HIGH; // włączone
int sk9 = HIGH; // włączone
int sk10 = HIGH; // włączone
int sk11 = HIGH; // włączone
int sk12 = HIGH; // włączone
int sk13 = HIGH; // włączone
int sk14 = HIGH; // włączone
int sk15 = HIGH; // włączone
int sk16 = HIGH; // włączone
int sk = HIGH;

void setup() {

  Serial.begin(9600);
  pinMode(k1, OUTPUT);
  pinMode(k2, OUTPUT);
  pinMode(k3, OUTPUT);
  pinMode(k4, OUTPUT);
  pinMode(k5, OUTPUT);
  pinMode(k6, OUTPUT);
  pinMode(k7, OUTPUT);
  pinMode(k8, OUTPUT);
  pinMode(k9, OUTPUT);
  pinMode(k10, OUTPUT);
  pinMode(k11, OUTPUT);
  pinMode(k12, OUTPUT);
  pinMode(k13, OUTPUT);
  pinMode(k14, OUTPUT);
  pinMode(k15, OUTPUT);
  pinMode(k16, OUTPUT);
  pinMode(ldgr, OUTPUT);
  pinMode(ldrd, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
}

int czastrwania = 10;
int tempo = 1000;

unsigned long migk1 = tempo;
unsigned long migk2 = tempo;
unsigned long migk3 = tempo;
unsigned long migk4 = tempo;
unsigned long migk5 = tempo;
unsigned long migk6 = tempo;
unsigned long migk7 = tempo;
unsigned long migk8 = tempo;
unsigned long migk9 = tempo;
unsigned long migk10 = tempo;
unsigned long migk11 = tempo;
unsigned long migk12 = tempo;
unsigned long migk13 = tempo;
unsigned long migk14 = tempo;
unsigned long migk15 = tempo;
unsigned long migk16 = tempo;


unsigned long memczask1 = +100;
unsigned long memczask2 = +200;
unsigned long memczask3 = +300;
unsigned long memczask4 = +400;
unsigned long memczask5 = +500;
unsigned long memczask6 = +600;
unsigned long memczask7 = +700;
unsigned long memczask8 = +800;
unsigned long memczask9 = -100;
unsigned long memczask10 = -200;
unsigned long memczask11 = -300;
unsigned long memczask12 = -400;
unsigned long memczask13 = -500;
unsigned long memczask14 = -600;
unsigned long memczask15 = -700;
unsigned long memczask16 = -800;
int aczas = 0;


void przejscie() //sekwencja wielowątkowa do odtwarzania przez określony czas
{ digitalWrite(ldgr, sk);
digitalWrite(ldrd,!sk);
  aczas = millis();
 
  if (aczas - memczask1 >= migk1) {        //załączanie przekaźnika 1
    memczask1 = aczas;
    sk1 = !sk1;
    digitalWrite(k1, sk1);
  }
  if (aczas - memczask2 >= migk2) {        //załączanie przekaźnika 2
    memczask2 = aczas;
    sk2 = !sk2;
    digitalWrite(k2, sk2);
  }
  if (aczas - memczask3 >= migk3) {        //załączanie przekaźnika 3
    memczask3 = aczas;
    sk3 = !sk3;
    digitalWrite(k3, sk3);
  } if (aczas - memczask4 >= migk4) {      //załączanie przekaźnika 4
    memczask4 = aczas;
    sk4 = !sk4;
    digitalWrite(k4, sk4);
  } if (aczas - memczask5 >= migk5) {      //załączanie przekaźnika 5
    memczask5 = aczas;
    sk5 = !sk5;
    digitalWrite(k5, sk5);
  } if (aczas - memczask6 >= migk6) {      //załączanie przekaźnika 6
    memczask6 = aczas;
    sk6 = !sk6;
    digitalWrite(k6, sk6);
  } if (aczas - memczask7 >= migk7) {      //załączanie przekaźnika 7
    memczask7 = aczas;
    sk7 = !sk7;
    digitalWrite(k7, sk7);
  } if (aczas - memczask8 >= migk8) {      //załączanie przekaźnika 8
    memczask8 = aczas;
    sk8 = !sk8;
    digitalWrite(k8, sk8);
  } if (aczas - memczask9 >= migk9) {      //załączanie przekaźnika 9
    memczask9 = aczas;
    sk9 = !sk9;
    digitalWrite(k9, sk9);
  } if (aczas - memczask10 >= migk10) {    //załączanie przekaźnika 10
    memczask10 = aczas;
    sk10 = !sk10;
    digitalWrite(k10, sk10);
  } if (aczas - memczask11 >= migk11) {    //załączanie przekaźnika 11
    memczask11 = aczas;
    sk11 = !sk11;
    digitalWrite(k11, sk11);
  } if (aczas - memczask12 >= migk12) {    //załączanie przekaźnika 12
    memczask12 = aczas;
    sk12 = !sk12;
    digitalWrite(k12, sk12);
  } if (aczas - memczask13 >= migk13) {    //załączanie przekaźnika 13
    memczask13 = aczas;
    sk13 = !sk13;
    digitalWrite(k13, sk13);
  } if (aczas - memczask14 >= migk14) {    //załączanie przekaźnika 14
    memczask14 = aczas;
    sk14 = !sk14;
    digitalWrite(k14, sk14);
  } if (aczas - memczask15 >= migk15) {      //załączanie przekaźnika 15
    memczask15 = aczas;
    sk15 = !sk15;
    digitalWrite(k15, sk15);
  } if (aczas - memczask16 >= migk16) {      //załączanie przekaźnika 16
    memczask16 = aczas;
    sk16 = !sk16;
    digitalWrite(k16, sk16);
  }

}
void zatrzymanie()

{ digitalWrite(ldgr, !sk);
  digitalWrite(ldrd, sk);
  digitalWrite(k1, sk);
  digitalWrite(k2, !sk);
  digitalWrite(k3, sk);
  digitalWrite(k4, !sk);
  digitalWrite(k5, sk);
  digitalWrite(k6, !sk);
  digitalWrite(k7, sk);
  digitalWrite(k8, sk);
  digitalWrite(k9, sk);
  digitalWrite(k10, sk);
  digitalWrite(k11, sk);
  digitalWrite(k12, sk);
  digitalWrite(k13, sk);
  digitalWrite(k14, sk);
  digitalWrite(k15, sk);
  digitalWrite(k16, sk);
}


void loop() {
  zatrzymanie();

  zakres(10, 100); // zakres odległosci załączania czujnika
  delay(30);
}
int pomiar()
{
  long cza, dystans;


  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  cza = pulseIn(echoPin, HIGH);
  dystans = cza / 58;

  return dystans;
}

void zakres(int a, int b)
{
  int odleglosc = pomiar();

  if ((odleglosc > a) && (odleglosc < b) || (digitalRead(sw)==LOW))  //warunek uruchomienia


  { Serial.print (" włączone="); Serial.println(l++);

    int y = (millis() / 1000);

    do
    {
      przejscie();
    }
    while ((millis() / 1000 - y) < czastrwania);
    Serial.println("stop");
  }
}
 
Odpowiedź
#2
(05-12-2019, 09:29)maniekdii napisał(a): zgubiłem się i nie potrafię rozwiązać problemu

Po przeczytaniu kilku linii kodu też się zgubiłem.
Kod jest nieczytelny. Pomyśl o tablicach i pętli "for".
Napisz komentarze do kodu, co dana sekcja robi.
Pokaż kod, który nie działa. (ten z dopisanym "guzikiem").
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
tu podaję kod z komentarzami. Może będzie czytelniejszy
Kod:
// przypisanie nazw do pinów
#define trigPin 3 // podłączenie czujnika ultradźwiękowego
#define echoPin 2 // podłączenie czujnika ultradźwiękowego
#define ldgr 52 // dioda zielona odtwarzania sekwencji
#define ldrd 53 // dioda czerwona zatrzymania sekwencji
#define fr 11 // wejscie z fotorezystora
#define sw 12 // dodatkowy przycisk wyzwalania
#define k1 22  // przekaźnik 1
#define k2 23  // przekaźnik 2
#define k3 24  // przekaźnik 3
#define k4 25  // przekaźnik 4
#define k5 26  // przekaźnik 5
#define k6 27  // przekaźnik 6
#define k7 28  // przekaźnik 7
#define k8 29  // przekaźnik 8
#define k9 30  // przekaźnik 9
#define k10 31 // przekaźnik 10
#define k11 32 // przekaźnik 11
#define k12 33 // przekaźnik 12
#define k13 34 // przekaźnik 13
#define k14 35 // przekaźnik 14
#define k15 36 // przekaźnik 15
#define k16 37 // przekaźnik 16

// przypisanie stanów do pinów
int l = 1; // licznik zdarzeń
int sk1 = HIGH; // włączone
int sk2 = HIGH; // włączone
int sk3 = HIGH; // włączone
int sk4 = HIGH; // włączone
int sk5 = HIGH; // włączone
int sk6 = HIGH; // włączone
int sk7 = HIGH; // włączone
int sk8 = HIGH; // włączone
int sk9 = HIGH; // włączone
int sk10 = HIGH; // włączone
int sk11 = HIGH; // włączone
int sk12 = HIGH; // włączone
int sk13 = HIGH; // włączone
int sk14 = HIGH; // włączone
int sk15 = HIGH; // włączone
int sk16 = HIGH; // włączone
int sk = HIGH;

void setup() {
             
  Serial.begin(9600);  // uruchomienie komunikacji
  // okreslenie rodzaju pinów
  pinMode(k1, OUTPUT);
  pinMode(k2, OUTPUT);
  pinMode(k3, OUTPUT);
  pinMode(k4, OUTPUT);
  pinMode(k5, OUTPUT);
  pinMode(k6, OUTPUT);
  pinMode(k7, OUTPUT);
  pinMode(k8, OUTPUT);
  pinMode(k9, OUTPUT);
  pinMode(k10, OUTPUT);
  pinMode(k11, OUTPUT);
  pinMode(k12, OUTPUT);
  pinMode(k13, OUTPUT);
  pinMode(k14, OUTPUT);
  pinMode(k15, OUTPUT);
  pinMode(k16, OUTPUT);
  pinMode(ldgr, OUTPUT);
  pinMode(ldrd, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
}

int czastrwania = 10;  // przypisanie wartości do czasu trwania sekwencji
int tempo = 1000;  // określenie tempa załączania

// przypisanie wartośki częstotliwości załąćzania
unsigned long migk1 = tempo;
unsigned long migk2 = tempo;
unsigned long migk3 = tempo;
unsigned long migk4 = tempo;
unsigned long migk5 = tempo;
unsigned long migk6 = tempo;
unsigned long migk7 = tempo;
unsigned long migk8 = tempo;
unsigned long migk9 = tempo;
unsigned long migk10 = tempo;
unsigned long migk11 = tempo;
unsigned long migk12 = tempo;
unsigned long migk13 = tempo;
unsigned long migk14 = tempo;
unsigned long migk15 = tempo;
unsigned long migk16 = tempo;

// przypisanie wartości przesunięcia w czasie załączenia
unsigned long memczask1 = +100;
unsigned long memczask2 = +200;
unsigned long memczask3 = +300;
unsigned long memczask4 = +400;
unsigned long memczask5 = +500;
unsigned long memczask6 = +600;
unsigned long memczask7 = +700;
unsigned long memczask8 = +800;
unsigned long memczask9 = -100;
unsigned long memczask10 = -200;
unsigned long memczask11 = -300;
unsigned long memczask12 = -400;
unsigned long memczask13 = -500;
unsigned long memczask14 = -600;
unsigned long memczask15 = -700;
unsigned long memczask16 = -800;

unsigned long aczas = 0;


void przejscie() //sekwencja wielowątkowa do odtwarzania przez określony czas
{
  digitalWrite(ldgr, sk); // włączenie zielonej diody
  digitalWrite(ldrd,!sk); // zgaszenie czerownej diody
  aczas = millis();
 
  if (aczas - memczask1 >= migk1) {        //załączanie przekaźnika 1
    memczask1 = aczas;
    sk1 = !sk1;
    digitalWrite(k1, sk1);
  }
  if (aczas - memczask2 >= migk2) {        //załączanie przekaźnika 2
    memczask2 = aczas;
    sk2 = !sk2;
    digitalWrite(k2, sk2);
  }
  if (aczas - memczask3 >= migk3) {        //załączanie przekaźnika 3
    memczask3 = aczas;
    sk3 = !sk3;
    digitalWrite(k3, sk3);
  } if (aczas - memczask4 >= migk4) {      //załączanie przekaźnika 4
    memczask4 = aczas;
    sk4 = !sk4;
    digitalWrite(k4, sk4);
  } if (aczas - memczask5 >= migk5) {      //załączanie przekaźnika 5
    memczask5 = aczas;
    sk5 = !sk5;
    digitalWrite(k5, sk5);
  } if (aczas - memczask6 >= migk6) {      //załączanie przekaźnika 6
    memczask6 = aczas;
    sk6 = !sk6;
    digitalWrite(k6, sk6);
  } if (aczas - memczask7 >= migk7) {      //załączanie przekaźnika 7
    memczask7 = aczas;
    sk7 = !sk7;
    digitalWrite(k7, sk7);
  } if (aczas - memczask8 >= migk8) {      //załączanie przekaźnika 8
    memczask8 = aczas;
    sk8 = !sk8;
    digitalWrite(k8, sk8);
  } if (aczas - memczask9 >= migk9) {      //załączanie przekaźnika 9
    memczask9 = aczas;
    sk9 = !sk9;
    digitalWrite(k9, sk9);
  } if (aczas - memczask10 >= migk10) {    //załączanie przekaźnika 10
    memczask10 = aczas;
    sk10 = !sk10;
    digitalWrite(k10, sk10);
  } if (aczas - memczask11 >= migk11) {    //załączanie przekaźnika 11
    memczask11 = aczas;
    sk11 = !sk11;
    digitalWrite(k11, sk11);
  } if (aczas - memczask12 >= migk12) {    //załączanie przekaźnika 12
    memczask12 = aczas;
    sk12 = !sk12;
    digitalWrite(k12, sk12);
  } if (aczas - memczask13 >= migk13) {    //załączanie przekaźnika 13
    memczask13 = aczas;
    sk13 = !sk13;
    digitalWrite(k13, sk13);
  } if (aczas - memczask14 >= migk14) {    //załączanie przekaźnika 14
    memczask14 = aczas;
    sk14 = !sk14;
    digitalWrite(k14, sk14);
  } if (aczas - memczask15 >= migk15) {      //załączanie przekaźnika 15
    memczask15 = aczas;
    sk15 = !sk15;
    digitalWrite(k15, sk15);
  } if (aczas - memczask16 >= migk16) {      //załączanie przekaźnika 16
    memczask16 = aczas;
    sk16 = !sk16;
    digitalWrite(k16, sk16);
  }

}
void zatrzymanie()  // sekwencja zatrzymania

{ digitalWrite(ldgr, !sk);
  digitalWrite(ldrd, sk);
  digitalWrite(k1, sk);
  digitalWrite(k2, !sk);
  digitalWrite(k3, sk);
  digitalWrite(k4, !sk);
  digitalWrite(k5, sk);
  digitalWrite(k6, !sk);
  digitalWrite(k7, sk);
  digitalWrite(k8, sk);
  digitalWrite(k9, sk);
  digitalWrite(k10, sk);
  digitalWrite(k11, sk);
  digitalWrite(k12, sk);
  digitalWrite(k13, sk);
  digitalWrite(k14, sk);
  digitalWrite(k15, sk);
  digitalWrite(k16, sk);
}


void loop() // właściwy program
{
  zatrzymanie();

  zakres(10, 100); // ustalanie zakresu odległosci załączania czujnika
  delay(30);
}
int pomiar() // pomiar z czujnika
{
  long cza, dystans;


  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  cza = pulseIn(echoPin, HIGH);
  dystans = cza / 58;

  return dystans;
}

void zakres(int a, int b)
{
  int odleglosc = pomiar();

  if ((odleglosc > a) && (odleglosc < b) || (digitalRead(sw)==LOW))  //warunek uruchomienia sekwencji


  { Serial.print (" włączone="); Serial.println(l++); //

    int y = (millis() / 1000);

    do
    {
      przejscie();
    }
    while ((millis() / 1000 - y) < czastrwania); // warunek czasu odtwarzania
    Serial.println("stop");
  }
}


a tutaj sama sekwencja tylko z guzikiem. powinna się odtwarzać tak długo jak trzymam guzik i tak jest , ale wszystkie załączają się wtedy synchronicznie. Jakiekolwiek uwarunkowanie sekwencji powoduje jej złe działanie

Kod:
// przypisanie nazw do pinów
#define trigPin 3 // podłączenie czujnika ultradźwiękowego
#define echoPin 2 // podłączenie czujnika ultradźwiękowego
#define ldgr 52 // dioda zielona odtwarzania sekwencji
#define ldrd 53 // dioda czerwona zatrzymania sekwencji
#define fr 11 // wejscie z fotorezystora
#define sw 12 // dodatkowy przycisk wyzwalania
#define k1 22  // przekaźnik 1
#define k2 23  // przekaźnik 2
#define k3 24  // przekaźnik 3
#define k4 25  // przekaźnik 4
#define k5 26  // przekaźnik 5
#define k6 27  // przekaźnik 6
#define k7 28  // przekaźnik 7
#define k8 29  // przekaźnik 8
#define k9 30  // przekaźnik 9
#define k10 31 // przekaźnik 10
#define k11 32 // przekaźnik 11
#define k12 33 // przekaźnik 12
#define k13 34 // przekaźnik 13
#define k14 35 // przekaźnik 14
#define k15 36 // przekaźnik 15
#define k16 37 // przekaźnik 16

// przypisanie stanów do pinów
int l = 1; // licznik zdarzeń
int sk1 = HIGH; // włączone
int sk2 = HIGH; // włączone
int sk3 = HIGH; // włączone
int sk4 = HIGH; // włączone
int sk5 = HIGH; // włączone
int sk6 = HIGH; // włączone
int sk7 = HIGH; // włączone
int sk8 = HIGH; // włączone
int sk9 = HIGH; // włączone
int sk10 = HIGH; // włączone
int sk11 = HIGH; // włączone
int sk12 = HIGH; // włączone
int sk13 = HIGH; // włączone
int sk14 = HIGH; // włączone
int sk15 = HIGH; // włączone
int sk16 = HIGH; // włączone
int sk = HIGH;

void setup() {

  Serial.begin(9600);
  pinMode(k1, OUTPUT);
  pinMode(k2, OUTPUT);
  pinMode(k3, OUTPUT);
  pinMode(k4, OUTPUT);
  pinMode(k5, OUTPUT);
  pinMode(k6, OUTPUT);
  pinMode(k7, OUTPUT);
  pinMode(k8, OUTPUT);
  pinMode(k9, OUTPUT);
  pinMode(k10, OUTPUT);
  pinMode(k11, OUTPUT);
  pinMode(k12, OUTPUT);
  pinMode(k13, OUTPUT);
  pinMode(k14, OUTPUT);
  pinMode(k15, OUTPUT);
  pinMode(k16, OUTPUT);
  pinMode (sw, INPUT_PULLUP);
}

int czastrwania = 15;  // przypisanie wartości do czasu trwania sekwencji
int tempo = 200;  // określenie tempa załączania

// przypisanie wartośki częstotliwości załąćzania

unsigned long migk1 = tempo;
unsigned long migk2 = tempo;
unsigned long migk3 = tempo;
unsigned long migk4 = tempo;
unsigned long migk5 = tempo;
unsigned long migk6 = tempo;
unsigned long migk7 = tempo;
unsigned long migk8 = tempo;
unsigned long migk9 = tempo;
unsigned long migk10 = tempo;
unsigned long migk11 = tempo;
unsigned long migk12 = tempo;
unsigned long migk13 = tempo;
unsigned long migk14 = tempo;
unsigned long migk15 = tempo;
unsigned long migk16 = tempo;

// przypisanie wartości przesunięcia w czasie załączenia
unsigned long memczask1 = -100;
unsigned long memczask2 = -200;
unsigned long memczask3 = -300;
unsigned long memczask4 = -400;
unsigned long memczask5 = -500;
unsigned long memczask6 = -600;
unsigned long memczask7 = -700;
unsigned long memczask8 = -800;
unsigned long memczask9 = -100;
unsigned long memczask10 = -200;
unsigned long memczask11 = -300;
unsigned long memczask12 = -400;
unsigned long memczask13 = -500;
unsigned long memczask14 = -600;
unsigned long memczask15 = -700;
unsigned long memczask16 = -800;

unsigned long aczas = 0;

void loop()
{


if (digitalRead(sw)==LOW)


{aczas=millis();
  {
  if (aczas - memczask1 >= migk1) {        //załączanie przekaźnika 1
    memczask1 = aczas;
    sk1 = !sk1;
    digitalWrite(k1, sk1);
  }
  if (aczas - memczask2 >= migk2) {        //załączanie przekaźnika 2
    memczask2 = aczas;
    sk2 = !sk2;
    digitalWrite(k2, sk2);
  }
  if (aczas - memczask3 >= migk3) {        //załączanie przekaźnika 3
    memczask3 = aczas;
    sk3 = !sk3;
    digitalWrite(k3, sk3);
  } if (aczas - memczask4 >= migk4) {      //załączanie przekaźnika 4
    memczask4 = aczas;
    sk4 = !sk4;
    digitalWrite(k4, sk4);
  } if (aczas - memczask5 >= migk5) {      //załączanie przekaźnika 5
    memczask5 = aczas;
    sk5 = !sk5;
    digitalWrite(k5, sk5);
  } if (aczas - memczask6 >= migk6) {      //załączanie przekaźnika 6
    memczask6 = aczas;
    sk6 = !sk6;
    digitalWrite(k6, sk6);
  } if (aczas - memczask7 >= migk7) {      //załączanie przekaźnika 7
    memczask7 = aczas;
    sk7 = !sk7;
    digitalWrite(k7, sk7);
  } if (aczas - memczask8 >= migk8) {      //załączanie przekaźnika 8
    memczask8 = aczas;
    sk8 = !sk8;
    digitalWrite(k8, sk8);
  } if (aczas - memczask9 >= migk9) {      //załączanie przekaźnika 9
    memczask9 = aczas;
    sk9 = !sk9;
    digitalWrite(k9, sk9);
  } if (aczas - memczask10 >= migk10) {    //załączanie przekaźnika 10
    memczask10 = aczas;
    sk10 = !sk10;
    digitalWrite(k10, sk10);
  } if (aczas - memczask11 >= migk11) {    //załączanie przekaźnika 11
    memczask11 = aczas;
    sk11 = !sk11;
    digitalWrite(k11, sk11);
  } if (aczas - memczask12 >= migk12) {    //załączanie przekaźnika 12
    memczask12 = aczas;
    sk12 = !sk12;
    digitalWrite(k12, sk12);
  } if (aczas - memczask13 >= migk13) {    //załączanie przekaźnika 13
    memczask13 = aczas;
    sk13 = !sk13;
    digitalWrite(k13, sk13);
  } if (aczas - memczask14 >= migk14) {    //załączanie przekaźnika 14
    memczask14 = aczas;
    sk14 = !sk14;
    digitalWrite(k14, sk14);
  } if (aczas - memczask15 >= migk15) {      //załączanie przekaźnika 15
    memczask15 = aczas;
    sk15 = !sk15;
    digitalWrite(k15, sk15);
  } if (aczas - memczask16 >= migk16) {      //załączanie przekaźnika 16
    memczask16 = aczas;
    sk16 = !sk16;
    digitalWrite(k16, sk16);
  }
} }

}
 
Odpowiedź
#4
A od kiedy unsinged long może być liczba ujemna??

Wroc do lekcji millis() bo nic się nie nauczyłeś.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#5
(05-12-2019, 11:14)Jarewa0606 napisał(a): A od kiedy unsinged long może być liczba ujemna??

Wroc do lekcji millis() bo nic się nie nauczyłeś.
 hmm najdziwniejsze że z takimi wartościami działa, obojętnie czy jest wartość ujemna czy dodatnia. obawiam się że nie w tym tkwi problem
 
Odpowiedź
#6
Zdaje ci się że działa bo źle odmiezasz czas podstawy funkcji millis() się klaniaja.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#7
może i mi się wydaje ale nawet poprawione nie przynoszą spodziewanego efektu.
 
Odpowiedź
#8
(05-12-2019, 14:32)Jarewa0606 napisał(a): Zdaje ci się że działa bo źle odmiezasz czas podstawy funkcji millis() się klaniaja.
z całą pewnością źle to robię i dlatego tez zawitałem na to forum by uzyskać pomoc w zrozumieniu i rozwiązaniu problemu a nie usłyszeniu że mam spadać do swojego pokoju i dalej czytać coś czego nie rozumiem......
 
Odpowiedź
#9
https://forbot.pl/blog/kurs-arduino-ii-w...is-id18418

Ale przykład jest bardzo prosty jak budowa "cepa" i własnie pokazuje to co chcesz uzyskać, nawet jest taki przykład.. Pomigaj sobie pierw dwoma diodami zrozum funkcje millis() a nie idziesz w zaparte i chcesz "wieloryba" wędkę już dostałeś wiec zaczynaj od małej rybki ....
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#10
@maniekdii zastanów co się dzieje jak zatrzymasz wyświetlanie. Co zapisane jest w zmiennych memczask1 do 16. Zapisany jest jakiś czas millis() w czasie zatrzymania. Jak ponownie uruchomisz sekwencję to pomyśl co się będzie działo w każdym ifie. Każdy if będzie spełniony bo millis() "jest już daleko z przodu" więc wszystkie przekaźniki zadziałają jednocześnie i tak jak piszesz wszystkie mrugają jednocześnie bo "memczasy" robią się jednakowe po jednym obiegu pętli. Ty ich różnicujesz w setupie i potem to działa do czasu zatrzymania.
Musisz to wszystko przemyśleć jeszcze raz i zmienić taktykę załączania.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości