Skocz do zawartości
UinqeN

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

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

Biblia zamowiona,rady przyjete 😃 Dzieki wielkie za pomoc

Udostępnij ten post


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