• 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ź
  


Wiadomości w tym wątku
z pętlą zgubiłem się w czasie - przez maniekdii - 05-12-2019, 09:29
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 08:55
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 09:12
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:31
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:18
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:44
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 10:41
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 11:59
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 15:22
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 15:42
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 16:39
RE: z pętlą zgubiłem się w czasie - przez elvis - 08-12-2019, 12:19

Skocz do:


Przeglądający: 1 gości