Otto - námety na vylepšenie programu

From DT^2
Revision as of 20:56, 25 August 2018 by Admin (talk | contribs)
Jump to: navigation, search

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()

Program robí toto:

  1. po zapnutí skontroluje, či je v EEPROM zapísaná kalibrácia, ak áno, načíta ju
  2. ak je nastavený tak, že má automaticky štartovať tanec po zapnutí, počká niekoľko sekúnd a začne tancovať
  3. inak pozdraví, zamáva rukami a čaká na znak prijatý cez USB, alebo cez BlueTooth, alebo na zatienenie ultrazvukového senzora, ak sa pár sekúnd nič nedeje, tak vykoná náhodnú činnosť (väčšinou len vydá nejaký zvuk, niekedy sa začne hýbať, hrať melódiu, alebo vydá 20 náhodných zvukov za sebou)
  4. robota v tomto režime môžeme priamo ovládať jednotlivými znakmi cez USB alebo BlueTooth, ladiť alebo testovať choreografiu, kalibrovať a podobne (podrobný zoznam funkcií je v tabuľke na stránke s programom)
  5. pomocou ultrazvukového senzora môžeme s robotom komunikovať - zatiaľ to znamená štartovať jeho rôzne činnosti, funguje to takto:
    1. najskôr priblížime ruku (alebo lepšie nejakú pevnú kartičku, telefón a pod.) asi 5-10 cm pred senzor
    2. po niekoľkých sekundách robot pískne nízkym tónom, aby nám dal vedieť, že nás zaregistroval
    3. následne čaká, kým ruku oddialime, aby mohol začať počítať počet priblížení rukou
    4. v okamihu, keď sa mu podarí oddialenie zamerať, vydá vysoký tón, aby nás o tom upovedomil
    5. ďalej opakujeme priblíženie a oddialenie ruky pred senzorom, pričom pri každom priblížení robot vydá niekoľko písknutí (ich počet určuje aktuálne navolený program) a pri každom oddialeníu vydá vysoký tón
    6. keď prestaneme ruku pred senzor prikladať, robot si to po niekoľkých sekundách všimne, vydá tón a odštartuje zvolený program (podľa posledného počtu písknutí)
    7. ak sa vám zdá, že senzor nereaguje, vyskúšajte režim 'U' z hlavného menu, ktorý do USB a na Bluetooth vypisuje nameranú vzdialenosť
  6. niekoľko ďalších praktických rád:
    • medzera vždy postupne vyrovná všetky servá do strednej polohy
    • kláves ESC preruší melódiu
    • akýkoľvek kláves preruší tanec
    • pri potvrdzovaní zápisu/čítania sa musí stlačiť veľké 'Y', malé 'y' neurobí nič
    • ak nás počas práce Ottove vrzúkanie otravuje, môžeme vypnúť režim nudy klávesou V
    • užitočný je kláves 'S', ktorý zobrazí aktuálny stav všetkých seriev - choreografiu teda môžeme ladiť tak, že pomocou kláves robota nastavíme do požadovanej polohy a potom stlačíme S, aby nám zobrazil hodnotu všetkých seriev, to servo, ktoré sa pohlo si všimneme a pridáme do ďalšieho riadku choreografie
    • predtým, ako zapíšeme prvú choreografiu do EEPROM, je potrebné EEPROM naformátovať klávesou X


Ako pridať ďalšiu melódiu