Problem po dodaniu komend - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Problem po dodaniu komend (/watek-problem-po-dodaniu-komend) |
Problem po dodaniu komend - maniolx - 30-11-2016 Witam Mam zbudowany termometr czterokanałowy z obsługą 2 wyświetlaczy . Wszystko chodziło dobrze , lecz musiałem dodać wyzwalanie pinu cyfrowego po odpowiednim czasie : Kod: pinMode(3, OUTPUT); Po wstawieniu tego do void setup wyświetlacze nie pokazują już niczego - tylko świecą . Gdzie popełniłem błąd ? Program przed modyfikacją wyglądał tak: Kod: #include <OneWire.h> Kod: #include <OneWire.h> RE: Problem po dodaniu komend - Automatyk - 30-11-2016 Funkcja delay jest odpowiedzialna za ten błąd ten wątek juz tu był gdzieś poruszony musisz użyć innej funkcji np millis RE: Problem po dodaniu komend - maniolx - 30-11-2016 Tak właśnie się domyślałem . Może ktoś pomoże to zmienić . RE: Problem po dodaniu komend - namok - 30-11-2016 Pomożesz sobie sam tylko przeczytaj: https://techniczny.wordpress.com/2012/04/07/wielozadaniowosc-w-arduino/ RE: Problem po dodaniu komend - JasQ - 30-11-2016 namok teoria słuszna tylko jak zacznie mieszać to z podziwu nie wyjdzie tu masz 1 linijkę do dołożenia efekt ten sam powinno działać daj zamiast 1800 sek 5 sek i sprawdź Kod: void setup() { RE: Problem po dodaniu komend - maniolx - 01-12-2016 (30-11-2016, 00:48)Automatyk napisał(a): Funkcja delay jest odpowiedzialna za ten błąd ten wątek juz tu był gdzieś poruszony musisz użyć innej funkcji np millis (30-11-2016, 08:28)JasQ napisał(a): namok teoria słuszna tylko jak zacznie mieszać to z podziwu nie wyjdzie tu masz 1 linijkę do dołożenia efekt ten sam Dziękuję serdecznie za tą pomoc . Oczywiście pomogła i uzyskałem zamierzony efekt ale ..... Jeżeli umieściłem fragment : Kod: if ( (millis()/1000) < 20 )digitalWrite(3,HIGH);else digitalWrite(3,LOW); na końcu sekcji void loop() { to działało jak uprzednio , natomiast dopiero przeniesieniu tego na sam początek void loop() { zadziałało tak jak trzeba ale ..... I tu muszę wrócić na sam początek i wytłumaczyć po co było potrzebne mi wyzwalanie tego pinu cyfrowego po określonym czasie . Jak już wspomniałem układ który zbudowałem z "klocków' arduino potrzebny był mi do pomiaru temperatury na piecu CO . Ponieważ mieszkanie jest na piętrze pierwszym a kotłownia w piwnicy a chciałem mieć dokładny podgląd na temperatury zarówno w domu jak i w piwnicy , to zbudowałem taki układ na arduino, że cała centralka i jeden wyświetlacz dwuliniowy jest umieszczony przy piecu , natomiast drugi wyświetlacz czteroliniowy wisi w domu na 10 metrowym kablu połączonym z centralką w piwnicy (wiem że to za duża odległość) . Oba wyświetlacze są na magistrali I2C . I niby cały układzik fajnie hula pokazując wszystkie temperatury . Lekkie problemy pojawiają się po kilkudziesięciu godzinach , gdy czasami wyświetlacz w domu wyświetla jakieś dodatkowe symbole lub zatrzymuje się na jakiejś temperaturze i tak wisi pokazując cały czas to samo . Do tej pory radziłem sobie tak że schodziłem do piwnicy odłączałem na chwilkę zasilanie od arduino i po załączeniu układ znowu działał kilkadziesiąt godzin . Postanowiłem to zmienić . I tu właśnie jest to potrzebne mi wyjście cyfrowe uruchamiane po pewnym czasie . Wymyśliłem sobie że wykorzystam moduł z przekaznikiem który to miał sterować owy pin cyfrowy . Przeciąłem ścieżkę vcc podającą zasilanie do arduinio i przecięte ścieżki podłączyłem do styków przekaznika . Miało to działać tak : Załączam arduino styki przekaznika pozostają zwarte i arduino jest normalnie zasilane . Po upływie zadanego czasu zostaje wyzwolony omawiany pin cyfrowy który wyzwala przekaznik i przekaznik rozłącza zasilanie do arduino . Oczywiście dzieje się to bardzo krótko bo nie mając zasilania przekaznik puszcza i wraca do swojego pierwotnego położenia i znowu włącza zasilanie do arduino . Niestety był to czas za krótki by dobrze zrestartować arduino , a zwiększyć tego czasu nie było jak - chyba przez dodanie jakiegoś elektrolitu podtrzymującego przekaznik jakiś czas bez napięcia . Do tego przeważnie było czasami tak że po ponownym załączeniu przekaznik "cykał cały czas co sekundę . Zostawiłem to i postanowiłem wykorzystać przycisk reset znajdujący się na płytce arduino . Wyprowadziłem od resetu dwa kabelki i podłączyłem do styków przekaznika . I teraz działa to tak że po zadanym czasie arduino uruchamia przekaznik a on zwierając styki powoduje reset arduino . Ale ...... Nie może być dobrze bo po resecie wyświetlacze wskazują już coś takiego jak na zdjęciu drugim (zdjęcie pierwsze pokazuje wskazania wyświetlacza przed wyzwoleniem przycisku reset) Oczywiście sytuacja wraca dopiero do normy po odłączeniu zasilania . Już mi pomału ręce opadają . może ma ktoś jeszcze jakieś pomysły ? RE: Problem po dodaniu komend - namok - 01-12-2016 Jeśli to 10m to rs232 powinien działać. Kup zwykłą atmegę 328, zaprogramuj żeby wyświetlała pomiary i czytała dane z arduino przy piecu. Gdyby były problemy to zawsze możesz zastosować konwertery na rs485. RE: Problem po dodaniu komend - adix - 01-12-2016 Ja wyświetlanie zrobił bym na przerwaniu programowym w zasadzie ta opcja ma dużo zastosowań. RE: Problem po dodaniu komend - JasQ - 01-12-2016 Jakiś czas temu walczyłem z identycznym problemem . Niestety te wyświetlacze i na i2c i tak jak ja używam shiftreg są bardzo czułe na różnego rodzaju wyładowania elektrostatyczne jak i potrafią się same wysypać . Jeżeli tylko wyświetlacz się wyłącza a program pracuje normalnie to nie ma strachu wystarczy dodać Kod: long pm = 0; a jak to nie pomoże ( powinno ale... ) tutaj masz kod dla twojego programu bez przekaźników łączysz jak masz w programie pin 3 z pinem reset zworką ,( to jest tylko dla pinu 3 ) Kod: void setup() { można też użyć software reset ale wchodzą w to funkcje związane z wachdog a tego nawet producent atmegi nie zaleca RE: Problem po dodaniu komend - maniolx - 01-12-2016 Jeszcze raz dzięki . Będę dalej próbował . Ale jeszcze dzisiaj jedną bardzo dziwną rzecz zauważyłem . Pierwsze próby robiłem na nierozpalonym piecu (jak widać na załączonych zdjęciach z temperaturami) I te dziwne wyświetlanie liczb po każdym resecie następowały na zimnym piecu . Natomiast dzisiaj po południu rozpaliłem piec i od tej pory temperatura wyświetlana jest prawidłowo nawet po każdym sprzętowym resecie . Nie wiem o co tu biega . A i przypomniałem sobie że gdy nie miałem jeszcze tego przekaznika resetującego to gdy rozpalałem piec to wszystko wskazywało dobrze a gdy na drugi dzień budziłem się rano to piec już był zimny a na wyświetlaczu wyswietlały się jakieś dziwne znaki . Czy to możliwe aby to prawidłowo chodziło gdy piec jest rozpalony . |