konverze datových typů / komunikace s displayem pomocí SPI

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od pavel1tu » 18 led 2020, 18:07

Kód: Vybrat vše

char data[100];
sprintf(data, "Toto je můj FLOAT : %f ,  %.1f , %.3f", myFloat, myFloat, myFloat);
Serial.println(data);
mne to funguje i to z příkladu i toto

PS: ale jak je zde psáno, je úplná DEBILITA si tu vyměňovat kousky kodu, pošli celé ... někde máš blbost ....

Kód: Vybrat vše

18:17:42.752 -> Tutorial by: ArduinoBasics
18:17:42.786 -> Year: 2019, Blog Link: https://arduinobasics.blogspot.com
18:17:42.820 -> 
18:17:42.820 -> Character: 1 , a
18:17:42.854 -> Integer (d): 49 , Width(8d):       49 , Zero Prefix Width(07d): 0000049
18:17:42.923 -> Floats f: 99.991096 , .1f: 100.0 , .3f: 99.991
18:17:42.989 -> Scientific e: 9.999110e+01 , g: 99.9911
18:17:43.023 -> Radices u: 49 , #o: 061 , x: 31 , #x: 0x31 
18:17:43.056 -> Big Number lld: [1234567890123456789  + 1 = 1234567890123456790]

PS2: jaké máš Arduino, IDE a knihovny originální, oficiální, nebo nějaké upravené od někoho ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 20 led 2020, 17:53

mám arduino UNO, ale program potom poběží na mini
knihovny v tom zkouškovém programu pro sprintf nemám žádné, zkopíroval jsem to jak to bylo
IDE mám 1.8.10
Naposledy upravil(a) Maxim dne 20 led 2020, 17:57, celkem upraveno 1 x.

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 20 led 2020, 17:56

zkusil jsem i jiné Arduino a vypisuje mi to to samé

Tutorial by: ArduinoBasics
Year: 2019, Blog Link: https://arduinobasics.blogspot.com

Character: 1 , a
Integer (d): 49 , Width(8d): 49 , Zero Prefix Width(07d): 0000049
Floats f: ? , .1f: ? , .3f: ?
Scientific e: ? , g: ?
Radices u: 49 , #o: 061 , x: 31 , #x: 0x31
Big Number lld: [

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 20 led 2020, 18:11

Přeinstaloval jsem IDE, ale stále to dělá to samé.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od pavel1tu » 20 led 2020, 19:21

W10 ?
A prosím pomocí "zobrazení kodu" </> sem hod ten kod z Arduino IDE.
Dle mne se ti špatně kopíruje z prohlížeče
Nedaří se mi tu tvoji chybu nasimulovat
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 20 led 2020, 19:29

kód toho Tutoriálu? kopíroval jsem to i přes textový editor

mám windows 10

Kód: Vybrat vše

/*==========================================================================
 * Project: sprintf functionality
 * Author:  Scott C
 * Date created: 06 May 2019
 * Arduino IDE version: 1.8.5
 * Operating System: Windows 10 Pro
 * Tutorial Link: https://arduinobasics.blogspot.com/2019/05/sprintf-function.html
 * 
 * Acknowledgements:
 * The following resource was a key element of this tutorial: http://www.cplusplus.com/reference/cstdio/printf/
 * Another useful resource can be found here: https://en.wikipedia.org/wiki/C_data_types
 * 
 *------------------------------------------------------------------------------
 * Code Explanation
 * -----------------------------------------------------------------------------
 * Begin serial communication at a baud rate of 9600
 * Wait until Serial communication has established before continuing
 * 
 * The sprintf function will write the formatting string and the variables into the "data" character array.
 * You provide a formatting string template, that contains placeholders for variables that you plan to insert.
 * These placeholders have a percentage sign (%) prefix.  Eg.  %s, %d, %f etc.
 * The number of placeholders must match the number of variables.
 * The variables are inserted at the placeholder position, and formatted based on the type of placeholder used.
 * %d = signed integer               %f = floating point number  
 * %s = string                     %.1f = float to 1 decimal place
 * %c = character                  %.3f = float to 3 decimal places
 * %e = scientific notation          %g = shortest representation of %e or %f                
 * %u = unsigned integer             %o = unsigned octal
 * %x = unsigned hex (lowercase)     %X = unsigned hex (uppercase)
 * %hd = short int                  %ld = long int
 * %lld = long long int
 * =============================================================================  */

char data[100];
char* myName = "ArduinoBasics";
char* myBlog = "https://arduinobasics.blogspot.com";
int year = 2019;
int num = 49;
char myChar = 'a';
float myFloat = 99.9911;
long long int vLong = 1234567890123456789LL;


void setup() {
  Serial.begin(9600);
   while (!Serial) {
    delay(10); 
   }

  sprintf(data, "Tutorial by: %s", myName);
  Serial.println(data);
  
  sprintf(data, "Year: %u, Blog Link: %s",year,myBlog);
  Serial.println(data);

  Serial.println();

  sprintf(data, "Character: %c , %c", num, myChar);
  Serial.println(data);

  sprintf(data, "Integer (d): %d , Width(8d): %8d , Zero Prefix Width(07d): %07d", num, num, num);
  Serial.println(data);

  sprintf(data, "Floats f: %f , .1f: %.1f , .3f: %.3f", myFloat, myFloat, myFloat);
  Serial.println(data);

  sprintf(data, "Scientific e: %e , g: %g", myFloat , myFloat);
  Serial.println(data);

  sprintf(data, "Radices u: %u , #o: %#o , x: %x , #x: %#x ", num, num, num, num);
  Serial.println(data);

  sprintf(data, "Big Number lld: [%lld  + 1 = %lld]", vLong, vLong+1);
  Serial.println(data);
}

void loop() {
  //do nothing
}

Kód: Vybrat vše

Tutorial by: ArduinoBasics
Year: 2019, Blog Link: https://arduinobasics.blogspot.com

Character: 1 , a
Integer (d): 49 , Width(8d):       49 , Zero Prefix Width(07d): 0000049
Floats f: ? , .1f: ? , .3f: ?
Scientific e: ? , g: ?
Radices u: 49 , #o: 061 , x: 31 , #x: 0x31 
Big Number lld: [


AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od AstroMiK » 20 led 2020, 20:20

Mě ty floaty ve sprintf taky nefungujou.
Hledal jsem na internetu a našel jsem, že to do Arduina není implementované:

https://stackoverflow.com/questions/276 ... formatting
"... Due to some performance reasons %f is not included in the Arduino's implementation of sprintf(). A better option would be to use dtostrf() ..."

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 21 led 2020, 18:40

Teď jsem zkusil nahrát i z notebooku, ten ukázkový kód pro funkci sprintf, ve kterém jsem zrovna nově nainstaloval IDE. Mám tam také win 10.
Výsledek stejný.
Poradil by někdo tedy jak na to? opravit můj program nebo to vymyslet celé nějak jinak?
Díky

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od ondraN » 21 led 2020, 20:06

No, vždyť to máš v tom příspěvku nad tebou :roll:
https://www.microchip.com/webdoc/avrlib ... 71d42.html

Maxim
Příspěvky: 128
Registrován: 22 led 2019, 20:32
Reputation: 0

Re: konverze datových typů / komunikace s displayem pomocí SPI

Příspěvek od Maxim » 21 led 2020, 20:46

S tím floatem mi to fungovalo už dřív, ale jak jsem psal.. ukládám si záznamy z dvou čidel a s floatem se mi to nevejde do paměti. Nějak rozumně konvertovat z toho INT zpět by to nešlo?

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 24 hostů