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
Ahoj pablo74, ano jsem trošku starší - napoví ZX Spectrum, IQ151, PMD85 apod., ještě pořád uvažuji v Basicu a nemůžu se toho zbavit.
Teď k těm knihovnám. Samozřejmě že jsem zkoušel program upravit , ale narazil jsem na nutnost použití firemní knihovny LobotServoController k podpoře ovládání servocontrolleru Hiwonder a BUS serv. Bez této knihovny se pavouk ani nepohne. Dále je na pohyb ultrazvukového senzoru (kukadel) použíté jakési "antiblok servo" a samotný ultrazvuk senzor jede přes I2C. Takže samé knihovny.
Prozatím se omezuji jen na drobné doplňky typu - běhej pomalej nebo rychlej, čekej na PIR nebo na tlesknutí apod. Větší zásah do původního programu většinou způsobí kolaps.
Teď k těm knihovnám. Samozřejmě že jsem zkoušel program upravit , ale narazil jsem na nutnost použití firemní knihovny LobotServoController k podpoře ovládání servocontrolleru Hiwonder a BUS serv. Bez této knihovny se pavouk ani nepohne. Dále je na pohyb ultrazvukového senzoru (kukadel) použíté jakési "antiblok servo" a samotný ultrazvuk senzor jede přes I2C. Takže samé knihovny.
Prozatím se omezuji jen na drobné doplňky typu - běhej pomalej nebo rychlej, čekej na PIR nebo na tlesknutí apod. Větší zásah do původního programu většinou způsobí kolaps.
Re: Pavouk Hiwonder
Takže období "soudružka učitelka, povinný sběr léčivých rostlin, tajný sledování ORF1, třídní původ a kádrový profil", chápu
Já ti do toho nemluvím, pokud by ten multitasking nešel použít kvůli těm knihovnám, OK.
Obecně ale stojí za to si ten článek přečíst a tu myšlenku pochopit a použít. Pak se kód velmi zpřehlední a pozdější zásahy do kódu nemusí nic rozbít. Ikdyž... všichni to známe, že?
Já ti do toho nemluvím, pokud by ten multitasking nešel použít kvůli těm knihovnám, OK.
Obecně ale stojí za to si ten článek přečíst a tu myšlenku pochopit a použít. Pak se kód velmi zpřehlední a pozdější zásahy do kódu nemusí nic rozbít. Ikdyž... všichni to známe, že?
Re: Pavouk Hiwonder
Tak jsem se , prozatím jen letmo, kouknul na ten multitasking. Ne všechno jsem úplně pochopil. Nejsem si jistý jestli to bude fungovat při volání knihovny Servo.h která vyžaduje právě čekání na dokončení pohybu serva do zadané polohy. Proto jsem se to pokoušel nahradit knihovnou VarSpeedServo která jede nezávisle. Snad by se mohl vyjádřit samotný kolega Stehlík. Pokud sem tedy někdy zavítá.
Re: Pavouk Hiwonder
Teď jsem kouknul do knihovny Servo https://github.com/arduino-libraries/Se ... /Servo.cpp z Arduina a tam na nic nečekají, prostě do serva zapíšou hodnotu a ta tam pak je. (řádky 264-294 - metoda write, writeMicroseconds)
A servo se pomalu nebo rychle natočí do té polohy, ale o to už se starají časovače a interrupty a program zatím běží dál.
Nebo to tak na mě aspoň na první pohled působí.
Nebo jsem nepochopil to s tím čekáním na dokončení pohybu.
A servo se pomalu nebo rychle natočí do té polohy, ale o to už se starají časovače a interrupty a program zatím běží dál.
Nebo to tak na mě aspoň na první pohled působí.
Nebo jsem nepochopil to s tím čekáním na dokončení pohybu.
Re: Pavouk Hiwonder
No já bych docela rád viděl ten program co pavoukem hýbe.
Re: Pavouk Hiwonder
Program je volně ke ztažení:
https://drive.google.com/drive/folders/ ... 2vv3EFNdpt
https://drive.google.com/drive/folders/ ... 2vv3EFNdpt
Re: Pavouk Hiwonder
Jedna část programu pro pavouka mi není jasná:
Do proměnné getDistance by to mělo ukládat hodnotu vzdálenosti. Zřejmě je to volané nějakou knihovnou.
Není mi jasná ta syntaxe int getDistance() { ..........} to je nějaký typ voidu nebo co to je za zápis ?
Může mi to prosím někdo vysvětlit ? Díky
Kód: Vybrat vše
int getDistance() { //čtení vzdálenosti ultrazvuku
u16 distance1, distance2, distance3;
int distance = 0;
WireReadDataArray(0,(uint8_t *)&distance1,2);
WireReadDataArray(0,(uint8_t *)&distance2,2);
WireReadDataArray(0,(uint8_t *)&distance3,2);
distance = (distance1 + distance2 + distance3 )/3;
return distance; //Back to the measured distance
}
Není mi jasná ta syntaxe int getDistance() { ..........} to je nějaký typ voidu nebo co to je za zápis ?
Může mi to prosím někdo vysvětlit ? Díky
Re: Pavouk Hiwonder
int je typ návratové hodnoty
getDistance je jméno právě definované funkce
() je seznam parametrů (prázdný)
{...} je tělo té funkce
uvnitř těla ta funkce deklaruje tři proměnné typu u16 a jednu typu int
načte tři hodnoty, spočte jejich průměr a dá ho do proměnné distance
return vrátí hodnotu té proměnné jako návratovou hodnotu té funkce
-----
void loop() {....}
void je typ návratové hodnoty (nevrací nic)
loop je jméno právě definované funkce
() je seznam parametrů (prázdný)
{...} je tělo té funkce
Protože funkce loop nic nevrací, tak tam není return s hodnotou. Klidně by tam někde mohl být return bez hodnoty, aby to skončilo dřív, ale nemusí.
getDistance je jméno právě definované funkce
() je seznam parametrů (prázdný)
{...} je tělo té funkce
uvnitř těla ta funkce deklaruje tři proměnné typu u16 a jednu typu int
načte tři hodnoty, spočte jejich průměr a dá ho do proměnné distance
return vrátí hodnotu té proměnné jako návratovou hodnotu té funkce
-----
void loop() {....}
void je typ návratové hodnoty (nevrací nic)
loop je jméno právě definované funkce
() je seznam parametrů (prázdný)
{...} je tělo té funkce
Protože funkce loop nic nevrací, tak tam není return s hodnotou. Klidně by tam někde mohl být return bez hodnoty, aby to skončilo dřív, ale nemusí.
Re: Pavouk Hiwonder
Díky gilhad. Proč jsem se ptal - chtěl bych mezi to načítání vrazit pohyb serva s čidlem sem a tam a pak spočítat průměr. Vím že je to blbě, ale pro představu mělo by to vypadat asi takto:
Kód: Vybrat vše
int getDistance() { //čtení vzdálenosti ultrazvuku
u16 distance1, distance2, distance3;
int distance = 0;
servo.write (90);
WireReadDataArray(0,(uint8_t *)&distance1,2);
servo.write (70);
WireReadDataArray(0,(uint8_t *)&distance2,2);
servo.write (100);
WireReadDataArray(0,(uint8_t *)&distance3,2);
distance = (distance1 + distance2 + distance3 )/3;
return distance; //Back to the measured distance
}
Re: Pavouk Hiwonder
Já se věnoval něčemu jinému, když jsem to psal (víceméně mechanicky), ale na první pohled jsem tam vyloženou chybu neviděl a jen jsem popsal co tam je, bez většího přemýšlení.
Spíš mě zarazilo označování getDistance za proměnnou (je to adresa funkce, ale ty ji stejně budeš spíš někde volat a pak se vždy provede a vrátí ten průměr) a "typ voidu" ... void je typ - spíš mi přišlo, že nemáš moc zažité funkce a věci a názvosloví okolo nich.
Ale pokud jde o vzdálenosti a pohyb pavouka, tak bych spíš čekal, že budeš vracet minimum, než průměr.
Pokud bude pavouk nabíhat na roh chodby, tak bude mít před sebou třeba 1cm místa k rohu, vlevo 2cm ke kolmé zdi od toho rohu, vpravo 3m chodbou okolo toho rohu. V průměru 1.01 metru a dalším krokem si nabije kokos.
Já bych asi spíš vracel minimum - čili 1cm a pavouk to zaflekuje a bude přemýšlet, jak a kam se otočit, aby si neulámal nohy. (A asi se taky pořádně rozhlédne a zváží situaci.)
Spíš mě zarazilo označování getDistance za proměnnou (je to adresa funkce, ale ty ji stejně budeš spíš někde volat a pak se vždy provede a vrátí ten průměr) a "typ voidu" ... void je typ - spíš mi přišlo, že nemáš moc zažité funkce a věci a názvosloví okolo nich.
Ale pokud jde o vzdálenosti a pohyb pavouka, tak bych spíš čekal, že budeš vracet minimum, než průměr.
Pokud bude pavouk nabíhat na roh chodby, tak bude mít před sebou třeba 1cm místa k rohu, vlevo 2cm ke kolmé zdi od toho rohu, vpravo 3m chodbou okolo toho rohu. V průměru 1.01 metru a dalším krokem si nabije kokos.
Já bych asi spíš vracel minimum - čili 1cm a pavouk to zaflekuje a bude přemýšlet, jak a kam se otočit, aby si neulámal nohy. (A asi se taky pořádně rozhlédne a zváží situaci.)
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti