Yrobot

Pochlubte se svým robotem ostatním!
Odpovědět
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Včera som sa stým len hral preto som písal že som skúšal sa stým hrať...
Preto som to písal initOPT(); do yellow_robot.h inak to tam najprv nebolo len tak ma napadlo náhodou že to tam má byť...

Tak som to opravil včerajšie chyby čo som ti poslal a vyhodilo ďalšie čerrory... :D

Prvému moc nerozumiem ale tým ostatným hej...
No neviem prečo ich zobrazuje aj keď by nemalo veď sú v yellow_robot.h spomenuté...
Obrázek


Taktiež ma napadlo že k tomu motor_run dohodím po stlačení SW_2 nech sa pohne nech mi to nelieta hneď ako to zapnem... :D
Je to len tak nahodené predtým to nebolo tak len sa stým hrám :)

Kód: Vybrat vše

/*
 * Robot_yellow.c
 *
 * Created: 23.2.2015 17:44:09
 *  Author: Baworek
 */ 


#include "yellow_robot.h" // vlozeni HAL knihovny pro abstrakci od HW Yrobota

#define VLEVO PA0  // levy snimac cary je pripojen na pin PA0 (nazev PA0 je definovan nekde v <avr/io.h>)
#define UPROSTRED PA1  // stredni snimac cary je pripojen na pin PA1
#define VPRAVO PA2  // pravy snimac cary je pripojen na pin PA2

   void initOPT(void) { // void znamena neco jako "nic" (tato funkce tedy nevraci zadnou navratovou hodnotu)
      // zatim ta funkce nedela vubec nic, ale pozdeji bude inicializovat porty a piny pro modul OPT
   }

   u8 cara_je(u8 snimac) {  // funkce musi vratit hodnotu 0 pokud cara neni pod snimacem "snimac"a 1 pokud cara je pod snimacem
      // tato funkce zatim take nedela nic, ale pozdeji bude vyhodnocovat stav snimace "snimac" a vracet hodnotu 0 nebo 1
      // u8 je zkratka pro "unsigned char", definovana v "int_def.h" (takze "int_def.h" take musi byt v adresari projektu)
	  return 0;
   }

int main(void)
{
   init(); // inicializace vseho potrebneho mimo OPT modul
   initOPT(); // inicializace OPT modulu
   
   while(1)
   {
	   if (switch_read(SW_2))
	   {
		    motor_run(150, 150);
	   }
	  
   }
   
	
   while(1) 
   { // zakladni nekonecna smycka
      if (cara_je(VLEVO)) motor_run(0,150); // kdyz je cara vlevo, zatacim vlevo
      if (cara_je(UPROSTRED)) motor_run(150,150); // kdyz je cara uprostred, jedu rovne
      if (cara_je(VPRAVO)) motor_run(150,0); // kdyz je cara vpravo, zatacim vpravo
   // zadny dalsi test tu uz nemam, takze kdyz nevidim caru, delam to posledni, co jsem delal predtim
   }
   

}
RE: :D
P.S.1: po dopísaní return 0; sa chyba opravila :D
P.S.2: Tak uvažoval som malo by to ísť rovno teda mohlo... A možno by mali fungovať aj senzory... Mohlo by to spraviť to čo pri zapínaní dema že to pípne skontroluje všetko a potom začne niečo robiť no rýchlosť 150 je na začiatok rýchlo :D ...
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

OK, přeložit to už snad jde, takže v tomto směru můžeme jít dál.

Ovšem Tvoje chápání, co má program dělat, je zatím značně nepřesné.

Ano, v původním programu (před Tvojí poslední úpravou) by se měl Yrobot rozjet vpřed, ale pak nemá šanci se cokoliv změnit (funkce "cara_je" zatím vrací vždy nulu, ať je pod nimi co chce, tlačítka se vůbec nevyhodnocují). Robot tedy pojede pořád dál, ať se děje co chce. Stejně tak robot nebude pípat ani dělat cokoliv jiného z "Dema", protože ta demo funkce "basic_test()" není obsažena v knihovně "yellow_robot", ale bylo napsána přímo v hlavním programu "Dema". My ji teď nemáme k dispozici, ani se ji nepokoušíme volat.

