Operácie

UART Kalkulačka: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 17: Riadok 17:
== Analýza  a opis riešenia ==
== Analýza  a opis riešenia ==


Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Projekt je realizovaný na vývojovej doske Arduino UNO s mikrokontrolérom ATmega328P. Komunikácia prebieha cez UART rozhranie na rýchlosti 9600 baudov. Na vstup ani výstup nie sú potrebné žiadne externé súčiastky – využíva sa vstavaná LED dióda na pine 13 (PB5) a sériový port cez USB kábel.
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.  


[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
Riadok 29: Riadok 28:
=== Algoritmus a program ===
=== Algoritmus a program ===


Algoritmus programu využíva toto a toto, základné funkcie takéto a voláma ich tuto...  
Program je rozdelený do niekoľkých funkcií. Po spustení sa inicializuje UART (funkcia uart_init) a LED pin ako výstup. Hlavná slučka čaká na vstup od používateľa. Funkcia 'read_line' číta znaky zo sériového portu jeden po druhom a ukladá ich do buffera, kým nepríde 'Enter'.
Výpis kódu je nižšie...
 
Funkcia 'process' spracuje zadaný reťazec. Najprv vyhľadá operátor (+, -, *, /) v reťazci, následne skontroluje, či oba vstupné operandy platné čísla. Ak používateľ zadá písmeno namiesto čísla, program vypíše chybu. Funkcia 'atof()' konvertuje reťazce na desatinné čísla, čo umožňuje pracovať aj s desatinnými hodnotami (napr. 3.14*2). Výsledok sa vypíše cez UART a príklad sa uloží do EEPROM histórie.
 




Riadok 65: Riadok 66:
=== Overenie ===
=== Overenie ===


Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.  
Funkčnosť som overila pomocou sériového terminálu s knižnicou UART. Testovala som každú z ponúknutých operácií, operáciu s desatinnými číslami, a aj chybové stavy.
Na konci uvádzame fotku hotového zariadenia.
• Základné operácie: 10+5 = 15, 8*3 = 24, 9-4 = 5, 10/4 = 2.5000
• Desatinné čísla: 3.14*2 = 6.2800
• Chybové stavy: delenie nulou, zadanie písmena namiesto čísla
• História: príkaz 'h' zobrazí posledné 3 príklady, 'clc' ich vymaže
• LED: po každom správnom výpočte blikne vstavaná LED na pine 13
 


[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
Riadok 72: Riadok 78:
'''Video:'''
'''Video:'''
<center><youtube>D0UnqGm_miA</youtube></center>
<center><youtube>D0UnqGm_miA</youtube></center>


== Čo by som urobil inak ==
== Čo by som urobil inak ==

Verzia z 22:36, 7. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Broňa Dzivjaková


Zadanie

Úlohou bolo implementovať kalkulačku komunikujúcu cez sériové rozhranie UART (minimálne použiť: +, -, *, /). Používateľ zadáva matematický príklad (napr. 10+5 alebo 3.14*2) priamo cez sériový terminál a Arduino UNO výsledok vypočíta a odošle späť. Po úspešnom výpočte sa rozsvieti vstavaná LED dióda na pine 13. Program taktiež uchováva históriu posledných troch príkladov v pamäti EEPROM, ktorá zostane zachovaná aj po vypnutí zariadenia. Históriu je možné zobraziť príkazom 'h' a vymazať príkazom 'clear'.

Vývojová doska Arduino UNO.

Literatúra:


Analýza a opis riešenia

Projekt je realizovaný na vývojovej doske Arduino UNO s mikrokontrolérom ATmega328P. Komunikácia prebieha cez UART rozhranie na rýchlosti 9600 baudov. Na vstup ani výstup nie sú potrebné žiadne externé súčiastky – využíva sa vstavaná LED dióda na pine 13 (PB5) a sériový port cez USB kábel.

Celkový pohľad na zariadenie.

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Schéma zapojenia.


Algoritmus a program

Program je rozdelený do niekoľkých funkcií. Po spustení sa inicializuje UART (funkcia uart_init) a LED pin ako výstup. Hlavná slučka čaká na vstup od používateľa. Funkcia 'read_line' číta znaky zo sériového portu jeden po druhom a ukladá ich do buffera, kým nepríde 'Enter'.

Funkcia 'process' spracuje zadaný reťazec. Najprv vyhľadá operátor (+, -, *, /) v reťazci, následne skontroluje, či sú oba vstupné operandy platné čísla. Ak používateľ zadá písmeno namiesto čísla, program vypíše chybu. Funkcia 'atof()' konvertuje reťazce na desatinné čísla, čo umožňuje pracovať aj s desatinnými hodnotami (napr. 3.14*2). Výsledok sa vypíše cez UART a príklad sa uloží do EEPROM histórie.


#include <avr/io.h>

int main(void)
{
  unsigned int measuredValue;

  while (1)
  {
    /*  relax  */  
  }

  return(0);
}
#include <avr/io.h>

void adc_init(void);                                   // A/D converter initialization

unsigned int adc_read(char a_pin);

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Funkčnosť som overila pomocou sériového terminálu s knižnicou UART. Testovala som každú z ponúknutých operácií, operáciu s desatinnými číslami, a aj chybové stavy. • Základné operácie: 10+5 = 15, 8*3 = 24, 9-4 = 5, 10/4 = 2.5000 • Desatinné čísla: 3.14*2 = 6.2800 • Chybové stavy: delenie nulou, zadanie písmena namiesto čísla • História: príkaz 'h' zobrazí posledné 3 príklady, 'clc' ich vymaže • LED: po každom správnom výpočte blikne vstavaná LED na pine 13


Aplikácia.

Video:

Čo by som urobil inak

Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.