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
Uživatelský avatar
gilhad
Příspěvky: 815
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 29 kvě 2024, 22:51

Já ten kód teď nečetl :oops: ale kdybych měl problémy s tím náklonem, tak bych si do té funkce dal dvě LED, jedna by se přepínala při každém volání (a viděl bych jak rychle bliká) a druhá by se podle náklonu zapínala/vypínala, takže když bych pavouka vzal a naklonil, tak by se měla hned rozsvítit a když bych ho narovnal, tak by měla zhasnout.

Tím bych viděl, jestli se ten náklon vyhodnocuje správně (co je moc a co ne) a jestli to reaguje dost rychle.

(Jo, při ladění dávám všude LED a ladící tisky a pak je zase vyhazuju. Tisky jsou popisnější, LED jsou líp vidě při reakcích na podněty.)

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

Re: Pavouk Hiwonder

Příspěvek od luger » 30 kvě 2024, 07:14

Informace o náklonu se mi vypisuje na OLED displej takže to hned vidím - funguje to spolehlivě a rychle , 1- nakloněný 0- vodorovně

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 » 30 kvě 2024, 15:17

Jak jsem očekával. Ten program je prostě obrovský brajgl a otázkou není proč to nefunguje, ale proč to vůbec funguje ;) :D . Jinak naprosto v pořádku, takové věci se v počátcích programování dějí. Uvidíš sám až po pár letech otevřeš nějaký starý program, tak nepochopíš, jak jsi vůbec něco takového, mohl někdy zprasit ;) .

Myslím, že jsi to dopracoval do bodu, který většina programátoru (hlavně začínajících) velmi nerada připouští. Otevři si úplně nový prázdný soubor a začni znovu - ale než se zhrozíš, uvědom si, že úplně od píky nezačínáš. Do nového souboru začni postupně kopírovat jednotlivé funkce a postupně je jednu po druhé odlazovat. Já bych asi začal pohybovýma funkcema, setup, loop a nechal bych ho prostě jít jedním směrem do nekonečna, potom jiným směrem do nekonečna až bych je měl všechny opět bych nechal loop prázdný a věnoval se další funkci. Teprve až bych měl otestováno samostatně více funkcí, tak bych je začal spojovat v nějaký program, který bude simulovat inteligenci.

Smyslem toho je 1) odladit každou funkci jednotlivě zvlášť 2) tím, že je budeš spojovat odlazené a postupně po jedné, tak odhalíš konfliktní místa 3) pořádek v programu

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 » 30 kvě 2024, 15:32

takže vlastně nový soubor bude obsahovat jen knihovny co potřebuješ pro pohyb pavouka, funkci krok_vpred, setup a loop{krok_vpred();} ... a budeš zjišťovat, jak jde vpřed ... jestli třeba není nutné mezi jednotlivými kroky čekat, jak dlouho ... až budeš mít kompletní sadu všech pohybů, tak přistoupíš na senzory ...

uděláš třeba funkci, který bude testovat ultrazvuk, zatím bez serva, jen krátký test jestli přímo předemnou něco je ... může vracet vzdálenost, nebo jen 0/1. Pak uvidíš dál, podle mne příjdeš na to, že k řízení toho programu bude dobré používat takzvané flagy ... to je hromada proměných typu bool (0/1), které slouží k ovlivnění běhu programu. První flag asi bude pohybPovolen ... pokud bude 1 pavouk nebude preskakovat funkci krok_vpred(), pokud bude 0 pavouk funkci přeskočí... flag potom budou ovládat různé funkce obsluhující různé senzory ... a ty zase budou mít své flagy, takže potom v programu snadno zjištíš, že pohybPovolen je false a zároveň detekceNaklonu je true, tak víš, že pohyb pavouka zastavil náklon a je třeba provést třeba couvání, zatím co když pohybPovolen je false a prekazkaVpredu je true, tak víš že máš začít kroutit servem ultrazvuku a hledat místo kde jít ...

v reálném životě to funguje taky tak, děláš nějakou činnost, třeba řídíš auto ... v proti směru na tebe někdo blikne, tak zkontroluješ jestli svítíš a pokud ano, tak si nastavíš flag davejPozor na true a jedeš opatrněji, protože očekáváš policejní hlídku co měří ... až ji mineš, tak davejPozor nastavíš na false a jedeš zase rychleji :-D

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

