Operácie

Zámok na kód II.: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 184: Riadok 184:
</tabs>
</tabs>


 
</tabs>
<tab name="uart.c"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="uart.c"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#include <avr/io.h>
#include <avr/io.h>
Riadok 213: Riadok 213:
     }
     }
}
}
 
</syntaxhighlight ></tab>
</tabs>





Verzia z 13:16, 30. apríl 2026

Záverečný projekt predmetu MIPS / LS2026 - Meno Priezvisko


Zámok na kód II.

Mojou úlohou bolo pracovať so vstupmi vo forme tlačidiel a na základe ich postupného stláčania vytvoriť sekvenciu, ktorú systém vyhodnocuje. Program sleduje poradie stlačených tlačidiel a po zadaní celej sekvencie ho porovná s vopred definovaným správnym kódom. V prípade správneho zadania sa rozsvieti žltá LED dióda, pri nesprávnom zadaní sa rozsvieti červená LED dióda.

Mapovanie pinov mikrokontroléra ATmega328P na vývojovej doske Arduino Uno

Literatúra:


Analýza a opis riešenia

Moje riešenie bolo zamerané na spracovanie vstupov z tlačidiel a vyhodnotenie ich postupného stláčania vo forme sekvencie. Použité boli štyri tlačidlá pripojené na digitálne piny D12, D8, D5 a D2. Program zaznamenáva poradie stlačení a po zadaní štyroch hodnôt ho porovnáva s vopred definovanou sekvenciou.

Na signalizáciu výsledku boli použité dve LED diódy. Žltá LED sa rozsvieti pri správnom zadaní, zatiaľ čo červená LED krátko zabliká pri nesprávnom zadaní. Tlačidlá sú nastavené ako vstupy s internými pull-up rezistormi. Program obsahuje aj jednoduchú UART komunikáciu, ktorá po vyhodnotení vypíše "spravny kod" alebo "nespravny kod".


Použité súčiastky:


Tlačidlá

4 Tlačidlá

LED Diódy

LED diódy červená a žltá

Rezistor 220Ω

Rezistor 220Ω


Opis schémy

Základom obvodu je Arduino Uno. V zapojení sa nachádzajú aj dve LED diódy. Každá LED dióda má v sérii zapojený rezistor s odporom 220 Ω. Tieto rezistory slúžia na obmedzenie elektrického prúdu, aby nedošlo k vypáleniu diód alebo poškodeniu pinov Arduina. LED diódy Slúžia nám ako výstupy.

V obvode sú štyri tlačidlá (Tlačidlo 1 až 4), ktoré slúžia ako používateľský vstup. Sú pripojené k digitálnym pinom D12, D8, D5 a D2. Pri každom tlačidle vidíme rezistor s odporom 220 Ω pripojený k napájaniu. Toto zapojenie zabezpečuje definovanú logickú úroveň na pine Arduina (logickú 1), kým nie je tlačidlo stlačené. Po stlačení sa pin prepojí so zemou (GND) a hodnota sa zmení na logickú 0.

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

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

// tlačidlá
#define BTN_D12 PB4
#define BTN_D8  PB0
#define BTN_D5  PD5
#define BTN_D2  PD2

// LED
#define LED_YELLOW PB5   // D13
#define LED_RED    PB3   // D11

int read_button(void)
{
    if (!(PINB & (1 << BTN_D12))) return 12;
    if (!(PIND & (1 << BTN_D5)))  return 5;
    if (!(PIND & (1 << BTN_D2)))  return 2;
    if (!(PINB & (1 << BTN_D8)))  return 8;

    return 0;
}

void wait_release(void)
{
    while (read_button() != 0);
    _delay_ms(150);
}

int main(void)
{
    uart_init();

    int correct[4] = {12, 5, 2, 8};
    int entered[4];
    int index = 0;
    int button;
    int i;
    int ok;

    // LED výstupy
    DDRB |= (1 << LED_YELLOW);
    DDRB |= (1 << LED_RED);

    // tlačidlá vstupy
    DDRB &= ~(1 << BTN_D12);
    DDRB &= ~(1 << BTN_D8);
    DDRD &= ~(1 << BTN_D5);
    DDRD &= ~(1 << BTN_D2);

    // pull-up rezistory
    PORTB |= (1 << BTN_D12);
    PORTB |= (1 << BTN_D8);
    PORTD |= (1 << BTN_D5);
    PORTD |= (1 << BTN_D2);

    // LED vypnúť
    PORTB &= ~(1 << LED_YELLOW);
    PORTB &= ~(1 << LED_RED);

    while (1)
    {
        button = read_button();

        if (button != 0)
        {
            _delay_ms(80); // debounce

            if (read_button() == button)
            {
                entered[index] = button;
                index++;

                wait_release();

                if (index == 4)
                {
                    ok = 1;

                    for (i = 0; i < 4; i++)
                    {
                        if (entered[i] != correct[i])
                        {
                            ok = 0;
                        }
                    }

                    if (ok == 1)
                    {
                        uart_puts("spravny kod\r\n");

                        PORTB |= (1 << LED_YELLOW);
                        _delay_ms(4000);
                        PORTB &= ~(1 << LED_YELLOW);
                    }
                    else
                    {
                        uart_puts("nespravny kod\r\n");

                        PORTB |= (1 << LED_RED);
                        _delay_ms(700);
                        PORTB &= ~(1 << LED_RED);
                    }

                    index = 0;
                }
            }
        }
    }
}
#ifndef UART_H_
#define UART_H_

#define F_CPU 16000000UL
#define BAUD 9600

void uart_init(void);
void uart_putc(char c);  //vypis spravny/nespravny kod
void uart_puts(const char *s); // chcel som pridať este  ak kliknem D12 tak mi vypise ake tlacidlo som stlacil ale v main kode som to nepouzil

#endif

</tabs>

#include <avr/io.h>
#include "uart.h"

void uart_init(void)
{
    // 9600 baud pre 16 MHz
    UBRR0H = 0;
    UBRR0L = 103;

    UCSR0B = (1 << RXEN0) | (1 << TXEN0); // enable RX TX
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bit data
}

void uart_putc(char c)  //sluzy na vypis spravny/nespravny
{
    while (!(UCSR0A & (1 << UDRE0)));
    UDR0 = c;
}

void uart_puts(const char *s)  //nepouzivam v main
{
    while (*s)
    {
        uart_putc(*s);
        s++;
    }
}

</tabs>


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.