Skocz do zawartości

jak przesłac tablice przez rf24L01


Pomocna odpowiedź

albo moze inaczej  pytanie  czemu w tym kodzie nie ma tego wyrazenia pomiedzy  klamrami {}  tak jak powinno byc w tablicy tylko pomiedzy tymi     "  "    ??  czy to jest caały czas jeden element ? znaczy tablica jednoelementowa ?     wtedy nic nie bede mogł sobue tam wprowadzac wielu elementów i wysyłać ? 

13 godzin temu, ethanak napisał:

Ja bym zaczął od nauki języka w którym chce się napisać program... no ale ja to starej daty jestem i dzisiaj chyba takie podejście nie ma sensu 😉

 

No dzięki kolego  ethanak za złotą myśl , jak byś posiadał umiejętność czytania ze zrozumieniem  której najwidoczniej nie posiadasz to przecież pisałem ze mam ksiazke arduino i kurs z forbota czytałem kilka razy to chyba sie ucze nie ?  Elementy o ktorych pisze kolega  qrb777  czyli struct i crc8 nie sa opisane w tych żródłach  bo to chyba juz elementy C/C++   a nie arduino a raczej arduino zaawasowane  a nie dla dzieci ( arduino miało być proste dla dzieci ) wiec dlatego pytam , jak bym umial to zrobić to bym nie pytał nie zakaladał postu 

27 minut temu, domel1 napisał:

pisałem ze mam ksiazke arduino i kurs z forbota czytałem kilka razy to chyba sie ucze nie

Czy Ty naprawdę uważasz, że kurs Arduino to Wszechnica Wiedzy Wszelakiej? Nie obrażaj się, ale ten kurs omawia przede wszystkim podstawow funkcje specyficzne dla Arduino (np. pinMode czy digitalWrite), i nie jest absolutnie podręcznikiem języka. Ergo: możesz sobie sto razy ten kurs czytać, a nie wyczytasz tego czego w nim nie ma.

Żeby nie było że nie pomagam: dwa kursy języka C oraz języka C++ (czytać w tej kolejności, co zresztą w kursie C++ jest zaznaczone). Z tego naprawdę możesz się wiele nauczyć traktując kursy C/C++ jako naukę języka, a kursy Arduino jako naukę platformy. Jeśli czegoś tam nie zrozumiesz - pytaj śmiało. Ale nie wyjeżdżaj z tekstami "nie było w kursie Arduino więc nie wiem bo innych nie czytuję".

Zresztą taka analogia: czy po kursie na prawo jazdy usiądziesz za kierownicę śmieciarki?

  • Lubię! 1

A na stronie arduino.cc   tez  składnia jezyka jest napisana toroche jak oderwana od rzeczywistości , nie jest dokładnie opisane jak w książce  co to jest , jak  to sie stosuje i gdzie ..tylko tak jakby użytkownik był  juz co najmniej zaawansowany ...

(edytowany)
21 godzin temu, domel1 napisał:

Ja tam nie wiem z tym AI ...dobra jak w ytm kodzie co zapodałem  wczesniej         

  const char text[] = "Hello World";

zrobie  

const char text[] = " FF,AF,DF,CD";

to bedzie  cały czas jednoelementowa  tablica  zawieracjąca sie pomiedzy tymi       " " ,  czy cały czas  to  bedzie string razem z przecinkami a nie  czteroelmentowa  tablica ?  ?  bo wtedy bym  sobie te wartosci w  hex przesłał  i potem zamienil na dec 

To nie zadziała tak jak chcesz, dostaniesz po prostu stały tekst " FF,AF,DF,CD", ze spacją z przodu.

Zmienić zawartość tablicy możesz za pomocą indeksu, wskaźnika.

unsigned char bajty [] = {0xff, 0xaf, 0xdf, 0xcd};

// PIERWSZY SPOSÓB
// modyfikacja pierwszego [0] i czwartego [3] elementu tablicy przez indeks:
bajty[0] = 0x61;
bajty[3] = 0xee; // po zmianie: { 0x61, 0xaf, 0xdf, 0xee}

// DRUGI SPOSÓB
unsigned char * wsk = bajty; // wskaźnik na tablicę (jej pierwszy element [0])
// alternatywny zapis:
// unsigned char * wsk = &bajty[0];

