Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 30 kwi 2025, o 16:22


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 18 maja 2021, o 19:44 
    Offline
    Nowy

    Dołączył(a): 05 mar 2014
    Posty: 16
    Pomógł: 0

    Hej mam pytanie może mi ktos pomoże podlaczylem dwa arduina nano atmega328 ze soba Rx-TX i chce przesyłac
    dane po uarcie normalnie to ma byc wlasne sterowanie zdalne do jakiegos modelu np latajacego docelowo zeby odbiornik sterował serwami

    Mam pytanie dlaczego adruino uart jest taki wolny ? Normalnie robie jakis tam przyklad z książki ze TX wciskam dwa klawisze i RX jesli wcisne jeden to zapali sie jedna dioda i tak dalej zamiast diody mialo by serwo .Ale czemu to takie wolne jest ? w programie jest standardowo

    serial.port(9600) itd ale to przelanie danych zapalenie diody RX w odbiorniku trwa ze 3 sek , to ten model latajacy dawno mi spadnie i sie rozbije :) jak z takim tempem bedę dane przesyłał .Myslalem ze to z prędkoscia swiatła jest ..:)

    Zaznaczam ze jestem od lat poczatkujacy C to chyba nigdy sie nie naucze a wiele razy próbowalem najprostsze cwiczenia z atmega8 ale stanalem na jakims tam etapie teraz próbuje arduino
    Kod mogę zapodać



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 maja 2021, o 20:27 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    To nie Uart jest wolny, tylko to co wgrałeś.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 maja 2021, o 20:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    Podaj kod.
    Problem występuje zaraz po uruchomieniu arduino? Czy po jakimś czasie?
    Zauważ, że w arduino masz przejściówkę USB<>UART do wgrywania wsadu. Zaraz po podaniu zasilania działa bootloader, który może powodować "opóźnienia"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 07:50 
    Offline
    Nowy

    Dołączył(a): 05 mar 2014
    Posty: 16
    Pomógł: 0

    //programiki na RX I TX
    // nadajnik
    #define BUTTON 10
    #define BUTTON1 11
    void setup ()
    {
    Serial.begin(9600);
    }
    void loop()
    {
    if ( digitalRead(BUTTON) == HIGH )
    {
    Serial.print("1 ");

    }
    if ( digitalRead(BUTTON1) == HIGH )
    {
    Serial.print("2 "); }
    }
    //////////////////////////////////////////////////////////////////////
    //odbiornik
    #define led 8
    #define led1 9
    //#include <Servo.h>

    //Servo myservo;
    String odebraneDane = ""; //Pusty ciąg odebranych danych

    void setup() {

    //myservo.attach(9);
    Serial.begin(9600); //Uruchomienie komunikacji
    pinMode(led, OUTPUT); //Konfiguracja wyjść
    pinMode(led1, OUTPUT);

    digitalWrite(led, LOW); //Wyłączamy diody
    digitalWrite(led1, LOW);
    }

    void loop() {
    if(Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n');

    if (odebraneDane == "1") { //Jeśli odebrano słowo "zielona"
    digitalWrite(led, HIGH); //To włączamy diodę zieloną
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH); //To włączamy diodę zieloną
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH); //To włączamy diodę zieloną
    delay(100);
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH); //To włączamy diodę zieloną
    delay(100);
    digitalWrite(led, LOW);
    }

    if (odebraneDane == "2") { //Jeśli odebrano słowo "czerwona"
    digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
    delay(100);
    digitalWrite(led1, LOW);
    delay(100);
    digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
    delay(100);
    digitalWrite(led1, LOW);
    delay(100);
    digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
    delay(100);
    digitalWrite(led1, LOW);
    delay(100);
    digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
    delay(100);
    digitalWrite(led1, LOW);
    //myservo.write(180);
    //delay(500);
    //myservo.write(90);
    //delay(500);
    //myservo.write(0);
    //delay(500);
    }
    }
    }
    Klasyczne ksiazkowe programy
    Znaczy jak nie uart jest wolny? przy tej transmisji 9600 ktora jest niby najbardziej optymalna ze bledow nie ma ? no chce zeby to sie szybko działo normalnie transmisja miedzy prockiem a proskiem . a tu jak w TX wciskam guzik to sie w RX dioda zapala i zanim sie diody zaświeca to 3 sekundy mija .Przecież np w komputerach myszka jak sie klika to reguje od razu. I drugie pytanie tam jest zakrementowane // instrukcje od serwa , jak je chcialem wprowadzic zeby serwo cos robilo to juz pierwsza czesc programu z diodami nie działała



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 07:55 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Zastanawiałeś się jaka jest przepustowość przy 9600? Przy standardowej transmisji 8 bitow danych, brak bitu parzystości, 1 bit stopu masz 960 znaków na sekundę. Więc jak widzisz 9600 mimo, że wolne to jednak nie takie straszne wolne - zależy co i ile chcesz przesyłać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 09:16 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2015
    Posty: 164
    Lokalizacja: Koszalin
    Pomógł: 16

    ATmega 328P i 16Mhz w Arduino więć?

    Obrazek

    Możesz też 19.2k, 38.4k nawet 78.6k. Kwarc 16Mhz Ciebie ogranicza oraz wyłącz ten program do Adruino i zacznij pisać kod w Eclipsie. Zacznij wykorzystywać cały potencjał a nie 0,01% :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 09:41 
    Offline
    Nowy

    Dołączył(a): 05 mar 2014
    Posty: 16
    Pomógł: 0

    Ale gdzie tam ja poczatkujacy jestem nie poradze sobie z tym za chiny ja tylko umiem przyklad z ksiazki albe neta spisać.Zaawansowane instrukcje nie kumam.Nawet nie umiem licznikow skonfigurowac zeby sobie generator zrobić fajny albo wlasnie do serwa kod ( inny niz to fade z example ) Pisanie w eclipse ? ale to w jest C a nie w arduino ? nie wiem o czym mowa wogóle :)

    Czyli żeby szybciej sie to robiło to tylko programik RX trzeba poprawic ? ale jak ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 09:41 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    Prędkość UARTa nie jest tu problemem. Problemem jest użycie delay(). Do migania diodami wykorzystaj funkcje millis() lub timery programowe żeby nie blokować obługi UARTa (funkcja Serial.available()) na kilka sekund za każdym razem po odebrniu jednego znaku.

    https://forbot.pl/blog/kurs-arduino-ii-wielozadaniowosc-opoznienia-z-millis-id18418



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 20:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    Mario17 napisał(a):
    żeby nie blokować obługi UARTa (funkcja Serial.available()) na kilka sekund za każdym razem po odebrniu jednego znaku
    Przecież tu blokuje "tylko" na ok. sekundę.
    Masz na arduino diody Tx, Rx? Jeśli tak, sprawdź, czy dioda Tx nadajnika "mrugnie" od razu po wciśnięciu przycisku.
    I jeszcze jedno, jak masz przyciski podłączone? Z tego, co widzę, nie uruchamiasz przycisków. W odbiorniku masz ładnie pinMode(led,OUTPUT; w nadajniku brakuje odpowiednika dla przycisków.

    Jak znajdę drugie arduino, spróbuję uruchomić Twój przykład, zobaczę co się stanie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 maja 2021, o 21:51 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    Marhef napisał(a):
    Przecież tu blokuje "tylko" na ok. sekundę.

    No tak, nie zauważyłem że delay(500) są zakomentowane w drugim przypaku, co nie zmienia że obłsuga UART i miganie diodami w ten sposób nie jest najlepsze.

    Po stronie nadajnika TX wysyłane jest Serial.print("1<spacja>"); Serial.print("2<spacja>");, o ile dobrze jest kod pokazany (przy okazji kod powinien być wstawiony w [syntax c]). Powinno być Serial.print("1\n"); Serial.print("2\n"); bo po stronie RX odbiornik czeka na znak '\n'.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO