Skocz do zawartości

Problem z dobraniem funkcji(dioda powinna zapalic sie po spelnieniu warunku)


UinqeN

Pomocna odpowiedź

Witam,jestem zaledwie po kursie podstawowym arduino z waszej strony i jako dodatkowa prace domowa postawielm sobie zadanie. Zalozeniem mojego programy jest aby dioda zapalala sie zarowno po podaniu 5v na pin 2 i 4, jesli na ktoryms z nich nie byloby napiecie to dioda nie powinna swiecic. Napisalem taki program

void setup() {
pinMode (2,INPUT);
pinMode (3, OUTPUT);
pinMode (4,INPUT);
}

void loop() {
if (digitalRead(2)==HIGH); //jesli na pin 2 podany zostanie stan wysoki

 while(digitalRead(4)==HIGH) { //odczytaj stan pinu 4 jesli wysoki zasil diode na pinie 3
 analogWrite(3,HIGH);  // dioda swieci sie


}
}

No ale zalozenia realizowane sa w 50% bo zapalaenie sie diody zalezy tylko i wylacznie od stanu wysokiego na pinie 4 a 2 jest zupelnie poza obiegiem. Wzbudzam te piny podajac im napecie 5v (wyprowadzenie na Arduino Uno). Staralem sie uzywac konfiguracji :if,while ale to nie skutkowalo,a uzycie funkcji switch case mnie przeroslo i nie dalem rady "przerobic jej " pod ten przypadek. Za pomoc z gory dziekuje ^^

Link do komentarza
Share on other sites

Jeśli zrobiłeś kurs podstawowy to wiesz już mniej więcej co w trawie piszczy i jesteś gotowy na naukę języka. Będę się powtarzał, ale kup i przeczytaj biblię:

http://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm

To podstawa podstaw. Prosto wyłożony przez jego twórców, język C w swojej kanonicznej formie. To nie jest poradnik "Zrozumieć komputer w weekend" tylko rozdział po rozdziale wyłożona struktura i semantyka C bez zbytniego spoufalania się ("Za chwilę będziesz ninja programowania, super!") z mnóstwem fajnych przykładów. Mając w głowie tę wiedzę sam się zdziwisz jak oczywiste będą rozwiązania Twoich obecnych (i zapewne wielu przyszłych) problemów.

A wracając do pytania. Zupełnie zapomniałeś o operatorach logicznych, czy były na kursie? Otóż instrukcja if, żeby wykonać instrukcję lub cały blok w nawiasach {}, które umieściłeś tuż po niej potrzebuje niezerowej wartości wyrażenia w nawiasie (). To nie musi być proste sprawdzenie:

if (a>5)

lub

if (digitalRead(2) == HIGH)

ale także dwie lub więcej rzeczy połączonych operatorami logicznymi && (i) lub || (lub), np:

if ((digitalRead(4) == HIGH) && (digitalRead(2) == HIGH))

lub

if (((digitalRead(4) == HIGH) && (digitalRead(2) == HIGH)) || flaga_timeout)

W tym ostatnim wymyśliłem sobie zmienną "flaga_timeout", której wartość > 0 spowoduje spełnienie całego warunku. Zapamiętaj, że operatory porównań oddają po prostu wartość 0 (zero) gdy nie są spełnione i coś różnego od zera gdy są spełnione. Logiczne - zgodnie ze swoim znaczeniem. A if-a nie interesuje co dokładnie jest w nawiasie. Ważne tylko, by miało wartość > 0, bo w przeciwnym wypadku wykona się blok instrukcji bo else - jeśli istnieje.

Czy teraz jesteś w stanie prawidłowo zapalać swoją diodkę? Wrzuć kod rozwiązania. Czy świadomie (po co?) używasz analogWrite()?

  • Lubię! 1
Link do komentarza
Share on other sites

UinqeN, jeszcze jedna uwaga co do kodu:

if (digitalRead(2)==HIGH);

To chyba częsty błąd wśród zaczynających przygodę z C, więc podpowiem - jeśli po if oraz warunku wstawisz średnik, to kompilator zrozumie jako pustą instrukcję zakończoną średnikiem. Czyli coś takiego:

if (digitalRead(2)==HIGH)
{
   // nic 
}

Dlatego często namawia się na stosowanie nawiasów klamrowych zawsze, żeby niechcący nie uzyskać kodu, który działa inaczej niż autor zakładał.

  • Lubię! 1
Link do komentarza
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

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...

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.