Po Tvé úpravě se sice robot rozjede až po stisku tlačítka, ale pak už se také nikdy nezastaví a navíc se ani nedostane ke zpracování funkcí "cara_je", protože program zůstane v té první nekonečné smyčce.

Začínám mít dojem, že Ti chybí i takové základy programování, jako je podmínka "if" nebo cyklus "while". OK, měl jsem to asi předpokládat.

To naučení základních příkazů, základních rozhodovacích konstrukcí a solidní pochopení funkčnosti zapsaného programu je bohužel poměrně "bolestná část" při učení se programování. Jakmile tyto základy zvládneš, tak pak už je to docela snadné a zábavné.

Napiš, jestli je potřeba, abych popsal, co a jak přesně dělají konstrukce "if (podmínka)" a "while (podmínka)", nebo jestli je Ti to jasné. A co třeba "výraz", "proměnná" nebo "konstanta"? Prodiskutujeme to tady? Nebo zkusíš nějakou příručku základů programování (třeba na internetu)?

Když jsem se ptal, jak by se dal program upravit, aby to bylo pro robota bezpečnější a přitom bylo vidět, že program pracuje, měl jsem na mysli to, že místo skutečného rozjetí (ovládání motorů pomocí "motor_run"), bychom zatím mohli funkčnost signalizovat jen pomocí LED (a později případně i sedmisegmentovek, které jsou na Yrobotu).

Pokud tedy budeš mít chuť, zkus si tyto úpravy svého programu:
1. ponech možnost rozjetí až po stisku tlačítka, ale pak nech program pokračovat ke smyčce s budoucím vyhodnocením snímačů
2. uprav celý program tak, aby místo spouštění motorů jen signalizoval jejich chod pomocí LED (a přitom aby se ke spouštění motorů později dalo snadno a rychle vrátit)

V této fázi je nejdůležitější pochopit, co je vlastně třeba udělat, a jak na to. Nemusíš to ani rovnou psát do programu, ale stačí když ty úpravy popíšeš "svými slovy" tady do fóra.

P.S.: Máš už modul OPT "zapíchnutý" do Yrobota? Už brzo to budeme potřebovat.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Jediný problém je že to nejde preložiť... :D :D
Keď si pozrieš error list v predchádzajúceho postu čo som písal tak zistíš kde ukazuje chyby a neviem prečo...

Jediný problém u mňa je nie v znalostiach jazyka... To je najmenší problém...
Najväčší problém je že ja si neviem predstaviť ako to mam spraviť... :D

OPTmodul mám pripojený :)

Na tú upravu na LED stačí prepísať ten motor_run na tie LED príkazy? :D
(To len aby som si nemusel namáhať mozoček večer moc...)
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Aha, v tom případě mne zmátlo tvoje P.S.1: že "po dopísaní return 0; sa chyba opravila".

Nevím, co je to za chybu, která se týká mne neznámého programu "collect2.exe".

Musíme na to tedy jít "z minima". Zkus, jestli půjde přeložit tento minimální program:

Kód: Vybrat vše

#include "yellow_robot.h"
int main() {
  return 0;
}
Podstatné je, aby soubory "yellow_robot.h", "yellow_robot.c" a "int_def.h" byly ve tvém adresáři přesně takové, jako jsou v příkladu "Demo" (nesmí v nich být žádná změna). Pokud to ani tak nepůjde přeložit, tak jsem zvědav, jakou chybu to bude psát.

Jinak ano, pro signalizaci v zásadě stačí "přepsat" ty "motor_run" příkazy na "LED příkazy". "Přepsat" ale píšu v uvozovkách, protože lepší je ty "motor_run" příkazy jenom "zakomentovat" (dát před ně //) a ty "LED příkazy" tam dopsat navíc. Ovšem pokud nepůjde přeložit ani ten minimální program nahoře, tak ty úpravy jsou k ničemu. Ještě mne zajímá, jestli rozumíš smyslu a použití složených závorek {} v programu.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Tak ten mini programík išiel preložiť hneď :D

Presne ako píšeš sú v pôvodnom stave obidva :)

No myslel som si že to nebude zložité z tými LED už sa do toho dostávam ej... :D
Zmysel {} no mal by som :D tak ako u CSS do nich sa píše funkcia :D čo to má robiť, ako to má vypadať :D
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

OK, tak "miniprográmek" trochu rozšíříme. Půjde přeložit tohle? Doufám, že ano.

Kód: Vybrat vše

#include "yellow_robot.h"
init();
int main() {
  led_on(LED_7);
  led_on(LED_8);
  return 0;
}
Hlavní funkce složených závorek {} je v tom, že označují "blok programu", tedy skupinu příkazů, které "patří k sobě" (přesněji patří k tomu, co je uvedeno před otvírací složenou závorkou. Ptal jsem se na to proto, že v tom původním návrhu "sledovače čáry" mám použité jednořádkové "if" příkazy, za kterými nejsou žádné složené závorky. V takovém případě se totiž po úspěšném "if" provede jen jeden příkaz (do prvního středníku). Pak končí i to "if". Pokud ale budeme potřebovat po "if" provést několik příkazů (což bude třeba pro LED signalizaci), tak vždy těch nekolik příkazů musíme "sloučit" pomocí složených závorek. K tomu se ale dostaneme až poté, co půjde přeložit kód z tohoto příspěvku. Pokud to přeložit půjde, můžeš to ještě zkusit nahrát do Yrobota, jestli to rozsvítí obě LEDky.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Skúsil som no nejde zostaviť... :D

Obrázek

Čím to je :D ?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Hmm. Ve skutečnosti běžně programuju jenom PICAXE a Arduino, takže s AVR Studiem nemám žádné zkušenosti (nemám ho ani nainstalované). Nevím tedy, co všechno "snese" a co ne. Vypadá to, že mu vadí, že volání toho "init()" je mimo sekci "main". tak to tam zkus přesunout.

Kód: Vybrat vše

#include "yellow_robot.h"
int main() {
  init();
  led_on(LED_7);
  led_on(LED_8);
  return 0;
}
Asi si holt budu muset taky nainstalovat AVR Studio, abych nemusel čekat na Tvé výsledky překladu.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Tak jsem si nainstaloval AVR Studio 5 a po hodině experimentování jsem to nakonec rozchodil tak, že ten poslední "miniprogram" už jde přeložit.

Zjistil jsem, že aby to fungovalo, tak nestačí ty potřebné .h a .c soubory jenom nahrát do adresáře projektu, ale navíc se ještě musí v tom AVR Studiu přidat ten "yellow_robot.c" do projektu. Nejprve je třeba mít označen v "Solution Exploreru" (vpravo nahoře) správný projekt ("Robot_yellow") a pak postupně dát "Project" -> "Add Existing Item" -> najít "yellow_robot.c" -> "Add". Jde to udělat i přes pravé tlačítko myši a následné rozbalovací menu. Pak už to jde přeložit (např. pomocí F7).

Od teď už se tedy budeme moci bavit vždy jen o přeložitelných programech (a ten poslední už přeložitelný je [init() musí být uvnitř main]).

P.S.: To prostředí AVR Studia je pro mne dost nepřehledné a řekl bych že pro začátečníka to musí být úplné peklo. Zlaté Arduino.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Bratm ty si pán!!! :D

Ono to funguje :)
Hodil som to aj do Yrobota a svietia :)

Konečne sa môžeme pohnúť... :D
Odpovědět