Re: Pavouk Hiwonder

Příspěvek od luger » 30 kvě 2024, 16:44

V prvé řadě musím říct, že z 80% jde o původní tovární program, já jsem tam jen vložil nějaké senzory. To už mě taky napadlo - začat úplně od začátku. Problém vidím v těch specifických továrních knihovnách. Nemám představu co a jak a proč dělají. Serva jsou typu BUS takže v tom já určitě nic nezměním, můžu max naprogramovat kroky pavouka v aplikaci.
Všechny senzory jsem samozřejmě testoval samostatně, ale je možné, že stejné piny využívají i knihovny a tak se to tam mlátí. K servoboardu nejde téměř nic zjistit a to co jde tak tomu stejně nerozumím :lol:

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 » 30 kvě 2024, 17:32

pokud porozumíš tomu jak ty knihovny ovládat, tak zase není až tak nutné vědět jak moc přesně pracují ... stačí jen zjistit kde a s čím se perou a proč ... na tohle právě příjde člověk tím, že to zkouší zvlášť, pak dohromady ...
Už jen tím, že budeš postupně vyzobávat různé bloky ze starého programu a skládat z nich nový, lepší a efektivnější, tak poznáš co a jak je na sebe vázané, které knihovny na které funkce atd ...

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

Re: Pavouk Hiwonder

Příspěvek od luger » 30 kvě 2024, 18:36

Mě by spíše zajímalo proč nezareaguje na výsledek podmínky náklonu:

Kód: Vybrat vše

void loop() {
    Controller.receiveHandle();                    // Funkce pro komunikaci serv
    cekani = cekani + 1;                           // počítadlo operací
    
       if(test_naklonu()){                   //kontrola náklonu pomocí gyroskopu
       PIR ();
       } 
       else {
       }    
       
    sonar();                              // hlavní smyčka vyhodnocování pohybu


A druhý příklad - proč vzdálenost vždy vyhodnotí a okamžitě provede akci, ale podmínky na náklon si nevšimne :

Kód: Vybrat vše

case 1:                                 
    
      zmerit_vzdalenost();                //změřit vzdálenost vpředu a uložit do  "vzdalenost" - kmitání serva
 
        if (test_naklonu()) {                   //kontrola náklonu pomocí gyroskopu         vráceno true, takže je to naklopený
        PIR ();                                     //přejdi na PIR
       } 
           else {
                                           //vráceno false, takže je pavouk rovně
       }

        
      if (!Controller.isRunning()) {            //Počkejte, dokud nebude ukončena akční skupina pohybu
        
        if (vzdalenost > 160 ){ 
          Controller.runActionGroup(TEREN_POKUS, 0);    // původní RYCHLE,         POKUS je lepší
          pocitadlo = pocitadlo + 1;
          step_ = 2;                                   
        }
Pokud toto nepochopím tak se nemá cenu pouštět do větších akcí.

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 » 30 kvě 2024, 21:09

chybu hledej v "Controller.isRunning()" ... ta PIR funkce se klidně může zavolat, ale pokud je během toho Controller.isRunning()==true tak to celou tu funkci vyblokuje i když jí to má zavolat, zavolá ji to a proběhne tak jak má (tak že neproběhne)

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

Re: Pavouk Hiwonder

Příspěvek od luger » 30 kvě 2024, 21:48

A to je právě to co jsem měl na mysli - ovládání serv a knihovna. To tam dělá ten bordel, jenže s tím se nedá nic dělat, bez toho to nepojede. Je zajímavé, že vzdálenost se vyhodnotí. Možná že je chyba v "PIR".

Uživatelský avatar
Diego
Příspěvky: 179
Registrován: 23 črc 2017, 09:43
Kontaktovat uživatele:

Re: Pavouk Hiwonder

Příspěvek od Diego » 31 kvě 2024, 05:06

Možná to pro tebe bude trochu složitější ale doporučuji otevřít a prostudovat tu knihovnu co tě pořád trápí. V podstatě to je taky obyč program a minimálně tam najdeš který piny využívá a třeba najdeš i s čim se ti pořád pere. Mě to několikrát pomohlo ;)
https://arze.cz - ARduino Zapojení Elektronika

Odpovědět

Kdo je online

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