// modyfikacja drugiego elementu tablicy przez wskaźnik
// pierwszym jest po prostu wsk lub (wsk + 0)
*(wsk + 1) = 0x62; // po zmianie: { 0x61, 0x62, 0xdf, 0xee}
	
// modyfikacja drugiego (!) elementu tablicy, przesuwając wskaźnik o 1 "w prawo"
// od tej pory to adres "bazowy" wskaźnika, nie pokazuje już na pierwszy [0] element tablicy
*(++wsk) = 0xff; // po zmianie: { 0x61, 0xff, 0xdf, 0xee}
	
// "cofamy się" i modyfikujemy pierwszy element tablicy, teraz adresem bazowym jest znowu [0]
*(--wsk) = 0xaa; // po zmianie: { 0xaa, 0xff, 0xdf, 0xee}

Zrozumiesz to, jeżeli poznasz podstawy C/C++. Arduino traktuj bardziej jako "uproszczone na pierwszy rzut oka rozwinięcie, które powstało na bazie tych języków". Jedyne co może cię ograniczać to (nie)chęć poznania podstawowych zagadnień.

Osobiscie C++ uczyłem się z książek Jerzego Grębosza na dłuuuugo przed tym zanim poznałem temat uC i arduino. C kojarzę, ale można powiedzieć, że "nie znam". Wiesz, ludzie na forum pewnie chętniej pomogą, kiedy zobaczą, że faktycznie masz bardziej skomplikowany problem niż brak wiedzy nt. podstaw języka.

Edytowano przez orb777
  • Lubię! 1

dobra czyli  tablica to ciag znaków jednego typu ?  

const char text[] = "Hello World";

tymi cudzysłowami to jest ciąg znakow czyli liter  ?   a jak zrobie      klamry to niby ma być  tablica cyfr ? 

const char text[] = {22,33,44,55};

to sie kompiluje wgrywam do nadajnika  w odbiorniku zmieniam                    char text[32] = "";                  na                        char text[32] = {};   ale i tak nie działa    w odbiorniku na serial monitorze  sie głupoty wyświetlaja   

arduino 33.png

(edytowany)

@domel1, działa poprawnie. Spójrz na tablicę ascii i symbole dziesiętne:

https://www.flynerd.pl/2019/09/kodowanie-znakow-ascii-unicode-utf-co-to-znaczy.html

Dostajesz dokładnie 4 bajty, które wysyłasz, czyli dziesiętne {22,33,44,55}. Pierwszy bajt (22) arduino-ide wyświetla jako "niedrukowalny", ponieważ takim jest. Brakuje ci podstaw, które mam nadzieję nadrobisz, dlatego na razie nie rozumiesz.

Edytowano przez orb777
(edytowany)

AAAAAAAAAAAAAAAAAA  no   Taaaaaaaaaa  .....:)                           ze  33   to     przecinek       44   to        !     55    to    7         no dobrze     ale dlaczego  to jest    char   znaczy jak ten  kodowany znak zamienić na to co chcemy czyli  na tą  tę  liczbe co chcemy jak to nie jest  ani oct ani hex ani bin ?  a ten znak niedrukowalny jak zamienic ?          

Albo jak poprawnie przesłac tablice liczb całkowitych  żeby było to co chcemy ?

Edytowano przez domel1
(edytowany)

@domel1, wyślij i odbierz tablicę jako typ uint8_t, zamiast char. Powiedzmy, że jest to praktycznie to samo (zazwyczaj alias unsigned char), ale w tym drugim przypadku widzisz dokładnie, że typ ma 8 bitów (1 bajt) i jest "bez znaku", czyli przyjmuje wartości dodatnie 0-255. Pasuje akurat do twojego 0-180. Dołącz nagłówek <cstdint> lub <stdint.h>, inaczej wyświetli błąd.

Poczytaj o typach danych w C/C++ i dopasuj jaki "zakres" jest ci potrzebny. Kiedy masz wysłać liczbę 0-180, wtedy dobierasz "najmniejszy" typ danych, tylko, żeby liczba "zmieściła się" w nim. Pojedynczy pakiet danych w nrf24L01 może mieć max 32 bajty, więc nie ma sensu wysyłać np. tablicy 4 int-ów (po 2-4 bajty). Na różnych platformach rozmiary typów danych mogą być trochę inne.

Edytowano przez orb777

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...