Skocz do zawartości

Kurs Arduino - #3 - UART (komunikacja z PC), zmienne


Pomocna odpowiedź

Witam,

mam pytanie, jak wysłać/odbierać zera bitowe, np wartość 0x00 ?

np. dla : Serial.print(0x04.HEX);  otrzymuję 4 a nie 04 (BIN 100 a powinno być 0000 0100)

Problem w tym że nie otrzymuję pełnej informacji. Z góry dzięki

 

Edytowano przez 1991piotrek
Link do komentarza
Share on other sites

Dzięki za szybką odpowiedz, próbowałem tej funkcji i nie działa w moim przypadku albo coś robię źle.

#include <SoftwareSerial.h>

uint8_t test[2]  = {0x00,0x44};
char bufforDanych[8] {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

void setup() 
{
  Serial.begin(57600);
  Serial1.begin(10400);
}

void loop() 
{ 
  // WYSYŁA
  if(Serial.available())
  {
    for(int i=0; i<sizeof(test); i++)
     {
      Serial1.println(test[i],BIN);
      delay(20);
      Serial.read();   
    }
  }

  // ODBIERA
  while(Serial1.available())
  {
    sprintf(bufforDanych,Serial1.read());
    Serial.println(bufforDanych);
  }
}

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

ethanak jak masz zły dzień to idź pobiegać a nie wyładuj swojej agresji na mnie, zwyczajnie napisałem ze nie potrafię z niej właściwie korzystać a nie "jojcze". To pytanie nie było skierowanie konkretnie do ciebie,  jeżeli w niczym nie pomożesz to poco się udzielasz?

  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

2 minuty temu, 1991piotrek napisał:

zwyczajnie napisałem ze nie potrafię z niej właściwie korzystać

Podałem link do dokumentacji? Podałem. Więc może zamiast obrażać się i tupać nóżkami bo się odezwał ktoś inny niż sobie wymarzyłeś (tak działa forum) to usiądziesz i poczytasz.

 

4 minuty temu, 1991piotrek napisał:

jeżeli w niczym nie pomożesz

No, tu już przesadziłeś. Podanie linku do opisu konkretnej funkcji to za mało? Co jeszcze chcesz? Mam to przeczytać za ciebie? Dziękuję, ja już czytałem.

 

  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

ethanak potrafię korzystać w wyszukiwarki, poza tym Gieneq wcześniej wysłał link do opisu, może problem wynika z mojej interpretacji lub braków w programowaniu ( jestem początkującym) ty "pomagasz" w stylu kopiuj i wklej, jak dla mnie to nie pomoc. Nie wnikam w to kto odpowiada ale co odpowiada ( nie podoba mi się sposób twoich odpowiedzi skierowanych do mnie. Ethanak może byłeś dotkliwie karany przez całe swoje zycie jeżeli czegoś nie umiałeś lub nie rozumiałeś, pewnie stąd ta agresja w twoich wypowiedziach )

Edytowano przez 1991piotrek
  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

Czego nie zrozumiałeś z dokumentacji? Napisz konkretnie, ktoś na pewno pomoże. I nie doszukuj się jakiejś agresji tam, gdzie jej nie ma.

Każdy z nas był kiedyś początkujący i nie ma co się tego wstydzić. Ale zadanie konkretnego pytania może pomóc szybciej, niż stwierdzenie "nie działa". Kompilator też pewnie jakieś ostrzeżenue wypisał, też warto podać...

Link do komentarza
Share on other sites

Problem opisałem na początku

Dnia 31.08.2020 o 09:30, 1991piotrek napisał:

Witam,

mam pytanie, jak wysłać/odbierać zera bitowe, np wartość 0x00 ?

np. dla : Serial.print(0x04.HEX);  otrzymuję 4 a nie 04 (BIN 100 a powinno być 0000 0100)

Problem w tym że nie otrzymuję pełnej informacji. Z góry dzięki

 

Po prostu męczę ten problem chyba od dwóch tygodni i już tracę chęci(zdecydowałem się poprosić o pomoc na forum, a w odpowiedzi między innymi dostaję ze "jojcze"😡). Więc jeszcze raz od początku.

Jeżeli wysyłam szesnastkowo liczbę to funkcja print ucina początkowe zera i dostaję nie pełną informację (zer nie ma też gdy sprawdzam to w putty, może muszę je inaczej skonfigurować? ),dlatego mam problem z sprawdzeniem echa ( komunikacja jedno przewodowa KWP200),  mogę zrobić własną funkcję która je uzupełni (chyba już zapętliłem się w rozumowaniu przy niej i muszę odpocząć😄) . Miałem nadzieje ze jest jakaś gotowa funkcja o której zwyczajnie nie wiem a działała by dla mnie tak jak chce. Podczas kompilacji tego powyższego programu nie dostaje żadnych błędów

Edytowano przez 1991piotrek
Link do komentarza
Share on other sites

Gotową funkcją jest właśnie sprintf. Coś w stylu:

sprintf(bufor, "%02x", zmienna);

Najważniejszy jest tu drugi argument (format), który informuje funkcję w jaki sposób ma wypisać wartość (wartości) - w tym przypadku oznacza to "dwie cyfry szesnastkowe z wiodącym zerem".

Więcej informacji w dokumentacji, ew. wpisz w przeglądarkę "man sprintf" (funkcja z avr-libc różni się co prawda w szczegółach od standartu, ale na początek powinno wystarczyć).

Ogólnie - istnieje cała rodzina funkcji *printf, różnią się sposobem traktowania parametrów i umieszczaniem wyników, ale format traktują wszystkie tak samo; jeśli poznasz jedną z nich to tak jakbyś poznał wszystkie.

Aha, musiałeś dostać ostrzeżenie od kompilatora o niezgodności typu drugiego parametru - czy przypadkiem nie masz w preferencjach wyłączonego wyświetlania wszystkich komunikatów?

Edytowano przez ethanak
  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

@1991piotrek fajnie, że udało się rozwiązać temat, jakbyś mógł wrzucić ostateczny kod, może komuś się przyda, a sam jestem ciekaw co z tego wyszło.

Poza tym jak zawsze zachęcamy do bycia przyjaznym na forum. Może problemu nie rozwiąże ani bieganie, ani jojczenie, ale pomoże ich uniknąć lakoniczność we wpisach i podawanie samych konkretów, tak by nie było o jedno zdanie za dużo 🙂 Miłego popołudnia

  • Lubię! 1
Link do komentarza
Share on other sites

@Gieneqtu nie chodzi o przyjazność czy lakoniczność. Droga powinna być taka:

Nie wiem jak to zrobić, zapytam.

Masz link do dokumentacji.

Czytam, czytam, i nie rozumiem co znaczy X.

X znaczy to a to.

Aha, rozumiem.

Nigdy taka:

Mnie nie działa.

A czytałeś dokumentację?

Nie bądź agresywny, masz minusa, a zaraz napiszę do admina to będziesz miał bana!

(niestety, przypadek autentyczny).

Przy okazji - dlaczego na wersji mobile nie mogę wstawić listy?

Link do komentarza
Share on other sites

Świat nie jest czarno biały i każdy go widzi po swojemu. Przepraszam jeżeli ktoś poczuł się urażony moimi postami.

Co do kodu to użyłem w końcu poprawie funkcji sprintf dzięki ethanak,

#include <SoftwareSerial.h>

byte test[2]  = {0,255}; // wysyłam dziesiętnie
char bufforDanych[8] {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

void setup() 
{
  Serial.begin(57600);
  Serial1.begin(10400);
}

void loop() 
{ 
  // WYSYŁA
  if(Serial.available()){
        Serial1.write(test,2);
        delay(20);
        Serial.read();    
  }

  // ODBIERA
  if(Serial1.available()){
    sprintf(bufforDanych,"%01d",Serial1.read());
    Serial.println(bufforDanych);
  }
}

 

Link do komentarza
Share on other sites

2 godziny temu, 1991piotrek napisał:

sprintf(bufforDanych,"%01d",Serial1.read());

 

Czy nie uważasz, że jest to absolutnie bez sensu?

%01d oznacza "jednocyfrowa liczba dziesiętna, a jeśli będzie mniejsza niż jednocyfrowa uzupełnij ją po lewej stronie zerami".

Teraz przeczytaj to co napisałem.

Teraz jeszcze raz.

I jeszcze raz.

I już nic nie pisz, tylko pomyśl, czy naprawdę o to ci chodziło?

Aha, tu nie ma żadnej agresji.

 

Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.