Skocz do zawartości

kaczakat

Użytkownicy
  • Zawartość

    312
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    5

kaczakat wygrał w ostatnim dniu 23 kwietnia 2019

kaczakat ma najbardziej lubianą zawartość!

Reputacja

101 Mistrz

1 obserwujący

O kaczakat

  • Ranga
    6/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Typowe przykłady w Arduino to DEMA, używają funkcji delay() do zarządzania czasem. Pierwszy krok w kierunku pisania normalnych programów to zastąpienie delay funkcją millis. Można wtedy migać regularnie LED co 100-1000ms, jednocześnie (a na prawdę w "międzyczasie") wyświetlać dane na ekran, odczytywać czujniki, wejścia analogowe i cyfrowe. Nie zrobisz programu wielozadaniowego łącząc DEMA w jeden program. Ale można tak połączyć DEMA, że działa raz jedno, raz kolejne.
  2. Tak, używasz biblioteki softserial i wtedy piny dowolne wolne, na 9600baud powinna działać bez problemu. Dzielnik napięcia zabezpiecza przed uszkodzeniem, ale jedynie obniża napięcie modułowi HC do poziomu 3V, nie podbija w drugą stronę do 5V dla UNO, choć oczywiście zwykle to działa, tak samo jak zwykle nic nie uszkadzałem podłączając HC bezpośrednio do 5V. Oczywiście są różne moduły HC. Pewne działanie jest wtedy gdy poziomy logiczne są niższe od 1/3 i wyższe od 2/3 Vcc, pośrednie poziomy dają pewną dozę niepewności.
  3. Fotografie, które załączyłeś są nieczytelne. Dzielnik napięcia dajesz tylko na TX Arduino, jeśli w ogóle, wszystkie moduły HC-05 i HC-06, które miałem działają bez problemu na logice 5V. Już lepiej dać konwerter poziomów, wtedy sygnały z 3V również są podnoszone do 5V na odbiorniku Atmegi. Kolejna sprawa to UNO ma tylko 1 UART i jest podłączony do portu USB. Do komunikacji z innymi elementami pozostaje softserial na innych pinach lub użycie płytki, która ma więcej sprzętowych (Leonardo, MICRO, MEGA). To czasami może działać, są rezystory 1k między UNO i USB, ale nie musi.
  4. Jak masz problem z wgraniem kodu to zacznij od wgrania przykładu, który działa zawsze i wszędzie - blink. Od razu wiedziałbyś, że też się nie wgrywa i zamieszczanie na forum kodu od NRF nie ma żadnego sensu. Żeby coś wgrać musisz mieć sprawną płytkę, podłączoną sprawnym kablem, do właściwego portu COM wybranego w menu. Jak płytka ma objawy, że na jakimś kablu pojawia się i znika to ten kabel (czasami gniazdo USB płytki) można sobie schować w koszu. Z drugiej strony właściwy port COM powinien pojawiać się i znikać gdy podłączasz/odłączasz płytkę. Oczywiście płytka musi być taka sama jak wybrana w opcjach programu. Jeśli się nie wgrywa to bierzesz programator i próbujesz odczytać uC. Jeśli się da to wgraj na nowo bootloader, możesz wgrać ten kod używając opcji "Wgraj używając programatora", pamiętaj by wybrać odpowiedni programator z listy, tylko przy tej czynności i przy wgrywaniu bootloadera wybór programatora ma znacznie. Pamiętaj, że każde wgranie kodu programatorem nadpisuje bootloader i potem trzeba go wgrać ponownie by przywrócić funkcję wgrywania przez portu USB płytki NANO/UNO. Dodatkowo płytka NANO ma 3 opcje do wyboru związane z uC i bootloaderem, starszy ale wciąż spotykany w klonach z Chin wymaga opcji OLD. Użycie programatora USBASP czy innego ISP to faktycznie podłączenie go pod piny 11,12,13, RST UNO/NANO. W czasie programowania nic pod te piny nie może być podłączone. Analogicznie użycie portu USB i bootloadera to podłączenie pod piny 0 i 1, nic pod te piny w czasie wgrywania nie może być podłączone. Czasami uda się coś wgrać pomimo podłączenia czegoś pod piny używane do programowania, ale nawet jak się udało 10 razy z rzędu to nie znaczy, że tak należy robić.
  5. Raczej po prostu zrobiłeś to źle. Jeśli chcesz mieć tekst na ekranie stały przez całe działanie programu to robisz sobie bufor - tablice char, o ilości znaków na cały ekran +1 i tylko na niej "piszesz", a raz na sekundę (poczytaj tu w kursie o millis(), zobacz przykład w Arduino blinkwithoutdelay) wysyłasz taką tablicę na drugą linię LCD, to nadpisuje całą linię LCD, ale tylko tą drugą, napis na pierwszej pozostaje bez zmian. Jeśli w którymkolwiek momencie użyjesz lcd.clear(); to cały ekran znika i musisz wszystko odrysować od nowa. Oczywiście możesz sobie ekran podzielić na 4 części, ale nie można po prostu wrzucać tam zmiennej, bo ta raz może być 133, raz -2 i zostawałby "duchy" poprzednich wartości, np. z tych dwóch by zostało -23. Tak można zrobić to w miarę szybko, operacje na tablicy są znacznie szybsze niż wysłanie na ekran 16 spacji by wyczyścić linię, a potem tekst właściwy, a najwolniejsze jest .clear(). Możesz zrobić tak, że natychmiast po wysłaniu ekranu tablicę zapełniasz spacjami, a potem uzupełniasz danymi w odpowiednie miejsca, wysyłasz i powtarzasz. Kolejnym krokiem jest mieć w pamięci kilka takich całych ekranów (każda linia to 16B+1 na zero kończące napis) i je sobie zmieniać w zależności od sytuacji, np. migające menu nastaw na zmianę z ekranem głównym.
  6. Wykonanie funkcji Serial.print w Arduino nie trwa istotnie długo w porównaniu do szukanego czasu, bo to tylko przepisanie danych z bieżącej zmiennej do bufora nadawczego, a prędkość 9600 czy 115200 ma znaczenie tylko w sensie przepełnienia tego bufora - jeśli będzie to 9600 jest większe prawdopodobieństwo, że zapełnimy bufor zanim zostanie to wystukane na UART.
  7. Ktoś miał, opisywał to na forum ArduinoPolska, zmienił bibliotekę PCF8574 na inną i tak rozwiązał problem. Jak tylko się przymierzasz to po prostu uruchom i sprawdź czy jest konflikt, może akurat od razu trafisz na zgodne. Większą pewność działania daje UART sprzętowy, np. MEGA ma 4, LEONARDO/MICRO ma jeden, ale "dodatkowy" - nieużywany do komunikacji z PC.
  8. 0x3F i 0x27 to popularne adresy LCD na I2C. Szybciej by było coś powiedzieć, gdybyś po prostu pokazał kod programu. Są funkcje do wysłania jednego znaku, są do wysyłania tekstu. Ta pierwsza jest zwykle wykorzystywana w drugiej.
  9. Chyba tego brakuje: |(1<<ADFR) //tryb Free run
  10. Znajdź sobie w Google "zadig 2.4 download", sprawdź w managerze urządzeń jakie masz zainstalowane sterowniki i podmień na inne. Można zainstalować co najmniej trzy różne, Arduino nie z każdym działa. Ja używam libusbK.
  11. Najlepiej podaj dokładnie co masz, gdzie kupiłeś. Ledy programowalne niekoniecznie muszą mieć 3 pola, jest nowy typ z bypassem i ma 4 pola, a 5V sugeruje raczej właśnie te programowalne.
  12. HC-05 podłączasz do komputera i komendami AT sprawdzasz jak jest skonfigurowany. Np. może być ustawiony w tryb master i nikt go nie zobaczy, bo czeka na komendy AT do inicjalizacji połączenia ze SLAVE. Choć oczywiście typowo przylatują ustawione na SLAVE 9600b. Podłącz sobie go do konwertera UART-USB, zasilanie, GND, TX i RX na krzyż, wciśnij przycisk, podłącz do portu USB by zasilić, po chwili puść przycisk, powinien być w trybie komend AT na prędkości 38400b, podłącz się terminalem Arduino, ustaw taką prędkość i wyślij AT, zobacz czy odpowie OK. Potem PDF tego modułu do ręki i ustaw sobie tak jak chcesz.
  13. Zasilanie i logika nie do końca idą w parze, niektóre moduły wymagają zasilania 4.4V a logikę mają 2.8V (GSM) i na odwrót - NRF41l01 wymaga zasilania 3.3V, a radzi sobie z logiką 5V doskonale. Podciąganie linii komunikacyjne I2C powinno być dobrane adekwatnie do pojemności linii, napięcia zasilania i prędkości komunikacji. Ostatecznie można użyć jakiegoś multipleksera i zrobić przełącznik, 1 magistrala z uC, osiem urządzeń I2C na osobnych - TCA9548A I2C Multiplexer, rozdzielisz to co się ze sobą gryzie.
  14. Może korzystasz z gotowych modułów Arduino, każdy ma już swoje rezystory podciągające, Ty dokładasz jeszcze swoje. Moduły jak BME280 też często są przystosowane do komunikacji na poziomie 5V, bo są dla Arduino, jak im dokładasz konwerter to pogarszasz zamiast polepszać. Ale sam musisz to stwierdzić, sprzedawcy często podają, że jest 3.3V i najczęściej to zadziała zarówno po 5V jak i na 3.3, ale nie musi. Długość połączeń też ma znaczenie, typowo I2C to jest połączenie "wewnątrzpudełkowe", kilkanaście cm.
  15. Ten LCD podłącza się do magistrali I2C i by dobrze to działało musisz wybrać dokładnie te piny w Arduino, odpowiednio SCL i SDA. Na początek musisz potwierdzić jego adres, wgrywasz szkic I2Cscanner i sprawdzasz jaki adres ma LCD, informacje są wyrzucane na UART. Zwykle jest to 0x27. Potem dodaj sobie bibliotekę LiquidCrystal_PCF8574 lub jakąś LiquidCrystal z I2C w nazwie (jest kilka do wyboru w managerze bibliotek wprost w programie Arduino) i skorzystaj z przykładów.
×
×
  • Utwórz nowe...