Operácie

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

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Riadok 34: Riadok 34:


<tabs>
<tabs>
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="main.c"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#define F_CPU 16000000UL
#define BAUD 9600
 
#include <avr/io.h>
#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)
int main(void)
{
{
  unsigned int measuredValue;
    /* 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;


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


  return(0);
    return 0;
}
}


</syntaxhighlight ></tab>
</syntaxhighlight ></tab>
<tab name="filename.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#include <avr/io.h>


void adc_init(void);                                  // A/D converter initialization
unsigned int adc_read(char a_pin);
</syntaxhighlight ></tab>
</tabs>
</tabs>



Verzia z 16:50, 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: zdrojaky.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.