Pavouk Hiwonder
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Re: Pavouk Hiwonder
Asi jsem se vyjádři neobratně. Jde o to, že podle displeje a knihovny provedeš inicializaci displeje přes nějakej objekt s názvem třeba display a pak na něm voláš jednotlivý funkce jako clear(), print(), setCursor() a další.
Pokud už s displejem umíš pracovat, je to OK.
Pokud už s displejem umíš pracovat, je to OK.
Re: Pavouk Hiwonder
nějak to nechce přežvíkat. Záleží na prvním znaku ? text nebo Text ? Já mám - char stav [10];
Hlásí chybu incompatible types in assignment of 'const char [4]' to 'char [10]'
Hlásí chybu incompatible types in assignment of 'const char [4]' to 'char [10]'
Re: Pavouk Hiwonder
Jazyk/knihovna Wiring - v tom programuješ - je vlastně Céčko a to je case-sensitive; rozlišuje velký a malý písmena v názvech konstant, proměnných, funkcí, příkazů, klíčových slov...
Dej se tu část kódu, kde je problém při překladu, dej sem i deklaraci proměnných; pak jsme schopni se pohnout z místa.
Dej se tu část kódu, kde je problém při překladu, dej sem i deklaraci proměnných; pak jsme schopni se pohnout z místa.
Re: Pavouk Hiwonder
tak to bude trochu složitější program má cca 800 řádků a tak to budu hledat
úseky programu, no nevím jesli to pomůže
char stav [10]; // pro výpis stavu na oled
.
U8GLIB_SSD1306_128X64 oled(U8G_I2C_OPT_NONE); // inicializace OLED displeje z knihovny U8glib
.
stav = "PIR";
.
oled.setPrintPos(2,44); // nastavení pozice kurzoru
oled.print("stav: "); // výpis informace
oled.setPrintPos(37,44); // nastavení pozice kurzoru
oled.print(stav); // ----------------------
úseky programu, no nevím jesli to pomůže
char stav [10]; // pro výpis stavu na oled
.
U8GLIB_SSD1306_128X64 oled(U8G_I2C_OPT_NONE); // inicializace OLED displeje z knihovny U8glib
.
stav = "PIR";
.
oled.setPrintPos(2,44); // nastavení pozice kurzoru
oled.print("stav: "); // výpis informace
oled.setPrintPos(37,44); // nastavení pozice kurzoru
oled.print(stav); // ----------------------
Re: Pavouk Hiwonder
to tě pobaví ...
a jestli na to příjdeš
Kód: Vybrat vše
char stav [10]; // pro výpis stavu na oled - špatně
char stav[10]; // pro výpis stavu na oled - správně
Re: Pavouk Hiwonder
To si děláš kozy
hned to jdu vyzkoušet
hned to jdu vyzkoušet
Re: Pavouk Hiwonder
Zatím to nefunguje, vypisuje jeden podivný znak, nebo jiný podivný znak. A co takhle String ?
Re: Pavouk Hiwonder
Nakonec jsem použil String a už to funguje. Díky za nápady.
Ale mám problém s gyroskopem.
Tento kod funguje perfektně - jedná se o vodováhu v osách X,Y,Z (stáhnuté s hwkitchen )
zajímavé je, že funguje i bez knihovny "Math" a i bez načítání těch 100 hodnot. Prostě a jednoduše dám do výpočtu úhlu místo např. proměnné x vrazím přímo ax. Možná je to méně přesné, ale to já nepotřebuji - kontroluji jen překročení určitého úhlu +/- 15 °
Takže výsledný očesaný kod je :
A další dotaz:
Nikde jsem nenašel funkci square. Je to mocnina ale nikde není zmiňovaná. Záhadná a tajemná funkce Jestli někdo může tak prosím o odkaz na tuto funkci. Nenašel jsem ale možná blbě hledám.
Ale mám problém s gyroskopem.
Tento kod funguje perfektně - jedná se o vodováhu v osách X,Y,Z (stáhnuté s hwkitchen )
Kód: Vybrat vše
#include "Wire.h"
#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
const float pi = 3.141592;
const int counter_w = 100;
int16_t ax, ay, az;
float x, y, z;
int counter;
float angle_x, angle_y, angle_z, _angle_x, _angle_y, _angle_z;
long ax_p, ay_p, az_p;
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Spousteni zarizeni MPU6050");
accelgyro.initialize();
Serial.println("Testovani zarizeni");
Serial.println(accelgyro.testConnection() ? "Zarizeni funguje spravne" : "Zarizeni se nepodarilo pripojit");
}
void loop()
{
// zjistí všechny hodnoty z akcelerometru
accelgyro.getAcceleration(&ax, &ay, &az);
// sčítáme potřebný počet hodnot
ax_p = ax_p + ax;
ay_p = ay_p + ay;
az_p = az_p + az;
// pocitadlo mereni
counter++;
// az bude mereni counter_w (100), tak:
if (counter == counter_w)
{
//zjistíme průmerné hodnoty
x = ax_p/counter;
y = ay_p/counter;
z = az_p/counter;
// vypočteme sklon a náklon [°]
angle_x = atan2(x, sqrt(square(y) + square(z)))/(pi/180);
angle_y = atan2(y, sqrt(square(x) + square(z)))/(pi/180);
angle_z = atan2(z, sqrt(square(x) + square(y)))/(pi/180);
// vynulujeme hodnoty
counter = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;
// hodnoty si vypíšme do portu
Serial.print(angle_x); Serial.print("\t");
Serial.print(angle_y); Serial.print("\t");
Serial.println(angle_z);
}
}
Takže výsledný očesaný kod je :
Kód: Vybrat vše
#include "Wire.h"
//#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
const float pi = 3.141592;
int16_t ax, ay, az;
int angle_x, angle_y, angle_z, _angle_x, _angle_y, _angle_z;
void setup()
{
Wire.begin();
Serial.begin(9600);
accelgyro.initialize();
}
void loop()
{
// zjistí všechny hodnoty z akcelerometru
accelgyro.getAcceleration(&ax, &ay, &az);
// vypočteme sklon a náklon [°]
angle_x = atan2(ax, sqrt(square(ay) + square(az)))/(pi/180);
angle_y = atan2(ay, sqrt(square(ax) + square(az)))/(pi/180);
angle_z = atan2(az, sqrt(square(ax) + square(ay)))/(pi/180);
// hodnoty si vypíšme do portu
Serial.print(angle_x); Serial.print("\t");
Serial.print(angle_y); Serial.print("\t");
Serial.println(angle_z);
//delay (100);
}
Nikde jsem nenašel funkci square. Je to mocnina ale nikde není zmiňovaná. Záhadná a tajemná funkce Jestli někdo může tak prosím o odkaz na tuto funkci. Nenašel jsem ale možná blbě hledám.
Re: Pavouk Hiwonder
square je druhá mocnina, takže něco jako
nebo pro jiné vhodné typy
A to s tím char[4] a char[10] nejspíš nefungovalo, protože tohle jsou obyčejná pole a asi nemají přetížené operátory přiřazení, které by nad nima dělaly stringové operace, takže to pak musí napsat člověk sám, třeba pomocí strcpy()
Kód: Vybrat vše
double square(x) {return x*x;}
A to s tím char[4] a char[10] nejspíš nefungovalo, protože tohle jsou obyčejná pole a asi nemají přetížené operátory přiřazení, které by nad nima dělaly stringové operace, takže to pak musí napsat člověk sám, třeba pomocí strcpy()
Re: Pavouk Hiwonder
Takže ta knihovna "Math" je tam jen tak , jen že existuje? Aby to zabralo víc místa ? Dohledal jsem funkci sq() což by měla být druhá mocnina. S touto funkcí to samozřejmě nefunguje .
Proč se nato ptám?
Pokud použiji jen samostatně výše uvedený program tak gyroskop funguje správně a vypisují se správné hodnoty ve stupních. Pokud ho vrazím do pavoučka tak sice gyroskop reaguje, ale hodnoty nejsou ve stupních ale v rozsahu 0-255. A to ještě nějak podezřele divně
Knihovny jsou stejné, inicializace taky, v podstatě je to jen překopírované.
Proč se nato ptám?
Pokud použiji jen samostatně výše uvedený program tak gyroskop funguje správně a vypisují se správné hodnoty ve stupních. Pokud ho vrazím do pavoučka tak sice gyroskop reaguje, ale hodnoty nejsou ve stupních ale v rozsahu 0-255. A to ještě nějak podezřele divně
Knihovny jsou stejné, inicializace taky, v podstatě je to jen překopírované.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host