TABLICA float =>int - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: TABLICA float =>int (/watek-tablica-float-int) |
TABLICA float =>int - maniek100 - 26-05-2019 Jak w temacie jest jakaś elegancka metoda z tablicy Float zrobić int.. Mam w programie liczby float do wykresu, aby mieć "stabilna podstawę" robie tak // -- definicje tablic na zmienne 24 szt int Blue_probki1[24] ={}; float Blue_probki2 [24] ={}; //---wycinek kodu -float-->int Blue_probki1[i]= Blue_probki2[i]; wszystko działa ale nie podoba mi sie ze marnuje dynamic memory deklarując jeszcze jedna tablice fajnie by było zrobić cos takiego aby sie skróciło do pełnej int z floatu Blue_probki2[i ,0]= Blue_probki2[i]; Jakieś porady po prostu nie wiem RE: TABLICA float =>int - kaczakat - 26-05-2019 Jak flota wrzucisz do zmiennej INT to będzie INT. Albo to jest tak proste albo nie rozumiem z czym walczysz, opisz szerzej problem. Używanie flat w Arduino AVR nie jest dobrym pomysłem. RE: TABLICA float =>int - maniek100 - 29-05-2019 Używanie flat w Arduino AVR nie jest dobrym pomysłem. Właśnie właśnie ... ta operacja kładzie mi program Chciałem przepisać int Red_pomiarINT[24] ={}; float Red_pomiarFL[24] ={}; Red_pomiarINT[j]= Red_pomiarFL[j]; program się kompiluje wgrywa ale w urządzeniu się zawiesza na przepisaniu tablic można to zrobić jakoś inaczej ... RE: TABLICA float =>int - Jarewa0606 - 29-05-2019 A czemuodrazu nie odczytujesz do inita?? Program się kładzie bo jest przerwa i pewnie kropka. Byś musiał z tablicy wyciągnąć same liczby te co cię interesują. RE: TABLICA float =>int - maniek100 - 29-05-2019 na pierwszym etapie czytam liczbę pozyskaną z czujnika float i na ekran dokładniejsza 2 liczby po kropce na kolejnym obrabiam liczbę do użytku -->użytkuje dla elementów wykonawczych na koniec fantazja mnie poniosła na ekran rysuje sobie wykres słupkowy ,podstawa mi skacze o piksel na floacie bo niezaokrąglony int załatwił by sprawę ... int z floata Jezu chryste leżało przedemną for( int i = 0; i < probki; i++ ) { Blue_pomiarINT[i]= Blue_pomiarFL[i]; } RE: TABLICA float =>int - kaczakat - 29-05-2019 Nie jest najlepszy pomysł z floatami bo generują pewne niedogodności: - zwiększają kod wynikowy - obliczenia są wolne - liczby niedokładne - porównania == nie zadziałają - nie można użyć w niektórych przypadkach. W Arduino są używane bardzo często i uC jakoś sobie z nimi radzi, po prostu jak jest do wyboru int i float to lepiej int. Jak ktoś w kodzie używa delay(1000) to i float w prędkości mu nie zaszkodzi, po prostu trzeba o tym pamiętać. No i nie jest to ZAOKRĄGLENIE float do int, tylko obcięcie. Np. liczby 11.12,13.14,15.99 zostaną zamienione na 11, 13 i 15. Jak chcesz zaokrąglić to jest do tego specjalna funkcja w Arduino. Nie widzę całego kodu, ale jak chcesz użyć floata jako int to wystarczy tak: Kod: float tab[3]={11.12,13.14,15.99}; Mam nadzieję @Jarewa0606, że nie masz na myśli kropek zapisanych w komórce pamięci zajmowanej przez float ? To tylko 32 0 i 1, tak samo jak przy int32_t czy long, tylko inaczej interpretowane. RE: TABLICA float =>int - maniek100 - 30-05-2019 Niestety pomimo zachwytu nie rozwiązałem problemu. wszystkie próby "przerobienia" tablicy float do tablicy int powodują zawieszanie programu. 1) przypisanie jednej do drugiej = 2) przepisanie komórki po komórce 3) Najciekawsze Wczytanie równoległe do tablicy INT i do tablicy Float w tej samej pętli 4) Wczytanie INT w pierwszej pętli i Wczytanie float w następnej Magia Arduino ... jestem zawiedziony, ale się nie poddaje. Dodatkowe zawiechy w wyrzucie na ekran .. np to działa Display.setCursor(12,13);Display.print("T1_OFF");Display.setCursor(62,13);Display.print(t1_OFF); ale jak powtużę ... Display.setCursor(12,13);Display.print("T1_OFF");Display.setCursor(62,13);Display.print(t1_OFF); Display.setCursor(22,26);Display.print("T1_ON"); Display.setCursor(62,26);Display.print(t1_ON); Gleba RE: TABLICA float =>int - kaczakat - 30-05-2019 To nie dlatego, że Arduino jest magiczne czy złe, tylko dlatego że jest tak proste, że nawet nie mając pojęcia o programowaniu wybrałeś właśnie je na początek. Wrzuć cały kod, który nie działa razem z bibliotekami, może ktoś odtworzy warunki i zauważy o co chodzi. Ile pamięci zostaje po kompilacji? RE: TABLICA float =>int - maniek100 - 01-06-2019 A więc na poczekaniu zmajstrowałem kod obrazujący problem sercem są cztery pętle pracujące niezależnie od siebie na "milisach " . Mozna by je porównać do blink bez delay dla dwóch ledów równolegle taka struktura czasowa, aby czytać co określony czas czujniki temperatury i zapisywać do przesuwanych tablic dla wykresów ... Dwie tablice float dwie int po 23 próbki dla zobrazowania wszystko jest osobno bez funkcji jeśli mam 3 tablice nic sie nie gryzie dołączenie czwartej powoduje "glebę"... wystarczy odkomentowac czwartą ...czwarta pętla "gleba będzie widoczna po zablokowaniu leda na ledPin6 ... CODE w 137 lini usuncie } jeden za dużo jak powiedziałem jest to wyolbrzymiony problem który testowałem na wiele sposobów rozwiązać ... Najlepiej zacząć przeglądać kod od loop() zmienych 60% nie potrzebnych w tym przykładzie RE: TABLICA float =>int - maniek100 - 02-06-2019 Dla uproszczenia sprawdziłem for(int i = (probki-1); i > 0 ; i--) { Blue_pomiarFL[i] = Blue_pomiarFL[i-1]; Red_pomiarFL[i] = Red_pomiarFL[i-1]; Blue_pomiarINT[i] = Blue_pomiarINT[i-1]; Red_pomiarINT[i] = Red_pomiarINT[i-1]; } Blue_pomiarFL [0] = temperatura1; Red_pomiarFL [0] = temperatura1; Blue_pomiarINT [0] = temperatura2; Red_pomiarINT [0] = temperatura2; Po prostu nie ma takiej możliwości ... na czterech tablicach na 3 jest //---------------------------------------------- Działa takie cos ... for(int i = (probki-1); i > 0 ; i--) { Blue_pomiarFL[i] = Blue_pomiarFL[i-1]; Red_pomiarFL[i] = Red_pomiarFL[i-1]; } Blue_pomiarFL [0] = temperatura1; Red_pomiarFL [0] = temperatura1; for(int i=0;i<probki;++i) { Blue_pomiarINT[i] = Blue_pomiarFL[i]; Red_pomiarINT[i] = Red_pomiarFL[i]; } Do momentu dalszej obróbki |