Skocz do zawartości

Kurs Arduino - #2 - podstawy programowania, porty I/O


Pomocna odpowiedź

void setup() {
  // put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, INPUT_PULLUP);

digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);

digitalWrite(6, LOW);

}

void loop() {
  // put your main code here, to run repeatedly:

digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
delay(1000);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delay(5000);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
delay(1000);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(1000);


if (digitalRead(7) == LOW) {
 digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
delay(1000);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(1000);
digitalWrite (6, HIGH);
 digitalWrite (5, LOW);
  delay(3000);
  digitalWrite (6, LOW);
  digitalWrite (5, HIGH);
  delay(1000);
  digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
else {digitalWrite(5, HIGH);
}

}

Cześć

Próbuję zrobić światła drogowe działające tak:

-cały czas sekwencja ziel4, żółte3, czer2, czer2 i zół3, ziel4.... a na przejsciu cały czas czerw5

-chyba, że wcisnę przycisk7 to żół3, czerw2 > na przejściu ziel6, czerw5 i wracam do początku

Mają powyższy program w miarę to działa ale są dwa problemy:
-muszę długo przytrzymać przycisk7 żeby uruchomić if - Dlaczego tak się dzieje?
- i mniejszy problem - idzie czerw2, zół3, czerw2 i dopiero wtedy if - macie na to jakiś pomysł?

Edytowano przez RysiekUP
Link to post
Share on other sites
7 minut temu, RysiekUP napisał:

-muszę długo przytrzymać przycisk7 żeby uruchomić if - Dlaczego tak się dzieje?
 

Delay() to taka funkcja ktora "zamraza" kod na czas jaki zostal ustalony...nie zrobisz z tym nic, jedyny ratunek to funkcja millis() ktora nie blokuje i program reaguje bardzo szybko na jakies zdarzenia...poprostu kod wykonuje sie w kolko bardzo szybko..

Link to post
Share on other sites

Ok znalazłem artykuł o millis: https://forbot.pl/blog/kurs-arduino-ii-wielozadaniowosc-opoznienia-z-millis-id18418
Dopiero zaczynam więc na razie odpuszczę ten temat bo to nie takie proste 😛

Ogólnie to wydawało mi się, że mikrokontrolery będą łatwiejsze w obsłudze... może za stary na to jestem hehe
Ale ciekawi mnie jak sobie z tym poradzą uczniowie podstawówek i ich nauczyciele....

 

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

12 minut temu, RysiekUP napisał:

Dopiero zaczynam więc na razie odpuszczę ten temat bo to nie takie proste 😛

 

przyjdzie z czasem...😉

 

13 minut temu, RysiekUP napisał:

 Ogólnie to wydawało mi się, że mikrokontrolery będą łatwiejsze w obsłudze...

 

Panie to i tak chyba najprostsza wersja programowania...w sensie adruino ide..😉

 

14 minut temu, RysiekUP napisał:

 Ale ciekawi mnie jak sobie z tym poradzą uczniowie podstawówek i ich nauczyciele....

 

nie od razu rzym zbudowano..😉

void setup() {
  // put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, INPUT_PULLUP);

digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);

digitalWrite(6, LOW);

}

void loop() {
  static int tab[] = {1000,5000,1000,1000};
  static int tab1[] = {1000,1000,3000,1000,1000};
  static int i = 0;
  static byte stan = 0;
  static long last = 0;
  
  if (millis() - last > tab[i]) {
    i++;
    last = millis();
    if (i == 4) {
      i = 0;
    }
  }
  if (stan == 0) {
if (i == 0) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (i == 1) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
if (i == 2) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (i == 3) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
  }

if (digitalRead(7) == LOW) {
stan = 1;
i = 0;
delay(1000);
}

if (millis() - last > tab1[i]) {
    i++;
    last = millis();
  }
    if (i == 5) {
      i = 0;
      stan = 0;
    }
  if (stan == 1) {
    if (i == 0) {
 digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
    }
if (i == 1) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (i == 2) {
digitalWrite (6, HIGH);
 digitalWrite (5, LOW);
}
if (i == 3) {
  digitalWrite (6, LOW);
  digitalWrite (5, HIGH);
}
if (i == 4) {
  digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
}


}

sprawdz...moze zadziala

  • Lubię! 1
Link to post
Share on other sites
10 minut temu, farmaceuta napisał:
28 minut temu, RysiekUP napisał:

 Ogólnie to wydawało mi się, że mikrokontrolery będą łatwiejsze w obsłudze...

 

Panie to i tak chyba najprostsza wersja programowania...w sensie adruino ide..

Nawet mnie nie załamuj 😞 A ja myślałem, że zmienię branżę hehe

Kod, który wysłałeś lepiej działa ale rozgryzienie go pewnie zajęłoby mi całą noc 😝
 

Link to post
Share on other sites
7 minut temu, RysiekUP napisał:

Kod, który wysłałeś lepiej działa ale rozgryzienie go pewnie zajęłoby mi całą noc 😝
 

Ale dziala tak jak zalozyles???

 

7 minut temu, RysiekUP napisał:

Nawet mnie nie załamuj 😞 A ja myślałem, że zmienię branżę hehe

Sluchaj...ja jak zobaczylem przykladowe kody to na kilka lat temat calkiem porzucilem, wiadomo hieroglify i szlaczki...ale wkoncu sie przelamalem i teraz zaluje ze wtedy sie wylamalem...😉 po troszku wszystko do glowy wejdzie

Link to post
Share on other sites

Zerkne jutro bo szczerze nie chcialo mi sie tego pisac i tak na chama to zrobilem...😜

Tzn...kod dziala w kolko...gdy wcisniesz guzik zrobi druga sekwencje i powroci do pierwszej 

Edytowano przez farmaceuta
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.