Operácie

Meranie krátkych intervalov: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDVPS (diskusia | príspevky)
StudentDVPS (diskusia | príspevky)
 
(62 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
{|
{|
|Autori:      || '''Ján Mrkvička, Jozef Kuleha'''  
|Autori:      || '''Juraj Paulen, Radovan Vojvoda'''  
|-
|-
|Študijný odbor:  || Aplikovaná mechatronika || 2. Ing.  ('''2013''')  
|Študijný odbor:  || Aplikovaná mechatronika || 2. Ing.  ('''2013''')  
Riadok 24: Riadok 24:
__TOC__
__TOC__


== Analýza ==
== Analýza použitých komponentov ==
'''Display'''


[[Súbor:ParallaxLCDAppMod.jpg]]
[[Súbor:ParallaxLCDAppMod.jpg]]


* obrázok zapojenia vývodov použitej súčiastky
''Vlastnosti:''
* odkaz na katalógový list
  - 2x8 LCD Displej bez podsvietenia
* priebehy dôležitých signálov
  - 4 Tlačítka
  - Trimer na zmenu kontrastu
  - Technické parametre:
  - Napájanie: 5 V @ 15 mA
  - Pripojenie: 4-Bit parallel interface (Hitachi HD44780 compatible)
  - Rozmery: 60 x 50 x 20 mm
  - Pracovná teplota: 0 až +70 °C
 
''Schéma zapojenia:''
 
[[Súbor:Schema_display.jpg|800px]]
 
'''Snímač'''
 
''Vlastnosti:''
  - Detekuje rozdiely medzi svetlými a tmavými objektami
  - Detekuje relatívnu vzdialenosť k objektu
  - Funguje ako analógový senzor, ale môže byť pripojený na digitálne I/O rozhranie
 
''Funkcia:''
 
QTI Sensor používa infračervené svetlo emitujúcej diódy a infračervený fototranzistor poskytujúci bezkontaktnú detekciu objektov. Emitované svetlo z LED diódy sa odrazí od povrchu daného objektu, a je následne detekované fototranzistorom. Podľa toho ako veľmi je infračervené svetlo odrazené od objektu dokážeme odhadnúť jeho vzdialenosť od senzora. Senzor dokáže rozlišovať svetlé a tmavé plochy, ako sú napríklad čierne čiary na papieri.
 
QTI snímač sa aktivuje tým, že sa privedie 5 V (VDD) na W pin. To spôsobí, že prúd preteká cez 470 ohm rezistor do LED.
Infračervené svetlo odrážajúce od povrchu spôsobí zmenu prúdu ktorý preteká fototranzistorom. Tranzistor sa v skutočnosti chová ako IR riadený odpor.
 
[[Súbor:qti-1.jpg]] [[Súbor:qti-2.jpg]]
 
''Schéma zapojenia:''
 
[[Súbor:schema_qti.jpg]]
 
'''Vývojová doska Acrob'''
 
Na riešenie zadania bola použitá vývojová doska Acrob vytvorená na Slovenskej technickej univerzite v Bratislave:
 
http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/S%C3%BAbor:AcrobBoard.png
 
http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob


== Popis riešenia ==
== Popis riešenia ==


Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru  
'''Pripojenie k procesoru'''
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.


'''Schéma zapojenia snímača'''
Na W pin sme priviedli napájacie napätie 5V, pin R sme zapojili na pozíciu D3 a pin B na GND. Medzi pozíciami W a R je potrebné zapojiť odpor s veľkosťou 10kΩ.
[[Súbor:Zapojenie.png]]


[[Súbor:Example.jpg]]
''Schéma zapojenia:''                                       


Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo
[[Súbor:Zapojenie_k_procesoru.jpg|500px|]]    [[Súbor:1579940_10201275345750368_71450312_n.jpg]]
nahrať už aspoň 10 študentov.




'''Využité periféria:'''
- LCD Displej
- 4 programovacie tlačidlá
Rozhranie typu UART bolo potrebné zakázať, aby bolo možné použiť pin PD1.
'''Riešenie problému:'''
Na doske Acrob s LCD displejom sme mali merať čas medzi dvoma snímačmi, ktoré budú merať časový okamih od prechodu objektu cez prvý snímač (t1) až po prechod objektu cez druhý snímač (t2).
Ako štartovacie resp. reštartovacie tlačidlo sme si zvolili posledné štvrté tlačidlo.
Po nahratí programu sa nám na LCD displaji objaví text “Meranie intervalov”.
Kedže tento text je príliš dlhý , aby sa zmestil do jedného riadku , pomocou cyklu FOR sme nastavili pohyblivý text, ktorý sa nám bude na displeji rotovať.
Po zatlačení už spomínaného tlačidla sa nám displeji zobrazí text “Restart” aj s malým oneskorením na to text “T:”.
Následné meranie začína po prechode objektu pred snímačom sa spúšťa časovač
Meranie končí po prechode objektu pred snímačom a následne je nameraný čas zobrazený na displeji.
Časový okamih je v milisekundách (ms) a minimálna hodnota nameraného časového okamihu je 1 ms.


=== Algoritmus a program ===
=== Algoritmus a program ===
Program sme riešili v jazyku C v programovacom prostredí AVR Atmel Studio 6.0. Ako prvé bolo potrebné zadefinovanie potrebných knižníc, taktu procesora ktorý nám slúži na výpočet delay z knižnice delay.h a hlavičkových súborov na správnu funkciu LCD displeja. Následne sme riešili nastavenie portov slúžiacich na funkciu zapojených senzorov. Na správne snímanie objektov pred senzormi sme v hlavnom programe riešili čítanie logických úrovní. Ak sa pred snímačom nachádza prekážka, príslušný port sa prepne na log. 0 a naopak ak sa pred snímačom nenachádza prekážka, je nastavený na 1. Ďalšia časť programu je orientovaná na obsluhu tlačidla, pomocou ktorého dosiahneme reštartovanie merania. Vo funkcií main sme riešili správne odosielanie znakov a ich zobrazovanie na displeji, pričom v podmienke while testujeme funkciu tlačidla a oboch senzorov.


Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.  
<source lang="c">
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.  
#define F_CPU 16000000UL //Takt potrebny na vypocet delay z kniznice delay.h
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
 
#include "LCDlibrary.h"
 
//Makra na pracu s bitmi
#define bit(m) ((1<<m))
#define bit_get(p,m) ((p) & bit(m))
#define bit_set(p,m) ((p) |= bit(m))
#define bits_set(p,m) ((p) |= (m))
#define bit_clear(p,m) ((p) &= ~bit(m))
#define bits_clear(p,m) ((p) &= ~(m))
#define bit_flip(p,m) ((p) ^= bit(m))
 
//Makra pre registre
#define DDR(x) (*(&x - 1))
#define PIN(x) (*(&x - 2))
 
//Pre pouzitie pinu PD1 je potrebne zakazat pouzitie UARTu
#define UART_DISABLE() bits_clear(UCSR0B,bit(RXEN0)|bit(TXEN0))
 
//Zapojenie prveho snimaca
#define QTI1_PORT PORTC
#define QTI1_PIN 0
#define QTI1_INIT() bit_set(QTI1_PORT,QTI1_PIN);bit_clear(DDR(QTI1_PORT),QTI1_PIN)
 
//Zapojenie druheho snimaca
#define QTI2_PORT PORTC
#define QTI2_PIN 1
#define QTI2_INIT() bit_set(QTI2_PORT,QTI2_PIN);bit_clear(DDR(QTI2_PORT),QTI2_PIN)
 
//Pouzite tlacidlo
#define PB_PORT PORTD
#define PB_PIN 7
 
//Pomocne funkcie na spustenie a zastavenie casovaca
#define TIMER_STOP() bits_clear(TCCR0B,(bit(CS02)|bit(CS01)|bit(CS00)));TCNT0=0
#define TIMER_START() TCNT0+=5;bits_set(TCCR0B,(bit(CS01)|bit(CS00)))
 
//Premenna pole obsahujuca prvky typu char, zobrazenie znakov na display
char zobraz[8]={0};


Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
volatile uint32_t milisekunda;
int QTI1_stav(void)
{
//Citanie logickych urovni z prveho snimaca
if (bit_get(PIN(QTI1_PORT),QTI1_PIN))return 0; //Ak je na pine log 1, pred snimacom sa nic nenachadza
else return 1; //V pripade ze je pred snimacom prekazka, snimac ma log 0
}


<source lang="c">
int QTI2_stav(void)
/* A nezabudnite zdroják hojne komentovať  */
{
//Citanie logickych urovni z druheho snimaca
if (bit_get(PIN(QTI2_PORT),QTI2_PIN))return 0;
else return 1;
}


int main(void) {
//Funkcia na obsluhu tlacidla
   
uint8_t PushButton()
    printf("Hello, World!\n");
{
    return(0);
bit_clear(DDR(PB_PORT),PB_PIN); //Nastavenie tlacidla na vstup
uint8_t stav=0xFF; //Nestlacene tlacidlo
for(uint8_t i=0;i<5;i++)
{
stav &= bit_get(PIN(PB_PORT),PB_PIN); //Citanie hodnoty na pine tlacidla
_delay_ms(5); //Osetrenie tlacidla na zakmity
}
bit_set(DDR(PB_PORT),PB_PIN); //Nastavenie portu na vystup pre pouzitie displaya
return(stav); //Vysledny stav tlacidla
}
}
int main(void)
{
//Inicializacne funkcie
UART_DISABLE();
QTI1_INIT();
QTI2_INIT();
lcd_init();
//Odoslanie znakov na display na pozadovane suradnice
lcd_puts_addr(0,"Meranie");
lcd_puts_addr(0x40,"intervalov");
_delay_ms(500);
//Rotovanie displaya do lava, pretoze pouzite slovo je mimo rozsahu
for (uint8_t i=0;i<10;i++)
{
lcd_command(LCD_MOVE_DISP_LEFT);
_delay_ms(200);
}
lcd_clrscr(); //Mazanie displaya
lcd_puts_addr(0,"T:");
bit_set(TIMSK0,TOIE0); //Povolenie prerusenia Casovaca 0
sei(); //Globalne povolenie prerusenia
    while(1)
    {
//Testovanie stlacenia tlacidla
if (PushButton())
{
milisekunda=0; //Po stlaceni tlacidla sa premenna nuluje
lcd_clrscr(); //A obrazovka sa znova nastavi pre dalsie meranie
lcd_puts("Restart");
_delay_ms(1000);
lcd_clrscr();
lcd_puts("T:");
}
//Testovanie vystupu prveho snimaca, pricom casovac nemoze bezat
//Po prechode objektu pre snimacom sa spusta casovac a nasledne meranie
if (QTI1_stav() && milisekunda==0)
{
TIMER_START();
lcd_puts_addr(2,"Start!");
}
//Testovanie vystupu druheho snimaca, pricom casovac musi bezat
//Zastavenie casovaca po prechode objektu pred snimacom a nasledne zobrazenie nameranej hodnoty v ms
if (QTI2_stav() && milisekunda!=0)
{
TIMER_STOP();
lcd_puts_addr(2,"Koniec");
lcd_puts_addr(0x40,ultoa(milisekunda,zobraz,10));
lcd_puts("ms");
}
//Pocas behu programu sa zobrazuje hodnota milisekund
if (TCCR0B!=0)lcd_puts_addr(0x40,ultoa(milisekunda,zobraz,10));
}
}
//Obsluha prerusenia pre casovac 0
ISR(TIMER0_OVF_vect)
{
TCNT0+=5; //Pre presnejsiu hodnotu (1ms) je potrebne inkrementovat register casovaca
milisekunda++; //premenna obsahujuca pocet milisekund (32bit hodnota)
}
</source>
</source>


Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
Zdrojový kód: [[Médiá:LCDlibrary.h|serial.h]] a [[Médiá:LCDlib.c|main.c]]
 
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]


[[Médiá:MojProgram.c|program.c]]
[[Médiá:Kyvadlo.c|program.c]]


=== Overenie ===
=== Overenie ===
Na používanie našej aplikácie stačí jedno tlačidlo (viď. obrázok). Je naprogramované tak, aby vykonávalo funkciu štart a reset zároveň.Celý postup pouźívania je veľmi jednoduchý, ktorý sme už podrobnejšie opísali v sekcii "riešenie problému".


Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí,
[[Súbor:photo.jpg]]    [[Súbor:1536492_10201275126824895_2090830653_n.jpg|560px|]]
ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje).
Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji,
odfotografujte ho.  


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




[[Category:AVR]] [[Category:DVPS]]
[[Category:AVR]] [[Category:DVPS]]

Aktuálna revízia z 20:26, 10. január 2014

Autori: Juraj Paulen, Radovan Vojvoda
Študijný odbor: Aplikovaná mechatronika 2. Ing. (2013)

Zadanie

C. Meranie krátkych intervalov.

Na doske Acrob s LCD displejom treba merať čas medzi dvoma udalosťami, ktoré bude predstavovať zopnutie snímačov QTI. Príkladom aplikácie môže byť meranie doby voľného pádu alebo doba kyvu kyvadla. Synchronizácia (štart) merania tlačidlom. K zapojeniu treba vypracovať dokumentáciu, popis programu, schému zapojenia displeja a riadiacej jednotky.

Literatúra:


Analýza použitých komponentov

Display

Vlastnosti:

 - 2x8 LCD Displej bez podsvietenia
 - 4 Tlačítka
 - Trimer na zmenu kontrastu
 - Technické parametre:
 - Napájanie: 5 V @ 15 mA
 - Pripojenie: 4-Bit parallel interface (Hitachi HD44780 compatible)
 - Rozmery: 60 x 50 x 20 mm
 - Pracovná teplota: 0 až +70 °C

Schéma zapojenia:

Snímač

Vlastnosti:

 - Detekuje rozdiely medzi svetlými a tmavými objektami
 - Detekuje relatívnu vzdialenosť k objektu
 - Funguje ako analógový senzor, ale môže byť pripojený na digitálne I/O rozhranie

Funkcia:

QTI Sensor používa infračervené svetlo emitujúcej diódy a infračervený fototranzistor poskytujúci bezkontaktnú detekciu objektov. Emitované svetlo z LED diódy sa odrazí od povrchu daného objektu, a je následne detekované fototranzistorom. Podľa toho ako veľmi je infračervené svetlo odrazené od objektu dokážeme odhadnúť jeho vzdialenosť od senzora. Senzor dokáže rozlišovať svetlé a tmavé plochy, ako sú napríklad čierne čiary na papieri.

QTI snímač sa aktivuje tým, že sa privedie 5 V (VDD) na W pin. To spôsobí, že prúd preteká cez 470 ohm rezistor do LED. Infračervené svetlo odrážajúce od povrchu spôsobí zmenu prúdu ktorý preteká fototranzistorom. Tranzistor sa v skutočnosti chová ako IR riadený odpor.

Schéma zapojenia:

Vývojová doska Acrob

Na riešenie zadania bola použitá vývojová doska Acrob vytvorená na Slovenskej technickej univerzite v Bratislave:

http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/S%C3%BAbor:AcrobBoard.png

http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob

Popis riešenia

Pripojenie k procesoru

Na W pin sme priviedli napájacie napätie 5V, pin R sme zapojili na pozíciu D3 a pin B na GND. Medzi pozíciami W a R je potrebné zapojiť odpor s veľkosťou 10kΩ.

Schéma zapojenia:


Využité periféria:

- LCD Displej
- 4 programovacie tlačidlá

Rozhranie typu UART bolo potrebné zakázať, aby bolo možné použiť pin PD1.


Riešenie problému:

Na doske Acrob s LCD displejom sme mali merať čas medzi dvoma snímačmi, ktoré budú merať časový okamih od prechodu objektu cez prvý snímač (t1) až po prechod objektu cez druhý snímač (t2). Ako štartovacie resp. reštartovacie tlačidlo sme si zvolili posledné štvrté tlačidlo. Po nahratí programu sa nám na LCD displaji objaví text “Meranie intervalov”. Kedže tento text je príliš dlhý , aby sa zmestil do jedného riadku , pomocou cyklu FOR sme nastavili pohyblivý text, ktorý sa nám bude na displeji rotovať. Po zatlačení už spomínaného tlačidla sa nám displeji zobrazí text “Restart” aj s malým oneskorením na to text “T:”. Následné meranie začína po prechode objektu pred snímačom sa spúšťa časovač Meranie končí po prechode objektu pred snímačom a následne je nameraný čas zobrazený na displeji. Časový okamih je v milisekundách (ms) a minimálna hodnota nameraného časového okamihu je 1 ms.

Algoritmus a program

Program sme riešili v jazyku C v programovacom prostredí AVR Atmel Studio 6.0. Ako prvé bolo potrebné zadefinovanie potrebných knižníc, taktu procesora ktorý nám slúži na výpočet delay z knižnice delay.h a hlavičkových súborov na správnu funkciu LCD displeja. Následne sme riešili nastavenie portov slúžiacich na funkciu zapojených senzorov. Na správne snímanie objektov pred senzormi sme v hlavnom programe riešili čítanie logických úrovní. Ak sa pred snímačom nachádza prekážka, príslušný port sa prepne na log. 0 a naopak ak sa pred snímačom nenachádza prekážka, je nastavený na 1. Ďalšia časť programu je orientovaná na obsluhu tlačidla, pomocou ktorého dosiahneme reštartovanie merania. Vo funkcií main sme riešili správne odosielanie znakov a ich zobrazovanie na displeji, pričom v podmienke while testujeme funkciu tlačidla a oboch senzorov.

#define F_CPU 16000000UL			//Takt potrebny na vypocet delay z kniznice delay.h
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>

#include "LCDlibrary.h"

//Makra na pracu s bitmi
#define bit(m)		((1<<m))
#define bit_get(p,m) ((p) & bit(m))
#define bit_set(p,m) ((p) |= bit(m))
#define bits_set(p,m)	((p) |= (m))
#define bit_clear(p,m) ((p) &= ~bit(m))
#define bits_clear(p,m) ((p) &= ~(m))
#define bit_flip(p,m) ((p) ^= bit(m))

//Makra pre registre
#define DDR(x) (*(&x - 1))
#define PIN(x) (*(&x - 2))

//Pre pouzitie pinu PD1 je potrebne zakazat pouzitie UARTu
#define UART_DISABLE() bits_clear(UCSR0B,bit(RXEN0)|bit(TXEN0))

//Zapojenie prveho snimaca
#define QTI1_PORT	PORTC
#define QTI1_PIN	0
#define QTI1_INIT() bit_set(QTI1_PORT,QTI1_PIN);bit_clear(DDR(QTI1_PORT),QTI1_PIN)

//Zapojenie druheho snimaca
#define QTI2_PORT	PORTC
#define QTI2_PIN	1
#define QTI2_INIT() bit_set(QTI2_PORT,QTI2_PIN);bit_clear(DDR(QTI2_PORT),QTI2_PIN)

//Pouzite tlacidlo
#define PB_PORT PORTD
#define PB_PIN	7

//Pomocne funkcie na spustenie a zastavenie casovaca
#define TIMER_STOP() bits_clear(TCCR0B,(bit(CS02)|bit(CS01)|bit(CS00)));TCNT0=0
#define TIMER_START() TCNT0+=5;bits_set(TCCR0B,(bit(CS01)|bit(CS00)))

//Premenna pole obsahujuca prvky typu char, zobrazenie znakov na display
char zobraz[8]={0};

volatile uint32_t milisekunda;
	
int QTI1_stav(void)
{
	//Citanie logickych urovni z prveho snimaca
	if (bit_get(PIN(QTI1_PORT),QTI1_PIN))return 0;	//Ak je na pine log 1, pred snimacom sa nic nenachadza
	else return 1;					//V pripade ze je pred snimacom prekazka, snimac ma log 0
}

int QTI2_stav(void)
{
	//Citanie logickych urovni z druheho snimaca
	if (bit_get(PIN(QTI2_PORT),QTI2_PIN))return 0;
	else return 1;
}

//Funkcia na obsluhu tlacidla
uint8_t PushButton()
{
	bit_clear(DDR(PB_PORT),PB_PIN);					//Nastavenie tlacidla na vstup
	uint8_t stav=0xFF;						//Nestlacene tlacidlo 
	for(uint8_t i=0;i<5;i++)
	{
		stav &= bit_get(PIN(PB_PORT),PB_PIN);		//Citanie hodnoty na pine tlacidla
		_delay_ms(5);					//Osetrenie tlacidla na zakmity
	}
	bit_set(DDR(PB_PORT),PB_PIN);					//Nastavenie portu na vystup pre pouzitie displaya
	return(stav);							//Vysledny stav tlacidla
}
int main(void)
{
	//Inicializacne funkcie
	UART_DISABLE();
	QTI1_INIT();
	QTI2_INIT();
	lcd_init();
	//Odoslanie znakov na display na pozadovane suradnice
	lcd_puts_addr(0,"Meranie");
	lcd_puts_addr(0x40,"intervalov");
	_delay_ms(500);
	//Rotovanie displaya do lava, pretoze pouzite slovo je mimo rozsahu 
	for (uint8_t i=0;i<10;i++)
	{
		lcd_command(LCD_MOVE_DISP_LEFT);
		_delay_ms(200);
	}
	lcd_clrscr();									//Mazanie displaya
	lcd_puts_addr(0,"T:");
	
	bit_set(TIMSK0,TOIE0);							//Povolenie prerusenia Casovaca 0	
	sei();									//Globalne povolenie prerusenia
	
    while(1)
    {
		//Testovanie stlacenia tlacidla
		if (PushButton())
		{
			milisekunda=0;							//Po stlaceni tlacidla sa premenna nuluje
			lcd_clrscr();							//A obrazovka sa znova nastavi pre dalsie meranie	
			lcd_puts("Restart");
			_delay_ms(1000);
			lcd_clrscr();
			lcd_puts("T:");
		}
		//Testovanie vystupu prveho snimaca, pricom casovac nemoze bezat
		//Po prechode objektu pre snimacom sa spusta casovac a nasledne meranie
		if (QTI1_stav() && milisekunda==0)
		{	
			TIMER_START();
			lcd_puts_addr(2,"Start!");
		}
		//Testovanie vystupu druheho snimaca, pricom casovac musi bezat
		//Zastavenie casovaca po prechode objektu pred snimacom a nasledne zobrazenie nameranej hodnoty v ms
		if (QTI2_stav() && milisekunda!=0)
		{
			TIMER_STOP();
			lcd_puts_addr(2,"Koniec");
			lcd_puts_addr(0x40,ultoa(milisekunda,zobraz,10));
			lcd_puts("ms");
		}
		//Pocas behu programu sa zobrazuje hodnota milisekund
		if (TCCR0B!=0)lcd_puts_addr(0x40,ultoa(milisekunda,zobraz,10));
		
		
	}
}
//Obsluha prerusenia pre casovac 0
ISR(TIMER0_OVF_vect)
{
	TCNT0+=5;						//Pre presnejsiu hodnotu (1ms) je potrebne inkrementovat register casovaca
	milisekunda++;						//premenna obsahujuca pocet milisekund (32bit hodnota)
}

Zdrojový kód: serial.h a main.c

program.c

Overenie

Na používanie našej aplikácie stačí jedno tlačidlo (viď. obrázok). Je naprogramované tak, aby vykonávalo funkciu štart a reset zároveň.Celý postup pouźívania je veľmi jednoduchý, ktorý sme už podrobnejšie opísali v sekcii "riešenie problému".