Pavouk Hiwonder

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
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.
Odpovědět
luger
Příspěvky: 186
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 25 kvě 2024, 10:49

Pořád se snažím vyladit chování pavoučka.
Stále mám problém s narážením nožiček do překážek které jsou přímo před pavoučkem ale mírně stranou. Řeším to tak že při pohybu vpřed kmitá servo ultrazvuku vlevo, vpravo a přímo vpřed. Změří všechny tři hodnoty a vyhodnotí nejkratší vzdálenost a tu potřebuji :

Kód: Vybrat vše

//******************************************** KMITANI SERVA  ************************************************************

void  zmerit_vzdalenost() {                                         //čtení vzdálenosti ultrazvuku
      
    sonarServo.write (50,230,true);           // vzdálenost mírně vlevo 50°    230 - rychlost otáčení
    ultrazvuk ();
      vzdalenost1 = vpred;

    sonarServo.write (130,230,true);          // vzdálenost mírně vpravo 130°
    ultrazvuk ();
      vzdalenost2 = vpred;

    sonarServo.write (90,230,true);            // vzdálenost přímo vpředu 90°
    ultrazvuk ();
      vzdalenost3 = vpred; 
        
    if ((vzdalenost1 < vzdalenost2) and (vzdalenost1 < vzdalenost3)){          //   vyhodnocení vzdáleností
      vzdalenost = vzdalenost1;
    }
      else if ((vzdalenost2 < vzdalenost1) and (vzdalenost2 < vzdalenost3)){
       vzdalenost = vzdalenost2;  
    }
          else {
           vzdalenost = vzdalenost3;
    }
}
Je to jen výřez z programu.
ještě musím doplnit že hodnota "vpred" je vzdálenost získaná z ultrazvuku.
Nejsem si jistý jestli je to správně protože občas pavouček zareaguje poněkud nepředvídatelně.
Díky

Uživatelský avatar
gilhad
Příspěvky: 815
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 25 kvě 2024, 16:06

Pokud jsou například ty vzdálenosti 10,30,30, tak vzdalenost bude 30 :twisted:

Dej tam <= místo pouhého < pokud si některé jsou rovny, je jedno, kterou z nich vezmeš

luger
Příspěvky: 186
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 26 kvě 2024, 10:21

díky gilhad, ale nějak se mi to nezdá. Přece už v první podmínce je jasné že 10 je menší než 30 a 30, takže nejmenší hodnota vzdálenosti je 10.

Uživatelský avatar
kiRRow
Příspěvky: 1208
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Pavouk Hiwonder

Příspěvek od kiRRow » 26 kvě 2024, 10:25

Kód: Vybrat vše

vzdalenost1 = 10;
vzdalenost2 = 10;
vzdalenost3 = 30;

    if ((vzdalenost1 < vzdalenost2) and (vzdalenost1 < vzdalenost3)){          //   vyhodnocení vzdáleností
      vzdalenost = vzdalenost1;
    }
      else if ((vzdalenost2 < vzdalenost1) and (vzdalenost2 < vzdalenost3)){
       vzdalenost = vzdalenost2;  
    }
          else {
           vzdalenost = vzdalenost3;
    }
vzdalenost bude ? :) ... 30 ;)

luger
Příspěvky: 186
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 26 kvě 2024, 10:31

Aha :?: já jsem vycházel z možnosti 10 30 30 a tato varianta mě nenapadla. Včera byl hokej tak mi to moc nemyslí :lol: díky

luger
Příspěvky: 186
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 26 kvě 2024, 11:05

Tak jsem objednal černou umělou kožešinu s chlupem 25mm. Pavouček asi dostane nový kabátek :D . Uvidíme co bude doručeno a pak se vymyslí upevnění kožešiny na skelet a nožičky. Asi začnu nožkama, na skeletu těla je hromada senzorů a nechci je nějak ovlivňovat chlupama :lol: .

Uživatelský avatar
gilhad
Příspěvky: 815
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 26 kvě 2024, 11:49

