Skocz do zawartości

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


Pomocna odpowiedź

7 godzin temu, Gieneq napisał:

@Kriss2707 witam na forum.

Patrząc na to no cóż, ciężko stwierdzić. Najlepiej jak wstawisz tu kod. 🙂 

void setup() {

  pinMode(10, OUTPUT); //Dioda czerwona

  pinMode(9, OUTPUT); //Dioda żółta

  pinMode(8, OUTPUT); //Dioda zielona



  pinMode(7, INPUT_PULLUP); //Przycisk



  digitalWrite(10, LOW); //Wyłączenie diod

  digitalWrite(9, LOW);

  digitalWrite(8, LOW);

}



void loop()

{

  digitalWrite(10, LOW); //Czerwona

  digitalWrite(9, LOW); //Pomarańczowa

  digitalWrite(8, HIGH); //Zielona

  delay(1000); //Czekamy 1 sekundę

  digitalWrite(10, LOW); //Czerwona

  digitalWrite(9, HIGH); //Pomarańczowa

  digitalWrite(8, LOW); //Zielona

  delay(1000); //Czekamy 1 sekundę

  digitalWrite(10, HIGH); //Czerwona

  digitalWrite(9, LOW); //Pomarańczowa

  digitalWrite(8, LOW); //Zielona

  delay(1000); //Czekamy 1 sekundę

  digitalWrite(10, HIGH); //Czerwona

  digitalWrite(9, HIGH); //Pomarańczowa

  digitalWrite(8, LOW); //Zielona

  delay(1000); //Czekamy 1 sekundę

}

 

to jest kod ze szkolenia ze strony forbot...

Edytowano przez Gieneq
Link to post
Share on other sites

@Kriss2707 co prawda kod który wstawiłeś nie kompiluje mi się ale to wina jakiegoś dziwnego kodowania znaków, ale kod z kursu jest ok.

Najwyraźniej problem jest z samym programem. Dla testu - wejdź w przykłady i sprawdź czy przykład blink się skompiluje.

Jeżeli nie, to może był problem z instalacją. Spróbuj pobrać i instalować jeszcze raz Arduino IDE.

Jaki to system?

Link to post
Share on other sites

"Prawdopodobnie pomyślałeś tutaj o instrukcji warunkowej if. Jednak jak chciałbyś zrealizować miganie diodą?"

void setup() {

pinMode(10, OUTPUT);

pinMode(6, INPUT_PULLUP);

}

void loop() {

if (digitalRead(6) == LOW) {
   

digitalWrite(10, HIGH);

    delay(500);

    digitalWrite(10, LOW);

    delay(500);
}
}

Nie wiem czemu gdyż przygodę z Arduino zacząłem jakieś 12h temu ale u mnie działa na IF 

EDIT:

Nie działa natomiast żaden z dwóch programów z kursu, świeci zielona dioda a przycisk robi nic...

 

 

Edytowano przez Gieneq
Dopisanie pojedynczego zdania zamiast tworzenia nowego wpisu
Link to post
Share on other sites

@KosMar witam na forum 🙂 a jak masz podłączony przycisk?

23 godziny temu, KosMar napisał:

Nie wiem czemu gdyż przygodę z Arduino zacząłem jakieś 12h temu ale u mnie działa na IF 

Też będzie działać, w tym programie efekt będzie taki sam, ale już w innych nabierze to znaczenia (chociażby w kolejnym ćwiczeniu poniżej cytatu).

Link to post
Share on other sites

Cześć!

Zrobiłem w pełni zadania, ale chciałem się sprawdzić i zmodyfikować ostatni z nich. Z racji, że mimo  puszczeniu przycisku, cała sekwencja musi się skończyć, chciałem:

1. Ustawić, aby sekwencja świateł kończyła się w miejscu, w którym odrywam palec od przycisku

2. Po ponownym naciśnięciu pętla zaczynała się od początku.

Obecnie mam coś takiego:

void loop()
{
  while(digitalRead(7) == LOW) { //aktywacja pętli przyciskiem
  digitalWrite(12, LOW); //Czerwona OFF
  digitalWrite(10, LOW); //Żółta OFF
  digitalWrite(8, HIGH); //Zielona ON

  delay(500); // Opóźnienie wyłączenia = Długość świecenia zielonej
  
  digitalWrite(12, LOW); //Czerwona OFF
  digitalWrite(10, LOW); //Żółta OFF
  digitalWrite(8, LOW); //Zielona OFF


    while(digitalRead(7) == HIGH) { //puszczenie przycisku i zatrzymanie pętli
       digitalWrite(12, LOW); //Czerwona OFF
       digitalWrite(10, LOW); //Żółta OFF
       digitalWrite(8, LOW); //Zielona OFF
    }

  digitalWrite(12, LOW); //Czerwona OFF
  digitalWrite(10, HIGH); //Zółta ON
  digitalWrite(8, LOW); //Zielona OFF
  
  delay(500); // Długość świecenia Żółtej
  
  digitalWrite(12, LOW); //Czerwona OFF
  digitalWrite(10, LOW); //Żółta OFF
  digitalWrite(8, LOW); //Zielona OFF

  
    while(digitalRead(7) == HIGH) { //puszczenie przycisku i zatrzymanie pętli
       digitalWrite(12, LOW); //Czerwona OFF
       digitalWrite(10, LOW); //Żółta OFF
       digitalWrite(8, LOW); //Zielona OFF
    }

  digitalWrite(12, HIGH); //Czerwona ON
  digitalWrite(10, LOW); //Żółta OFF
  digitalWrite(8, LOW); //Zielona OFF
  
  delay(500); //Długość świecenia czerwonej
  
  digitalWrite(12, LOW); //Czerwona OFF
  digitalWrite(10, LOW); //Żółta OFF
  digitalWrite(8, LOW); //Zielona OFF
//Pętla automatycznie zatrzymana bez potrzeby wywoływania while jak wyżej
  }
}

I o ile swoje zadanie z punktu pierwszego spełnia, tyle po ponownym naciśnięciu pętla jest kontynuowana.

 

Czy jest jakiś sposób, aby ustawić by pętla w pewnym momencie, po spełnieniu danego warunku zostałaby przerywana i wracała na początek?

Link to post
Share on other sites
4 godziny temu, Opinel napisał:

Czy jest jakiś sposób, aby ustawić by pętla w pewnym momencie, po spełnieniu danego warunku zostałaby przerywana i wracała na początek?

Jeśli chciałbyś w dowolnym momencie wyjść z pętli to możesz wywołać polecenie "break;". Więcej na ten temat znajdziesz np. w dokumentacji Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/break/

  • Pomogłeś! 1
Link to post
Share on other sites

Czytałem gdzieś w jakiejś książce, ale na poniższym forum też tak się programiści wypowiadają. Wg mnie na kursie forbot nie powinno wskazówek dot. używania break. 

"The reason this is seen as 'dirty', is that in some instances (if condition is satisfied on the first run), the last part of the while loop (after your IF statement) will not be executed. This can cause errors/faults in some executions, that are hard to spot during debugging."

"In functional programming using break is dirty because it complicatres reading the program if the body of cycle is quite large. Thought as for me I do NOT use large body of cycle so using of break is quite clear and readable."

https://www.researchgate.net/post/How-dirty-is-usage-of-break-in-while-loop

 

  • Nie zgadzam się! 1
Link to post
Share on other sites

@tomecki jako autor kursu pozwolę sobie jednak uznać, że break jest dopuszczone w tym kursie 🙂 Jest to normalny element języka (opisany w dokumentacji Arduino), więc można z niego korzystać 🙂

Link to post
Share on other sites
1 godzinę temu, tomecki napisał:

na poniższym forum też tak się programiści wypowiadają

Którzy???

Rozumiałbym jeszcze goto (bo to faktycznie trzeba umieć stosować i trzeba wiedzieć kiedy), ale break jest normalną instrukcją bez której raczej trudno się obejść. Oczywiście - można dodawać dodatkowe zmienne, rozgałęziać sobie jakieś ify aż wylezą poza ekran, ale  ani czytelności to nie poprawi, ani programu nie uprości.

Prosty przykład:

while ((a=cośtam.read())) {
  zrób_coś_z(a);
  if (jakiś_efekt_uboczny_tego_zrobienia) break;
  zrób_coś_jeszcze(a);
}

Pozbądź się break.

  • Lubię! 3
  • Nie zgadzam się! 1
Link to post
Share on other sites

Hej

Dopiero zaczynam przygodę z Arduino i mam pytanie po drugiej lekcji. Czy istnieje możliwość programowego sterowania zasilaniem? Chodzi mi o to, czy można np. sterować siłą świecenia diody? W lekcji jest mowa jak włączyć diodę lub ją wyłączyć, a czy można ją włączyć na np. 25%, 50% itd.?

Pozdrawiam

Darek

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

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.