Skocz do zawartości
Komentator

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

Pomocna odpowiedź

@HaroldWinter witam na forum i fajnie że podzieliłeś się swoim rozwiązaniem 🙂 

Tak na to patrzę to możesz zlepić to co w warunkach występuje kilka razy - np sprawdzasz czy string to zielona / czerwona po 2 razy. Możesz dać to w spólny warunek a wewnątrz sprawdzać jaki był ostatnio stan.

Jeżeli stan determinuje kolor świecenia diod to go użyj 🙂 tylko zamiast true i false niech stan będzie intem i sprawdzaj czy miał HIGH/LOW.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
Share on other sites

@1991piotrek możesz spróbować użyć funkcję sprintf. Wynik dasz do bufora znaków (tablicy char o zadanej długości) i nic nie powinno uciec.

  • Lubię! 1

Udostępnij ten post


Link to post
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);
  }
}

 

Udostępnij ten post


Link to post
Share on other sites
44 minuty temu, 1991piotrek napisał:

albo coś robię źle.

Owszem. Poczytaj dokumentację - wpisywanie na pałę funkcji bez sprawdzenia jak się je w ogóle wywołuje i potem jojczenie że nie działa to takie trochę wstydliwe jest... nie uważasz?

  • Nie zgadzam się! 1

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
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ć...

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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);
  }
}

 

Udostępnij ten post


Link to post
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...