Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

Witam serdecznie wszystkich. Jest to mój pierwszy post na tym forum, po rozpoczęciu Waszego kursu na Forbocie o programowaniu Arduino postanowiłem spróbować swoich sił w napisaniu jakiegoś prostego programu , który chcę wykorzystać przyszłościowo. Napisałem program uwzględniając potrzebne komentarze, jednak po skompilowaniu i wgraniu programu do Arduino Uno, program nie działa według mojego założenia. Poradźcie mi proszę gdzie popełniam błędy i co muszę zmienić abym nie zszedł na zawał🙀😫. Siedzę już trzeci wieczór i dalej klops... Nie mam już pomysłów. Na dzień dzisiejszy program po uruchomieniu załącza przekaźniki w takim samym cyklu, samoczynnie bez wciskania jakiegokolwiek przycisku.. co jest nie tak?

Program

//test nr1


void setup() {      

  pinMode(6, INPUT_PULLUP);//przełacznik typu krańcówka /test palcem
  pinMode(8, OUTPUT); //moduł płytki 1 przekażnika załączany stanem wysokim
  pinMode(9, OUTPUT); //moduł płytki 2 przekażnika załączany stanem wysokim
  pinMode(7, INPUT_PULLUP);  //5V z modułu czujnika

  digitalWrite(6, LOW); //ustawienie portów po włączeniu zasilania
  digitalWrite(8, LOW);//   ---------------||----------------------
  digitalWrite(9, LOW);//   ---------------||----------------------
  digitalWrite(7, LOW); // ---------------||----------------------
}

void loop()
{  if (digitalRead(6) == HIGH)     //jeśli przycisk wciśnięty
      {digitalWrite(8, HIGH);     //Włącz przekaźnik2
      delay(1000);                //utrzymaj włączony 1 sekundę
      {digitalWrite(8, LOW);      //wyłącz przekaźnik 2
      delay(1000);}               //odczekaj 1 sekundę
      {digitalWrite(9, HIGH);     //włącz przekaźnik 1
      delay(5000);}               //utrzymaj włączony 5 sekund
      }else {                     //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
      digitalWrite(9, LOW);       //wyłacz przekaźnik 1
      digitalWrite(8, LOW);}      //wyłacz przekaźnik 2
   
if (digitalRead(9) == HIGH && digitalRead(7) == HIGH)     //Jeśli na pinie 9 jest stan wysoki oraz na wejsciu pin 7 jest stan wysoki to
      {digitalWrite(9, LOW);      //odłącz przekaźnik 1
      digitalWrite(8, LOW);}      //odłącz przekaźnik 2
      else {                      //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty, brak stanu wyskoiego pin 7)
      digitalWrite(9, LOW);       //wyłacz przekaźnik 2
      digitalWrite(8, LOW);       //wyłacz przekaźnik 1

}

}

 

Edytowano przez marcinpaj
(edytowany)
3 godziny temu, farmaceuta napisał:

Pozbadz sie tych nawiasow klamrowych za pierwszym if'em...takich rzeczy sie nie praktykuje ..i powinno dzialac...

A sprawdzałeś te nawiasy? Są one poprawnie wstawione i nie wpływają na działanie programu...

Poza tym się praktykuje jak chcesz mieć porządek w kodzie 😉 Ostatnio przy robieniu AI dość często klamrowałem konkretne sekcje kodu, by łatwiej się czytało.

Tutaj jest większy problem w postaci tego drugiego if'a, który nie wiadomo co robi... Poza tym samoczynne załączanie wynika z tego, że użyłeś INPUT_PULLUP dla przycisków, więc zawsze będą miały stan wysoki, o ile nie doprowadzisz ich do masy.

void setup() {

  pinMode(6, INPUT_PULLUP);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(7, INPUT_PULLUP);

  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(7, LOW);
}

void loop() {
    if (digitalRead(6) == LOW) { // Input_pullup zawsze daje stan wysoki, krańcówka sprawdza go do masy więc musimy weryfikować czy stan jest niski
        digitalWrite(8, HIGH);
        delay(1000);
        digitalWrite(8, LOW);
        delay(1000);
        digitalWrite(9, HIGH);
        delay(5000);
    } else {
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
    }

    // Ten if zarówno w IF-ie jak i w else miał takie same komendy...
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
}

Pisane na kolanie o 3 w nocy, ale powinno działać...

Edytowano przez H1M4W4R1
  • Lubię! 2

@marcinpaj Nie wyłączasz przekaźnika 1 po pięciu sekundach tak jak to robisz powyżej dla przekaźnika 2 (pierwszy if). Czy tak ma być?

W komentarzach nie powtarzaj się

	if (digitalRead(9) == HIGH && digitalRead(7) == HIGH)     //Jeśli na pinie 9 jest stan wysoki oraz na wejsciu pin 7 jest stan wysoki to

to co napisałeś w komentarzu widać z kodu. Ponadto deklarujesz pin 9 jako OUTPUT a z niego czytasz. Chodzi Ci o stan przekaźnika?

Pozdrawiam

                     Bogusław

PS Moim zdaniem, to dodatkowe grupowanie instrukcji w bloki wewnątrz pierwszego if nie powinny mieć znaczenia.

5 godzin temu, H1M4W4R1 napisał:

Poza tym się praktykuje jak chcesz mieć porządek w kodzie 😉 Ostatnio przy robieniu AI dość często klamrowałem konkretne sekcje kodu, by łatwiej się czytało.


void setup() {

  pinMode(6, INPUT_PULLUP);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(7, INPUT_PULLUP);

  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(7, LOW);
}

void loop() {
    if (digitalRead(6) == LOW) { // Input_pullup zawsze daje stan wysoki, krańcówka sprawdza go do masy więc musimy weryfikować czy stan jest niski
        digitalWrite(8, HIGH);
        delay(1000);
        digitalWrite(8, LOW);
        delay(1000);
        digitalWrite(9, HIGH);
        delay(5000);
    } else {
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
    }

    // Ten if zarówno w IF-ie jak i w else miał takie same komendy...
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
}

 

Wiem ze mozna sobie dzielic na bloki, no ale w takim kodzie to chyba bezuzyteczne...

Faktycznie chyba pozno bylo i nie zauwazylem ze stany byly problemem...takie proste a czlowiek wciaz moze nie zauwazyc ..he😉

4 minuty temu, farmaceuta napisał:

w takim kodzie to chyba bezuzyteczne

Teoretycznie poprawia czytelność - ale w tym przypadku połączenie tego kodu ze słowem czytelność to oksymoron.

  • Lubię! 1

@marcinpaj A tak z ciekawości. Ta krańcówka jest normalnie zwarta, czy normalnie rozwarta? Podpiąłeś ją czy na razie zastąpiłeś zwykłym przyciskiem (normalnie rozwarty)? Przy okazji: Jakie są Twoje założenia i jak wg Ciebie ten program ma działać?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...