Witam, Tak na oko 0*45 jest 0. Jako unsigned też powinno być 0. Spróbuj zamiast "20" dać "20.". Dodano po 27 20.0f. Bez f będzie double.
Ale ty nie wysyłasz tam stringa, tylko gołe dane binarne, skanowanie nie działa, bo spodziewa się tablicy znaków w formie np. "3.1415". Wypisz sobie w LabView otrzymane dane, to będziesz miał obraz sytuacji. Albo przekonwertuj w mikrokontrolerze na string za pomocą sprintf(), albo po stronie LabView złóż te wysłane cztery bajty do zmiennej float. Prawdopodobnie...
tylko i wyłącznie dzielenie i odejmowanie. Czyli [0]=liczba/100 (stałoprzecinkowe - pascal - div) [1]=liczba/10-[0]*100 itd. oczywiście do wykonania w pętli.
A dlaczego nie skorzystasz z ftoa? Nawet jeśli chcesz ją zmienić to warto zajrzeć do źródeł i je zmodyfikować do swoich potrzeb. A ogólnie to naprawdę potrzebujesz float? Jestem skłonny się założyć, że nie :)
Tablica Bufor() jest typu Byte więc to nie Stringi i konwersja Hexval do niczego się nie przyda. Bajty są zamieniane niejawnie we Frame tylko na potrzeby wyświetlania na LCD. Coś w ten deseń powinno działać. Ogólnie to można to mocno poskracać, ale nie chciałem zaciemniać. [syntax=vbnet]Dim Arr(4) As Byte Dim Test As Single At Arr(1) Overlay Dim Bufor(9)...
Aby float działał w printf/sprintf , należy dodać w opcjach linkera dodatkową bibliotekę. Jak to zrobić, opisane jest pod koniec pierwszego posta w temacie http://www.elektroda.pl/rtvforum/topic10...
Witam! krzychoocpp napisał: Nie jestem pewny czy obydwa rzutowania są potrzebne, chyba wystarcza tylko jedno. Masz rację wystarczy jedno rzutowanie: float f = (float)a / liczby; albo float f = a / (float)liczby; daje ten sam wynik; Pozdrawiam
The total number of bytes that may be passed to this function is limited due to the memory restrictions imposed by the 8051. A maximum of 15 bytes may be passed in SMALL or COMPACT model. A maximum of 40 bytes may be passed in LARGE model. Taki sam komentarz jest przy funkcji scanf. W Twoim przypadku po przygotowaniu napisu przez sprintf wypisuj go...
Przedewszystkim zrób to inaczej... po prostu... main() { char bufor[20]; ... funkcja(bufor, ...); } funkcja(char* bufor, ...) { } I w ogóle nie ma problemu. Zmienna tmp w ogóle jest nieporozumieniem. Przecież wewnątrz funkcji możesz sobie zadeklarowac tablicę o dowolnym wymiarze... funkcja(...) { char tablica[1000]; } A pamięć możesz zwalniać gdzie...
1. Co ci się ukazuje jak zamienisz to co podałeś na to: [syntax=c]float fl; fl = va_arg(args, float); ftoa(fl, 3, temp);[/syntax] ? 2. Owszem nie działa bo wywaliłeś zmienną oraz wywaliłeś znak &, czyli ma być przez zmienną: [syntax=c]uint32_t u32; u32 = va_arg(args,uint32_t); ftoa(*((float*)&u32), 3, temp);[/syntax]
Sprawdzałem u mnie na symulatorze i wszystko ok. Dodałeś stdlib? Jakieś warningi?
Napisz co ma dokladnie robic ten program, podaj dane we i dla przykladu dane wy. Wtedy postaramy sie cos zrobic. Jesli chodzi o twoj kod wyglada na nieco nieprzemyslany, wiec nie bede go poprawial.
Witam a może tak: [syntax=cpp] uint16_t liczba; uint8_t calkowita, ulamkowa; liczba = 1234; calkowita=liczba/100; ulamkowa=liczba%100; [/syntax] wtedy w oddzielnych zmiennych mamy cześć całkowita i cześć ułamkową. a obcinamy ostatnią liczbę instrukcją [syntax=cpp]ulamkowa=ulamkowa/10;[/synta...
Odpowiedź na pytanie z 1 postu: int val = 123; printf("U=%d.%d", val / 100, val % 100); Co do meritum: czy kod float nap1; nap1 = 257 * 0.0048; także obcina po przecinku? Jesteś w stanie sprawdzić jaki kod generuje kompilator?
Widzę bark odzewu ze strony autora. No trudno. Zamieszczam poprawioną wersję którą u mnie działa i się kompiluje. main.c https://obrazki.elektroda.pl/7395495900_... I jeszcze u autora nie widzę podłączenie nóżki 10 do Vcc.
Potem, jak chcesz to dziel przez 10 i na float ... Float? O zgrozo 1,5kB w plecy :) Tak to się robi: http://mikrokontrolery.blogspot.com/2011...
(at)ditomek Niestety operacje na float są bardzo kosztowne nie tylko czasowo, ale także zajmują sporo miejsca. Pełna obsługa float to może być i 5 kB, tyle, że kompilator do spółki z linkerem są dosyć inteligentne i nieużywane fragmenty kodu są usuwane. Sens konwersji temperatury na float jest żaden, bo raz, że czujnik zwraca temperaturę w postaci...
Cecha EA = -22 Cecha E6 = -26 wg algorytmu który podałem w moim pierwszym poście 0100 0000 0000 0000 0000 0000 * 2^(-22) 01,00 0000 0000 0000 0000 0000 = 1.0 kg -1kg 1100 0000 0000 0000 0000 0000 * 2^(-22) wniosek: najstarszy bit określa znak liczby, 1 - ujemna, 0 - dodatnia 0.1 kg 0110 0110 0110 0110 0110 0110 * 2 ^ (-26) 0,00011001100110011001100110...
Float o wartości 0x3E6872B0 to dokładnie 0.226999998093. Ta wartość float jest zapisana na 32bitach w formacie IEEE 754.
gdyby zastosować funkcję "abs" to by można usunąć jeden duży blok w instrukcji warunkowej: [syntax=c]ulamek=abs(wynik%100000); // include <cstdlib>[/syntax] W instrukcjach warunkowych operator "&&" jest niepotrzebny, jak jedziesz po kolei z zakresami to jeden z nich dałoby się pominąć: [syntax=c]if (ulamek > 9999) { } else if (ulamek...
Witam! Wiersz z if: Przede wszystkim, zmienna x jest zmienną typu float (zmiennoprzecinkowa) a znaki reprezentowane są przez liczby typu int, zatem x powinno być zadeklarowane jako int. Pamiętaj, że przy operacjach arytmetycznych, typ char rozszerzony jest "z urzędu" do typu int a po ich wykonaniu przykracany do typu char! Dalej: w tym samym wierszu...
Niby dla ARM double i float to to samo a jednak nie to samo. Chyba Ci się pomyliło z AVR... Typ double na ARM jest pełną 64-bitową liczbą zmiennoprzecinkową podwójnej precyzji. volatile float f = 123.5434; f *= 123.123 też nie przejdzie przez koprocesor. Wyżej napisałem dokładnie o tym - bez końcówki "f" (albo rzutowania), to są liczby typu double,...
A co to za cudaczne obliczenia :wink: ... unsigned char wynik1=0; unsigned char wynik2=0; wynik1=read1w(); wynik2=read1w(); reset1w(); float temp=0; if((wynik2)!=0){ //temp ujemna wynik1=~wynik1; temp=wynik1+1; //dlaczego /2 i gdzie się podział wynik2 ? temp=-temp/2; //??? } else{ //temp dodatnia...
To nie ma związku z typem procesora - dane z DS18B20 i sposób ich obróbki są zawsze takie same. Kodo powyżej jest przekombinowany i błędny. Poprawnych przykładów znajdziesz na tym forum sporo - wystarczy poszukać.
Jeśli jest gdzieś błąd w kodzie ze względu na moje myślenie proszę abyście pomogli naprawić Sporo tego jest, prościej będzie jak wrzucę poprawny kod, to możesz sobie porównać ze swoim... protected override void OnPaint(PaintEventArgs e) ) i w nim umieścić kod odpowiedzialny za rysowanie. Dzięki temu za każdym razem, kiedy jest taka potrzeba, zostanie...
Stacja Pogodowa ESP8266 + wyświetlacz T6963 https://obrazki.elektroda.pl/7068126200_... Wcześniej stworzyłem stację pogodową przy której były użyte dwa mikrokontrolery Atmega328p (arduino nano) i ESP8266 (NodeMCU) z wyświetlaczem opartym na sterowniku T6963. Na forum https://obrazki.elektroda.pl/1280939000_... Zagadnienie...
witam, mam problem z konwersją float'a na tablice charów. char tablica[4]; sprintf(tablica, "%G", temp_in); USART_Transmit(tablica[0]... USART_Transmit(tablica[1]... USART_Transmit(tablica[2]... USART_Transmit(tablica[3]... w terminalu pokazuje się tylko znak zapytania...
Już wszystko wiem. Midlety w wersji CLDC 1.0 nie posiadaja wbudowanej klasy Float i Double i nie jest możliwe operowanie na tych zmiennych. Aby temu zaradzić trzeba użyć pakietu henson.midp.Float Klasa ta jest darmowa i można ją pobrać ze strony http://henson.newmail.ru/j2me/Float.htm Mam nadzieje, że w przyszłości komuś się to przyda, gdyż CLDC 1.0...
Problem był z inna zmienną. Wszystko jest ok.
Moja funkcja lcd_str to to samo co u Ciebie LCD_WriteText. Wstawiłem ją tylko po to by można było się zorientować co ona robi a nie byś ją stosował.
Dziękuję za link, z pewnością przybliży mi to problem. Można wiedzieć co kolega miał na myśli? Nie robiłby tego w jaki sposób? 16-bitowej organizacji nie mogę już zmienić a konwersja float->half-float to pierwsze co przyszło mi do głowy.
Po pierwsze - jaki język programowania? Po drugie - najlepiej sprawdź sam, co zostanie. Po co zgadywać?
Gotowego programu nie mam, poniżej masz funkcję obsługi 1wire bez których się nie obejdziesz, musisz zrobić sobie tylko odpowiednie funkcje opóźnień, w listingu funkcje nazywają się np. waitus(x) -tzn czekaj x mikrosekund lub waitms -milisekundy, wait10us(x) -10*X mikrosekund itd. dodatkowo musisz przejrzeć aplikację i dopasować komendy, #define MATCH_ROM...
Spróbuj temp8E.setText("1234"); Jeśli to zadziała to buffer0 zawiera złe dane (brak znaku null kończącego text). W poście #62 pisałem też: Jeszcze konwersja float to ascii Kod: c
W skrypcie linkera muszą być zadeklarowane symbole o nazwach jak wyżej wyznaczające obszar pamięci przeznaczony dla sterty (heap). Proponuję ściągnąć projekt dla lpc2103 i przystosować postawowe pliki (startup, Makefile, skrypt linkera, tablica wektorów: lpc2103_rom.ld, Makefile, startup.S, vectors.S, hdr\hdr_cpsr.h) do swojego projektu, a większość...
Uzyj funkcji sprintf.
Dzięki za podpowiedź ale w WinAVR + PN2 nie ma dostępnych opcji linkera poza ustawieniami w makefile. Nie mam pewności czy to tutaj ale tylko tutaj jest coś o FLOATach. Dopisałem "-lm" w każde możliwe miejsce ale to nie pomogło. Skopiowałem całą tamtą instrukcje ale też nic to nie dało :( Oryginalny makefile wygląda tak: ---------------- Library Options...
Funkcja ładnie działa dopóki nie wpiszę więcej niż 2 cyfry, wtedy pomniejsza lub powiększa ostatnią cyfrę o 1, pomyślałem że to może coś z licznikiem bufora, to jego kod: void dodaj_bufor(char znak) { //znak='a'; if (licznik_buf<17) licznik_buf++; bufor[licznik_buf-1]=znak; bufor[licznik_buf]='\0'; }
szukaj pod: notacja łukasiewicza (notacja polska)
Hmm dziwne, debugg avrStudio pokazuje poprawną wartość. Może błąd jest gdzieś dalej?
Dzieki, a czy moglbys mi to przetlumaczyc na delphi :)). Dzieki. Pozdrawiam.
Kompilator owszem i u mnie błędów kompilacji nie sygnalizuje. Ale program strasznie jest "ociężały" powolny i zawiesza się po jakimś czasie pracy - czego nie zaobserwowałem w moich poprzednich wersjach. Mnie razi używanie delay(). O ile przebolałbym to w samym setupie to w pętli głównej jest nie do przyjęcia. No ale czat uczył się na kodach z netu....
są to belki na power ledach ,drivery itp.Do tej pory wszystko pracowało przez kilka lat na jednym kanale PWM kótry rozjasniał belki ledowe w ciągu 60 min.Chciłbym to teraz przerobic na 4 niezależne kanały z potencjometrami abym mógł sobie regulować różne pasma Dodano po 21 Chciałbym uzyskać coś takiego[syntax=arduino]// Definiowanie pinów const int...
(...) tablicy data (indeksujemy od 0) float oxygenPercentage = oxygenValue / 10.0f; // Konwersja na procenty displayOxygenPercentage(oxygenPercentage... // Wyświetlanie wartości na LCD } } delay(1000); // Odczekaj sekundę przed następnym żądaniem } // ... (reszta funkcji pomocniczych) Dziękuję za podanie kompletnego przykładu ramki, która składa się...
Funkcja ta coś tam robi, operuje na danych i ma zwrócić wynik. Chciałbym móc jakoś sprawdzać czy funkcja wykonała się prawidłowo. Niby można by zrobić tak, że gdy funkcja zwraca wartości większe lub równe 0 to wtedy jest ok, a gdy zwróci np. -1 to znaczy, że jest jakiś błąd. Ale problem w tym, że wynikiem tej funkcji, może być też wartośc ujemna i...
(at)m72 "Zakłócenia" są wprowadzane przez Serial.print(), a nie sposób konwersji. Jeżeli Serial.print() dostanie, jako argument wartość typu float, to nie jest w stanie wyświetlić poprawnie więcej niż 7 cyfr przed przecinkiem. Tak jak pisał kol. (at)_jta_ - zapis liczby float wprowadza ograniczenia ze względu na wielkość reprezentacji mantysy. print...
Ok. Dokonałem konwersji na zmienną typu float - program działa. Tylko teraz nie wiem jak sprawdzić czy konwersja się powiodła. Jak mogę ją wyświetlić ? np. jako = label.caption... ?
1. Wielu programistów uważa, że float - to liczba rzeczywista. No i bardzo się mylą, z czego wynika mnóstwo kłopotów. Niedouctwo. 2. Niby większość współczesnych procesorów, w tym Cortex-M4, liczy na float równie szybko, jak na int, a taki np. Intel Core mnoży i dzieli double sporo szybciej niż int. Za to konwersja w obie strony.... - na tym naprawdę...
(...) Ale musisz skalować DC bias do Vdd/2, aby zachować symetrię i rozdzielczość. Pełny zakres 4096:1 odpowiada podpisanym wartościom +/- 2048:1. Każda różnica w stosunku do tego przesunięcia DC i nieodjęcie DC od wyniku RMS powoduje zmniejszenie rozdzielczości i stosunku sygnału do szumu. Masz rację, twierdząc, że każdy błąd DC w procesie pomiaru...
Zrób rzutowanie dzielonych liczb na floaty.
konwersja float konwersja string float konwersja float stringi
schemat prędkość obrotowa arkusze praktyczne sygnalizacja czasu wyjście
filtr dolnoprzepustowy radia makita
Mercedes W203 2.2 CDI – zwarcie zacisku 54 z plusem, usterka świateł stop, SAM, S9/1 Migomat Sherman, Magnum – klejenie drutu podczas spawania MIG/MAG: przyczyny i ustawienia