Stránka 3 z 4
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 15:06
od pavel1tu
Nevím co myslíš,
rekapitulace:
- odesílací modul měří 100x, vypočte průměr, odešle
- přijímací modul přijme to samé číslo ale je to "long"
mne to překládá ale i malá čísla
15:03:36.498 -> 11.57 //naměřeno
15:03:36.498 -> 11 //převedeno na long int
15:03:36.498 -> 1 rozloženo na bity
15:03:36.498 -> 1
15:03:36.498 -> 0
15:03:36.498 -> 0
hoď sem poslední přijímací kod
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 16:36
od pavel1tu
oprava přijmeme float a uděláme z toho short int
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 18:32
od Hana
Ano, rozumím, co myslíte, ale já bych potřebovala rozložit i ta čísla za desetinnou čárkou, tzn. 16.99 na 1 6 9 9
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 19:07
od pavel1tu
Hana píše: ↑31 říj 2020, 18:32
Ano, rozumím, co myslíte, ale já bych potřebovala rozložit i ta čísla za desetinnou čárkou, tzn. 16.99 na 1 6 9 9
Rozumím,
na kolik desetinných míst, jaké číslo bude maximální, musíš se vejít do 4 digitů
- natvrddo XXX.X - jednoduché, nemusí se posouvat desetinná čárka, natvrddo se nastaví mezi digity 1 a 2
Kód: Vybrat vše
float angley;
unsigned int angley_ui = angley *10; // uděláme unsigned int
num1 = (angle_ui/1)%10; // xxx.X
num2 = (angle_ui/10)%10; // xxX.x
num3 = (angle_ui/100)%10; // xXx.x
num4 = (angle_ui/1000)%10; // Xxx.x
- přesné, buď 1 - 2 - 3 sesetinná čísla
Kód: Vybrat vše
byte DesetinychMist;
float angley;
if (angley <10) {
unsigned int angley_ui = angley *1000; // uděláme unsigned int
DesetinychMist = 3; // tečku mezi 3 a 4 digitem
}
if (angley >=10 && angley <100) {
unsigned int angley_ui = angley *100; // uděláme unsigned int
DesetinychMist = 2; // tečku mezi 2 a 3 digitem
}
if (angley >=100 ) { // nepredpokladam cislo vetsi nez 999
unsigned int angley_ui = angley *10; // uděláme unsigned int
DesetinychMist = 1; // tečku mezi 1 a 2 digitem
}
// DesetinychMist = 1 2 3
num1 = (angle_ui/1)%10; // xxx.X xx.xX x.xxX
num2 = (angle_ui/10)%10; // xxX.x xx.xX x.xxX
num3 = (angle_ui/100)%10; // xXx.x xx.xX x.xxX
num4 = (angle_ui/1000)%10; // Xxx.x xx.xX x.xxX
nevím jak to bude fungovat, testneš to ?
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 19:21
od Hana
Vždy se jedná o tento "vzorec" xx.xx, určitě vyzkouším Váš kód, ale bude to fungovat i tak, že pokud bude například číslo 0.23, tak dostanu 0 0 2 3?
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 19:26
od pavel1tu
Asi ano

19:24:53.492 -> 11.56
19:24:53.492 -> 1156
19:24:53.492 -> 1 1 . 5 6
19:24:53.492 -> ----------------------------
19:25:33.209 -> 115.60
19:25:33.209 -> 1156
19:25:33.209 -> 1 1 5 . 6
19:25:33.209 -> ----------------------------
19:26:10.859 -> 1.16
19:26:10.859 -> 1156
19:26:10.859 -> 1 . 1 5 6
19:26:10.859 -> ----------------------------
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 19:27
od pavel1tu
Hana píše: ↑31 říj 2020, 19:21
Vždy se jedná o tento "vzorec" xx.xx, určitě vyzkouším Váš kód, ale bude to fungovat i tak, že pokud bude například číslo 0.23, tak dostanu 0 0 2 3?
19:27:10.158 -> 0.23
19:27:10.158 -> 230
19:27:10.158 -> 0 . 2 3 0
19:27:10.158 -> ----------------------------
testovan ten kod s if podle velikosti cisla
musela bys podle toho cisla poctu desetinnych mist stehovat desetinou tecku
pokud das natvrddo xx.xx nebude fungovat nic nad 99,99
Kód: Vybrat vše
unsigned int angley_ui = angley *100; // uděláme unsigned int XX.XX
Kód: Vybrat vše
Serial.println(angley);
Serial.println(angley_ui);
Serial.print(num4);
Serial.print(" ");
if (DesetinychMist == 3) Serial.print(". ");
Serial.print(num3);
Serial.print(" ");
if (DesetinychMist == 2) Serial.print(". ");
Serial.print(num2);
Serial.print(" ");
if (DesetinychMist == 1) Serial.print(". ");
Serial.println(num1);
Serial.println("----------------------------");
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 19:45
od Hana
Já si nejsem jistá, zda jsem to pochopila správně, ale když chci z čísla 0.23 udělat 0023, aby šlo rozložit na digity, tak mám udělat:
Kód: Vybrat vše
unsigned int angley_ui = angley *100;
num1 = (angle_ui/1)%10;
num2 = (angle_ui/10)%10;
num3 = (angle_ui/100)%10;
num4 = (angle_ui/1000)%10;
a měla bych dostat 0 0 2 3?
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 20:03
od pavel1tu
Hana píše: ↑31 říj 2020, 19:45
Já si nejsem jistá, zda jsem to pochopila správně, ale když chci z čísla 0.23 udělat 0023, aby šlo rozložit na digity, tak mám udělat:
Kód: Vybrat vše
unsigned int angley_ui = angley *100;
num1 = (angle_ui/1)%10;
num2 = (angle_ui/10)%10;
num3 = (angle_ui/100)%10;
num4 = (angle_ui/1000)%10;
a měla bych dostat 0 0 2 3?
Ano
unsigned int angley_ui = angley *100; - 0,23 * 100 = 23 (0023)
num1 = (angle_ui/1)%10; - 3
num2 = (angle_ui/10)%10; - 2
natvrddo tečka .
num3 = (angle_ui/100)%10; - 0
num4 = (angle_ui/1000)%10; - 0
Re: MPU6050 vrací stále hodnotu 0
Napsal: 31 říj 2020, 20:18
od Hana
Zkusila jsem, a když bylo
Kód: Vybrat vše
unsigned int angley_ui = angley *100;
na jednom řádku před void setup, tak seriový monitor ukazoval nuly u všeho
když jsem napsala unsigned int angley_ui před void setup a angley_ui = angley*100 do void loop, ukazoval sériový monitor nějaké číslo u všech num, což nejspíše není správně, protože mám akcelerometr rovně položený na stole a hodnoty se pohybují mezi -0.6 až 0.6