logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino - Błędne odczyty stanu pinu przez Webserwer

shady79 07 Wrz 2015 11:15 1185 8
  • #1 14977748
    shady79
    Poziom 13  
    Posty: 221
    Ocena: 1
    Witam,

    Bawię się Arduino, próbuję odczytać stan na pinie po przez przeglądarkę i otrzymuję błędne informacje. Otóż nie za każdym razem informacja o poprawnym stanie pinu jest pokazywana. Program wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Mam podgląd na serialu co się dzieje i wygląda na to że przeglądarka wysyła prawidłowo informacje, po kliknięciu w przycisk "wlacz" stan na pinie się zmienia na wysoki ale na stronie informacja się nie odświeża dopiero powtórne kliknięcie przycisku powoduje zmianę informacji na stronie. Wygląda to tak jakby przeglądarka zbyt szybko wyświetlała zawartość strony zanim jeszcze stan na pinie się zmienił... ale wstawienie delay'a nic nie zmienia. Ma ktoś jakiś pomysł??

    Kuba
  • #2 14977949
    Walentynka
    Poziom 14  
    Posty: 116
    Pomógł: 11
    Ocena: 21
    Według dokumentacji arduino : Link

    piny mogą być albo wejściem albo wyjściem, a ty używasz jednego pinu do dwóch operacji. Jeśli ustawiasz pin jako wyjście i stan wysoki, to będzie tam panował stan wysoki po co to sprawdzać ? ale jeśli chcesz to sprawdzić zrób to innym pinem.
  • #3 14977959
    shady79
    Poziom 13  
    Posty: 221
    Ocena: 1
    Walentynka napisał:
    Według dokumentacji arduino : Link

    piny mogą być albo wejściem albo wyjściem, a ty używasz jednego pinu do dwóch operacji. Jeśli ustawiasz pin jako wyjście i stan wysoki, to będzie tam panował stan wysoki po co to sprawdzać ? ale jeśli chcesz to sprawdzić zrób to innym pinem.


    Rozumiem że digitalRead w przypadku gdy pin ustawiony jest jako wyjście nie ma sensu?? ale działa... i nie tutaj jest chyba problem ponieważ nawet gdy sprawdzam stan pinu za pomoca zmiennej do której wpisuje odpowiedni stan (zmienna stan) to sytuacja wygląda identycznie w przeglądarce. Pośrednio poradziłem sobie dając odświeżanie automatyczne co 5s i wtedy stan jest odczytywany prawidłowo.
  • #4 14978012
    Walentynka
    Poziom 14  
    Posty: 116
    Pomógł: 11
    Ocena: 21
    Ustawiasz Pin jako OUTPUT a następnie używasz komendy digitalRead(); pytanie jest co się wtedy dzieje ?

    Podejrzewam ze gdybyś to zrobił zgodnie z dokumentacja to już nie będzie działać. Teraz zrobiłeś coś ale żeby odpowiedzieć na pytanie dlaczego to działa trzeba by zanalizować za dużo dokumentów i czasu.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 14978068
    shady79
    Poziom 13  
    Posty: 221
    Ocena: 1
    Walentynka napisał:
    Ustawiasz Pin jako OUTPUT a następnie używasz komendy digitalRead(); pytanie jest co się wtedy dzieje ?

    Podejrzewam ze gdybyś to zrobił zgodnie z dokumentacja to już nie będzie działać. Teraz zrobiłeś coś ale żeby odpowiedzieć na pytanie dlaczego to działa trzeba by zanalizować za dużo dokumentów i czasu.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak to faktycznie nie działa....
  • #6 14980718
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    shady79 napisał:
    Rozumiem że digitalRead w przypadku gdy pin ustawiony jest jako wyjście nie ma sensu??

    Na to pytanie odpowiada dokumentacja mikrokontrolera na schemacie pinu:

    Arduino - Błędne odczyty stanu pinu przez Webserwer

    Szczegóły: http://mikrokontrolery.blogspot.com/2011/04/jak-mikrokontroler-widzi-sygnal-cyfrowy.html

    ... a sens jaki? Na przykład: sprawdzenie np. czy przy ustawionym pinie na 1 logiczną w rejestrze PORT, pin ten nie został zwarty zewnętrznie do masy, co jest przecież czasami możliwe.
  • #8 14982663
    shady79
    Poziom 13  
    Posty: 221
    Ocena: 1
    uzi18 napisał:
    Problem wynika prawdopodobnie z powodu cache-owania strony przez przegladarke.
    Dodaj wysylanie ponizszych naglowkow po "Connection: close":
    Kod: HTML, XML
    Zaloguj się, aby zobaczyć kod


    Też tak uważam, ponieważ po odświeżeniu strony stan jest aktualizowany. Dziś sprawdzę czy rozwiązanie to pomogło i dam znać. Co prawda wcześniej już z tym kombinowałem ale być może w zły sposób to robiłem.

    K.
  • #9 15020426
    szczepulek
    Poziom 12  
    Posty: 173
    Ocena: 30
    shady79 napisał:
    uzi18 napisał:
    Problem wynika prawdopodobnie z powodu cache-owania strony przez przegladarke.
    Dodaj wysylanie ponizszych naglowkow po "Connection: close":
    Kod: HTML, XML
    Zaloguj się, aby zobaczyć kod


    Też tak uważam, ponieważ po odświeżeniu strony stan jest aktualizowany. Dziś sprawdzę czy rozwiązanie to pomogło i dam znać. Co prawda wcześniej już z tym kombinowałem ale być może w zły sposób to robiłem.

    K.
    i co wynikło ?

Podsumowanie tematu

✨ Użytkownik boryka się z problemem błędnych odczytów stanu pinu na Arduino przez serwer Ethernet. W kodzie, pin 7 jest ustawiony jako wyjście, a następnie odczytywany, co jest niezgodne z dokumentacją. Użytkownicy sugerują, że odczyt stanu pinu, gdy jest on ustawiony jako wyjście, nie ma sensu, a problem może wynikać z cache'owania strony przez przeglądarkę. Proponowane rozwiązania obejmują dodanie nagłówków do odpowiedzi HTTP, aby wyłączyć cache. Użytkownik zauważył, że automatyczne odświeżanie strony co 5 sekund poprawia odczyty.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA