Difference between revisions of "Otto - námety na vylepšenie programu"

From DT^2
Jump to: navigation, search
m
Line 2: Line 2:
  
 
* [[Otto - námety na vylepšenie programu#Celková štruktúra programu - čo v ňom je a kde, ako to funguje|Celková štruktúra programu - čo v ňom je a kde, ako to funguje]]
 
* [[Otto - námety na vylepšenie programu#Celková štruktúra programu - čo v ňom je a kde, ako to funguje|Celková štruktúra programu - čo v ňom je a kde, ako to funguje]]
* Ako pridať ďalšiu melódiu
+
* [[Otto - námety na vylepšenie programu#Ako pridať ďalšiu melódiu|Ako pridať ďalšiu melódiu]]
 
* Ako uložiť choreografiu priamo do programu, aby sa nemusela zadávať cez terminál
 
* Ako uložiť choreografiu priamo do programu, aby sa nemusela zadávať cez terminál
 
* Ako zmeniť príkazy, ktoré sú štartované cez ultrazvukový senzor
 
* Ako zmeniť príkazy, ktoré sú štartované cez ultrazvukový senzor
Line 8: Line 8:
  
 
== Celková štruktúra programu - čo v ňom je a kde, ako to funguje ==
 
== Celková štruktúra programu - čo v ňom je a kde, ako to funguje ==
 +
 +
Program sa skladá z viacerých častí, ktoré sme pre jednoduchšiu manipuláciu umiestnili do jedného súboru. Vhodnejšie by bolo tento súbor rozdeliť na viacero samostatných súborov, ale potom by sa program ťažšie downloadoval, upravoval a podobne.
 +
 +
Skladá sa teda z týchto častí (tento text sa týka verzie 4):
 +
 +
# definície konštánt, globálnych premenných, funkcia setup() - konfigurácia všetkých zariadení
 +
# funkcia loop() - reaguje na stlačenie klávesy, alebo na ruku pred ultrazvukom a keď sa robot dlhšie nudí, aktivuje náhodnú činnosť
 +
# väčšina ostatných funkcií, ktoré využíva hlavný program
 +
# funkcie, ktoré slúžia na čítanie a zápis do špeciálnej pamäte EEPROM - jej obsah sa po vypnutí robota (na rozdiel od pamäte RAM) nestratí, preto sem ukladáme kalibráciu servomotorov, tri choreografie a  informáciu o tom, či má robot po zapnutí automaticky začať tancovať
 +
# naša vlastná softvérová implementácia komunikácie po sériovom porte (jediný sériový port Arduina je totiž už obsadený programovacím USB káblikom a preto musí byť BlueTooth pripojený inam, lenže štandardná knižnica SoftwareSerial znemožňuje súčasné používanie knižnice Servo, preto sme museli vytvoriť lepšiu vlastnú verziu), zároveň je tu niekoľko pomocných funkcií, ktoré dokážu vypisovať do sériového portu reťazce znakov uložené v pamäti FLASH (programová pamäť), aby sme ušetrili pamäť RAM, ktorej má ATmega328 oveľa menej (má 32KB Flash, ale iba 2KB RAM)
 +
# funkcie na čítanie z ultazvukového senzora pomocou prerušení - pomocou nich je možné pomalé čítanie z ultrazvukového senzora robiť v pozadí, kým hlavný program robí niečo iné (aj keď túto vlastnosť zatiaľ nevyužívame)
 +
# melódie a funkcie na prehrávanie tónov a melódií v pozadí pomocou časovača timer2 - program môže vykonávať inú činnosť zatiaľ čo sa melódia prehráva v pozadí
 +
 +
Osobitnú pozornosť si zaslúžia tieto funkcie a premenné:
 +
 +
# vo funkcii loop() je naprogramované, čo Otto robí pri stlačení rôznych kláves, ak mu chcete pridať nejakú novú schopnosť, tak sem stačí pridať riadok - pozri na konci funkcie riadok kde sa volá vasa_dalsia_funkcia() - to je ukážka toho, ako sem môžete pridať nejakú ďalšiu funkciu...
 +
# vo funkcii ma_zahrat_melodiu() sú klávesy, ktoré štartujú jednotlivé melódie. ak si pridáte novú melódiu a chcete ju štartovať aj pomocou nejakého klávesu nielen príkazom z choreografie, tak sem pridajte riadok...
 +
# funkcie efekt1() - efekt16() sú rôzne zvukové efekty, ktoré Otto dokáže vydať, môžete experimentovať s nastaveniami v týchto funkciách, alebo si vymyslieť nové vlastné zvukové efekty...
 +
# funkcia menu_command() určuje, čo sa má robiť, keď rukou pred Ottom vyžiadame niektorý program - počet priblížení ruky určuje číslo programu, v tejto funkcii môžete určiť, čo sa má na akom čísle diať...
 +
# funkcia ahoj() je charakterisktický zvuk, ktorým sa Otto ozýva pri zapnutí - ak si tento zvuk chcete zmeniť, tak tu... pozor - aby prehrávanie melódie fungovalo, musíme používať našu funkciu tone2 namiesto arduinovskej funkcie tone()
 +
# funkcie kombinacia1() - kombinacia4() si upravte ak chcete robotom robiť zložitejšie pohyby pri riadení cez mobil. sú priradené na klávesy '3' .. '6'.
 +
# ak chcete rozširovať príkazy, ktoré môžu byť v choreografii, upravujte funkciu specialny_prikaz()
 +
 +
== Ako pridať ďalšiu melódiu ==

Revision as of 20:37, 25 August 2018

Program zatiaľ využíva len asi polovicu programovej pamäte (typu FLASH), takže je ešte veľa priestoru na jeho vylepšovanie a upravovanie. Ako na to?

Celková štruktúra programu - čo v ňom je a kde, ako to funguje

Program sa skladá z viacerých častí, ktoré sme pre jednoduchšiu manipuláciu umiestnili do jedného súboru. Vhodnejšie by bolo tento súbor rozdeliť na viacero samostatných súborov, ale potom by sa program ťažšie downloadoval, upravoval a podobne.

Skladá sa teda z týchto častí (tento text sa týka verzie 4):

  1. definície konštánt, globálnych premenných, funkcia setup() - konfigurácia všetkých zariadení
  2. funkcia loop() - reaguje na stlačenie klávesy, alebo na ruku pred ultrazvukom a keď sa robot dlhšie nudí, aktivuje náhodnú činnosť
  3. väčšina ostatných funkcií, ktoré využíva hlavný program
  4. funkcie, ktoré slúžia na čítanie a zápis do špeciálnej pamäte EEPROM - jej obsah sa po vypnutí robota (na rozdiel od pamäte RAM) nestratí, preto sem ukladáme kalibráciu servomotorov, tri choreografie a informáciu o tom, či má robot po zapnutí automaticky začať tancovať
  5. naša vlastná softvérová implementácia komunikácie po sériovom porte (jediný sériový port Arduina je totiž už obsadený programovacím USB káblikom a preto musí byť BlueTooth pripojený inam, lenže štandardná knižnica SoftwareSerial znemožňuje súčasné používanie knižnice Servo, preto sme museli vytvoriť lepšiu vlastnú verziu), zároveň je tu niekoľko pomocných funkcií, ktoré dokážu vypisovať do sériového portu reťazce znakov uložené v pamäti FLASH (programová pamäť), aby sme ušetrili pamäť RAM, ktorej má ATmega328 oveľa menej (má 32KB Flash, ale iba 2KB RAM)
  6. funkcie na čítanie z ultazvukového senzora pomocou prerušení - pomocou nich je možné pomalé čítanie z ultrazvukového senzora robiť v pozadí, kým hlavný program robí niečo iné (aj keď túto vlastnosť zatiaľ nevyužívame)
  7. melódie a funkcie na prehrávanie tónov a melódií v pozadí pomocou časovača timer2 - program môže vykonávať inú činnosť zatiaľ čo sa melódia prehráva v pozadí

Osobitnú pozornosť si zaslúžia tieto funkcie a premenné:

  1. vo funkcii loop() je naprogramované, čo Otto robí pri stlačení rôznych kláves, ak mu chcete pridať nejakú novú schopnosť, tak sem stačí pridať riadok - pozri na konci funkcie riadok kde sa volá vasa_dalsia_funkcia() - to je ukážka toho, ako sem môžete pridať nejakú ďalšiu funkciu...
  2. vo funkcii ma_zahrat_melodiu() sú klávesy, ktoré štartujú jednotlivé melódie. ak si pridáte novú melódiu a chcete ju štartovať aj pomocou nejakého klávesu nielen príkazom z choreografie, tak sem pridajte riadok...
  3. funkcie efekt1() - efekt16() sú rôzne zvukové efekty, ktoré Otto dokáže vydať, môžete experimentovať s nastaveniami v týchto funkciách, alebo si vymyslieť nové vlastné zvukové efekty...
  4. funkcia menu_command() určuje, čo sa má robiť, keď rukou pred Ottom vyžiadame niektorý program - počet priblížení ruky určuje číslo programu, v tejto funkcii môžete určiť, čo sa má na akom čísle diať...
  5. funkcia ahoj() je charakterisktický zvuk, ktorým sa Otto ozýva pri zapnutí - ak si tento zvuk chcete zmeniť, tak tu... pozor - aby prehrávanie melódie fungovalo, musíme používať našu funkciu tone2 namiesto arduinovskej funkcie tone()
  6. funkcie kombinacia1() - kombinacia4() si upravte ak chcete robotom robiť zložitejšie pohyby pri riadení cez mobil. sú priradené na klávesy '3' .. '6'.
  7. ak chcete rozširovať príkazy, ktoré môžu byť v choreografii, upravujte funkciu specialny_prikaz()

Ako pridať ďalšiu melódiu