Jo, zvoral jsem to :oops: , kiRRow to napsal správně :D

Uživatelský avatar
kiRRow
Příspěvky: 1208
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Pavouk Hiwonder

Příspěvek od kiRRow » 26 kvě 2024, 18:01

moc to kombíš, pokud mám X proměnných a chci z nich ven dostat tu nejmenší, tak si udělám proměnnou pro uložení výstupu, zapíšu do ní okamžitě první možnou hodnotu z porovnávaných, a pak ji postupně porovnávám s těmi ostatními a kdykoliv najdu menší, tak tu výstupní přepíšu

Kód: Vybrat vše

int vstup1 = 20;
int vstup2 = 30;
int vstup3 = 10;
int vystup;

vystup = vstup1; // předpokládejme že první vstup je nejmenší
if(vstup2 < vystup){vystup = vstup2;} // porovnáme s druhým, ale není menší
if(vstup3 < vystup){vystup = vstup3;} // porovnáme s třetím, je meší zapíšu si ho
ale i nakonec tohle je taky docela blbost a nesmysl... dá se to celý napsat tak, aby to bylo pružnější, pomocí polí a cyklů ... ono kouzlo je potom v tom, že když místo 3 měření chceš měření 5, tak jen přepíšeš jedno číslo v celém programu. Ten program se pak celý překompiluje tak, aby měl paměť pro pět měření a měřil 5x.

Uživatelský avatar
gilhad
Příspěvky: 815
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 26 kvě 2024, 19:22

A hlavně, když ty vzdálenosti získáváš postupně, tak stačí rovnou uložit jen tu nejmenší

Kód: Vybrat vše


void  zmerit_vzdalenost() {                                         //čtení vzdálenosti ultrazvuku
      
    sonarServo.write (50,230,true);           // vzdálenost mírně vlevo 50°    230 - rychlost otáčení
    ultrazvuk ();
     vzdalenost = vpred;

    sonarServo.write (130,230,true);          // vzdálenost mírně vpravo 130°
    ultrazvuk ();
    if (vzdalenost > vpred) { vzdalenost = vpred; };

    sonarServo.write (90,230,true);            // vzdálenost přímo vpředu 90°
    ultrazvuk ();
    if (vzdalenost > vpred) { vzdalenost = vpred; };
}
(A ta funkce ultrazvuk by taky asi nemusela zapisovat do globálních proměnných, ale mohla by vracet přímo tu hodnotu.
A já bych si to ještě spíš udělal tak, že o to čidlo by se mi staral objekt, takže by pak v setupu bylo něco jako

Kód: Vybrat vše

UVvpred.init(......); // nastavení pinů a tak
a pak v kódu

Kód: Vybrat vše

vpred=UVvpred.vzdalenost();
if (vzdalenost > vpred) { vzdalenost = vpred; };
A kdybych pak chtěl pavouka naučit i couvat, tak mu přidám další čidlo a budu používat ještě navíc UVvzad.
Stejně tak, kdybych nechtěl kroutit krkem, tak mu dám dopředu víc čidel a budu mít UVvpredL, UVvpredC, UVvpredL, nebo rovnou pole UVvpred[3]
)

luger
Příspěvky: 186
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 26 kvě 2024, 21:27

Vidím že existuje hodně různých metod. Zase jsem se něco naučil.
Asi použiji tuto přehlednou variantu:

Kód: Vybrat vše

sonarServo.write (50,230,true);           // vzdálenost mírně vlevo 50°    230 - rychlost otáčení
    ultrazvuk ();
     vzdalenost = vpred;

    sonarServo.write (130,230,true);          // vzdálenost mírně vpravo 130°
    ultrazvuk ();
    if (vzdalenost > vpred) { vzdalenost = vpred; };

    sonarServo.write (90,230,true);            // vzdálenost přímo vpředu 90°
    ultrazvuk ();
    if (vzdalenost > vpred) { vzdalenost = vpred; };
Mám k tomu otázku. Jaký význam má ten středník za složenou závorkou ?

Odpovědět

Kdo je online

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