Skocz do zawartości
Komentator

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

Pomocna odpowiedź

borewicz79, tak - poczytaj o funkcji milis(), która pozwala na odmierzanie czasu bez zatrzymywania programu 🙂

Udostępnij ten post


Link to post
Share on other sites

wooow...dzięki za szybką odpowiedź

Nie bardzo rozumiem gdzie miałbym wykorzystać funkcję millis w moim programie.

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

borewicz79, na ten moment funkcja ta nie była opisywana w kursie Arduino (jeszcze), więc nie mam gdzie Cie odesłać. Zerknij na przykład ze strony Arduino, jest tam pokazane jak migać diodą bez funkcji delay: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Udostępnij ten post


Link to post
Share on other sites

Cześć,
Dziś zacząłem przygodę z Arduino i niestety nie mogę rozwiązać jednego problemu: po skompilowaniu pierwszego programu , wykorzystującego przycisk i diodę oraz wgraniu go na płytkę, dioda zapala się sama i świeci na stałe (tak, jakby program wykonywał zadania niezależnie od warunków) lub kiedy jednak się nie zaświeci i zrobię to za pomocą wciśnięcia przycisku, to zapala się ona na stałe, po czym trzeba zresetować układ. Wychodzi na to, jakby funkcja "else" nie działała poprawnie. Kiedy zamiast else użyję delay, dioda normalnie gaśnie i jest okej - normalnie reaguje na przycisk. Bardzo proszę o pomoc, bo nie wiem czy z płytką jest coś nie tak, czy też ja jednak coś źle robię.. Próbowałem również tak i również nie działa:

void setup() {
 pinMode(10, OUTPUT); //Dioda czerwona

 pinMode(7, INPUT_PULLUP); //Przycisk

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

}

void loop()
{

 while(digitalRead(7)==LOW)
 {
 digitalWrite(10, HIGH);
 }
 while(digitalRead(7)==HIGH){
 digitalWrite(10, LOW);
 }

}

Udostępnij ten post


Link to post
Share on other sites

dawid_s, napisałeś program który:

1.Czeka na stan LOW na pinie 7 i wystawia stan HIGH w tym czasie (i to się zapętla).

Gdy wyjdzie z while 1:

2.Czeka na stan HIGH na pinie 7 i wystawia stan LOW w tym czasie na 10.

Poza tym gdzie masz else?

void setup() {
 pinMode(10, OUTPUT); //Dioda czerwona
 pinMode(7, INPUT_PULLUP); //Przycisk
 digitalWrite(10, LOW); //Wyłączenie diod

}

void loop()
{

 if(digitalRead(7)==LOW)
   digitalWrite(10, HIGH);
 else
   digitalWrite(10, LOW);

}

Jeżeli dobrze rozumiem to tak powinno to być zrobione.

Udostępnij ten post


Link to post
Share on other sites

Tak już próbowałem, teraz dla pewności też skopiowałem i nie działa. A kod, który wkleiłem, to po prostu chciałem zrobić to w inny sposób. Chodzi o to, że mój układ nie reaguje na puszczenie przycisku. Po wciśnięciu dioda się zapala, a po puszczeniu powinna zgasnąć, jednak tak się nie dzieje (kolejne programy z kursu działają, jednak nie ten pierwszy, który w czasie trzymania przycisku świeci diodą, a puszczenia ją gasi). Poza tym nawet po resecie czasem dioda sama się zapala i muszę zresetować kilka razy, aby zgasła.

Dodatkowo podczas wgrania pierwszego programu z lekcji UART nie wyświetla mi "Witaj na Forbocie!" 🙁 a kiedy najpierw włączam monitor szeregowy, przed startem programu, wyrzuca mi błąd. Coś tu nie gra, może mam coś wyłączone?

Udostępnij ten post


Link to post
Share on other sites

Zacznijmy od 0.

Masz podłączony do dobrych pinów przycisk i diodę?

Co do uartu, ten program Ci nie działa?

void setup(){
 Serial.begin(9600); //Ustawienie prędkości transmisji
 Serial.println("Witaj na Forbocie!"); //Jednorazowe wysłanie tekstu
}
void loop() {
 delay(5000);
 Serial.println("Minelo 5 sekund!"); //Wysyłanie w pętli
}

Wgrywasz to, czekasz, aż cały pasek przejdzie i otwierasz monitor szeregowy i powinno działać.

Udostępnij ten post


Link to post
Share on other sites

Mam wszystko dobrze podłączone. Zresztą inaczej inne programy również by mi nie działały, jakby było źle. A co do drugiego, to wiem, że trzeba poczekać, aż przejdzie pasek 😋 tylko po włączeniu monitora szeregowego program jest już dalej, czyli nie wyświetla mi "Witaj na Forbocie", a jak włączę monitor wcześniej, to wyrzuca błąd. Po resecie na arduino nic się nie wyświetla, więc nie wiem, jak inaczej można odpalić program od nowa, nie wgrywając go ponownie na płytkę.

Udostępnij ten post


Link to post
Share on other sites

dawid_s, po otworzeniu monitora arduino się restartuje. Nie trzeba nic kombinować. W sumie dziwne, że nie działa.

PS: Poza tym możesz:

1. Otworzyć monitor.

2. Zaprogramować.

i też działa.

Udostępnij ten post


Link to post
Share on other sites

No właśnie mi nie działa, dlatego proszę o pomoc kogoś, kto wie, jak rozwiązać te problemy.. Wiem, że powinno tak działać, ale no nie działa

IMG_5794b8759e1537551.jpg

Udostępnij ten post


Link to post
Share on other sites

Nie jestem pewien, ale chyba nie zaprogramowałeś go, spróbuj jeszcze raz. Był chyba problem z połączeniem.Pozatym jak używasz Arduino 101 to masz przełączoną płytkę na w/w?

Udostępnij ten post


Link to post
Share on other sites

Za każdym razem tak jest, jak otwieram wcześniej monitor. Tak, mam ustawioną na 101.

Udostępnij ten post


Link to post
Share on other sites

A działa Ci jakikolwiek program z użyciem Serial'a?

Jeżeli nie, to działa Ci jakikolwiek program?

Udostępnij ten post


Link to post
Share on other sites

Tak, jak pisałem już wcześniej, mam problemy z:

-przy wciśnięciu i puszczeniu przycisku dioda nie gaśnie(nie reaguje na puszczenie przycisku), tylko trzeba resetować arduino,
-czasem diody się świecą już od startu programu i trzeba kilka razy resetować (lub świecą bardzo słabo i wtedy pomaga poruszenie przewodami przy arduino)

-przy monitorze szeregowym, jak włączam, to program jest w trakcie działania i nie wyświetla mi tego, co jest w void setup (przy zliczaniu, kiedy włączę monitor liczy mi np. od 10, czyli program ruszył wcześniej i nie wyświetla mi wcześniejszych zadań), a kiedy włączę monitor przed wgraniem programu, to wyświetla mi się błąd (zdjęcie wyżej).

Wszystko inne mi działa, ustawione mam w programie genuino 101, przewody mam podłączone dobrze. Nie wiem czy trzeba w jakichś ustawieniach coś zmienić jeszcze (choć nic takiego nie widziałem), czy też z płytką jest coś niedobrego

Udostępnij ten post


Link to post
Share on other sites

dawid_s, po pierwsze nie otwieraj monitora przed zaprogramowaniem. Rób to po. Zawsze układ jest wtedy resetowany i działa poprawnie. Piszesz, że masz ustawione w programie Genuino 101, ale nigdzie nie napisałeś, czy faktycznie używasz tej płytki. Wklej ostateczną wersją swojego programu, który nie działa i napisz na jakim układzie ją uruchamiasz. Mam pod ręką sprzęt - sprawdzę, czy po wgraniu wszystko działa poprawnie.

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!

Gość
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...