Operácie

Interaktívna lampička I: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 156: Riadok 156:
</syntaxhighlight ></tab>
</syntaxhighlight ></tab>


<tab name="uart.c"><syntaxhighlight  lang="c++" style="background: LightYellow;">
</syntaxhighlight ></tab>
<tab name="uart.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
</syntaxhighlight ></tab>
</tabs>
</tabs>



Verzia z 17:12, 4. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Matúš Grúň


Zadanie

Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.

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

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


#define F_CPU 16000000UL
#define BAUD 9600

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "uart.h"

/* --- piny --- */
#define MIC  PD7
#define R_LED PD6
#define G_LED PD5

/* --- casovanie --- */
#define DEBOUNCE 200
#define OKNO     1500

/* --- makra z uart.h --- */
/* set_bit / clear_bit su uz v uart.h, nepridavaj znova */

FILE uart_out = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);

/* --- globalne premenne --- */
uint8_t  pocet       = 0;
uint8_t  aktivny     = 0;
uint8_t  cervena     = 0;
uint8_t  zelena      = 0;
uint8_t  mic_pred    = 0;
uint32_t t_posledny  = 0;
uint32_t ms          = 0;   /* citac milisekund */

/* --- aktualizuj LEDky --- */
void nastav_led(void)
{
    if (cervena) set_bit(PORTD, R_LED);
    else        clear_bit(PORTD, R_LED);

    if (zelena)  set_bit(PORTD, G_LED);
    else        clear_bit(PORTD, G_LED);
}

/* --- vyhodnotenie tleskov --- */
void vyhodnot(void)
{
    printf("tlesky: %d\r\n", pocet);

    if (pocet == 3) {
        aktivny = !aktivny;
        if (aktivny) {
            cervena = 1;
            zelena  = 1;
            nastav_led();
            printf(">> AKTIVNY - obe LED zapnute\r\n");
        } else {
            cervena = 0;
            zelena  = 0;
            nastav_led();
            printf(">> USPENY - obe LED zhasnute\r\n");
        }
    }
    else if (aktivny) {
        if (pocet == 1) {
            cervena = !cervena;
            printf(">> cervena: %s\r\n", cervena ? "ON" : "OFF");
        }
        if (pocet == 2) {
            zelena = !zelena;
            printf(">> zelena: %s\r\n", zelena ? "ON" : "OFF");
        }
        nastav_led();
    }
    else {
        printf(">> system spi, ignorujem\r\n");
    }

    pocet = 0;
}

int main(void)
{
    /* nastavenie pinov */
    set_bit(DDRD, R_LED);    /* vystup - cervena */
    set_bit(DDRD, G_LED);    /* vystup - zelena  */
    clear_bit(DDRD, MIC);    /* vstup  - mikrofon */

    clear_bit(PORTD, R_LED);
    clear_bit(PORTD, G_LED);

    uart_init();
    stdout = &uart_out;
    printf("system USPENY. 3x tlesk = zapni\r\n");

    while (1)
    {
        _delay_ms(1);
        ms++;

        uint8_t mic_teraz = bit_is_set(PIND, MIC) ? 1 : 0;

        /* nabezna hrana + debounce */
        if (mic_teraz == 1 && mic_pred == 0) {
            if ((ms - t_posledny) > DEBOUNCE) {
                pocet++;
                t_posledny = ms;
                printf("tlesk #%d\r\n", pocet);
            }
        }

        mic_pred = mic_teraz;

        /* po uplynutí okna vyhodno? */
        if (pocet > 0 && (ms - t_posledny) > OKNO) {
            vyhodnot();
        }
    }

    return 0;
}

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: Interaktivna lampa 1.zip

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. Na konci uvádzame fotku hotového zariadenia.

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.