Hracia kocka s LED: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 65: | Riadok 65: | ||
</syntaxhighlight ></tab> | </syntaxhighlight ></tab> | ||
<tab name="filename.h"><syntaxhighlight lang="c++" style="background: LightYellow;"> | <tab name="filename.h"><syntaxhighlight lang="c++" style="background: LightYellow;"> | ||
#define F_CPU 16000000UL | |||
#include <avr/io.h> | #include <avr/io.h> | ||
#include <util/delay.h> | |||
#include <stdlib.h> | |||
void | void setup() { | ||
DDRB |= (1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0); | |||
DDRD |= (1 << PD7) | (1 << PD6) | (1 << PD5); | |||
DDRD &= ~(1 << PD4); // PD0 ??? ???? | |||
</ | PORTD |= (1 << PD4); // ???????? ???????? | ||
srand(ADC); // ????????????? ?????????? ????????? ????? | |||
} | |||
void clear_leds() { | |||
PORTB &= ~((1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0)); | |||
PORTD &= ~((1 << PD7) | (1 << PD6) | (1 << PD5)); | |||
} | |||
void set_leds(uint8_t number) { | |||
clear_leds(); | |||
switch (number) { | |||
case 1: | |||
PORTD |= (1 << PD6); | |||
break; | |||
case 2: | |||
PORTB |= (1 << PB5); | |||
PORTD |= (1 << PD5); | |||
break; | |||
case 3: | |||
PORTB |= (1 << PB0) | (1 << PB3); | |||
PORTD |= (1 << PD6); | |||
break; | |||
case 4: | |||
PORTB |= (1 << PB5) | (1 << PB3) | (1 << PB0); | |||
PORTD |= (1 << PD5); | |||
break; | |||
case 5: | |||
PORTB |= (1 << PB5) | (1 << PB3) | (1 << PB0); | |||
PORTD |= (1 << PD5) | (1 << PD6); | |||
break; | |||
case 6: | |||
PORTB |= (1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0); | |||
PORTD |= (1 << PD5) | (1 << PD7); | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
int main(void) { | |||
setup(); | |||
uint8_t last_button = 1; | |||
while (1) { | |||
uint8_t button_state = (PIND & (1 << PD4)) == 0; | |||
if (button_state && last_button) { | |||
uint8_t rand_num = (rand() % 6) + 1; // ?? 1 ?? 6 | |||
set_leds(rand_num); | |||
_delay_ms(200); // ??????????? | |||
} | |||
last_button = button_state; | |||
} | |||
}> | |||
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'': | Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'': |
Verzia z 23:23, 23. jún 2025
Záverečný projekt predmetu MIPS / LS2025 - Ilona Baihildina
Zadanie
V tomto projekte používam mikrokontrolér ATmega328P, ku ktorému je pripojených 7 LED diód a jedno tlačidlo. LED diódy sú pripojené k portom B a D. Po stlačení tlačidla sa vygeneruje náhodné číslo od 1 do 6 a podľa toho sa rozsvietia presne definované kombinácie LED diód. Po zapnutí zariadenia a stlačení tlačidla sa zobrazí nové náhodné číslo prostredníctvom svietenia konkrétnych LED diód. Každé číslo má vlastnú unikátnu kombináciu svietiacich diód. Projekt demonštruje prácu s náhodnými číslami, digitálnymi výstupmi a čítaním stavu tlačidla v jazyku C v prostredí AVR Studio.

Literatúra:
Analýza a opis riešenia
• LED diódy sú nakonfigurované ako výstupné piny pomocou DDRx registrov. • Tlačidlo je pripojené na vstupný pin PD0, so zapnutým vnútorným pull-up rezistorom. • Kód využíva funkciu srand() na inicializáciu generovania náhodných hodnôt a rand() na výber čísla. • Každé číslo je ošetrené cez switch-case, kde sa podľa hodnoty nastavujú výstupné stavy na jednotlivé piny. • Pridaný je aj jednoduchý anti-drebezgový delay (200 ms) po každom stlačení tlačidla.
Použité komponenty
• 1× mikrokontrolér ATmega328P • 7× LED dióda (ľubovoľnej farby) • 7× rezistor 220–330 Ω (zapojené v sérii s LED diódami) • 1× tlačidlo (spínač, push-button) • 1× doska s prepojeniami (breadboard) – nepájivé pole • Prepojovacie vodiče (jumper wires) – muž–muž • Zdroj napájania (napr. cez USB alebo externý 5V adaptér) • (voliteľne) Kondenzátor a externý oscilátor 16 MHz – ak nepoužívaš Arduino Uno a máš čistý čip

Každá LED dióda je zapojená cez rezistor do výstupného pinu mikrokontroléra a druhou stranou do GND. Tlačidlo je zapojené medzi pin PD0 a GND, pričom v kóde je aktivovaný interný pull-up rezistor.

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...
<tabs>
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
<tab name="filename.h"><syntaxhighlight lang="c++" style="background: LightYellow;">
- define F_CPU 16000000UL
- include <avr/io.h>
- include <util/delay.h>
- include <stdlib.h>
void setup() { DDRB |= (1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0); DDRD |= (1 << PD7) | (1 << PD6) | (1 << PD5);
DDRD &= ~(1 << PD4); // PD0 ??? ???? PORTD |= (1 << PD4); // ???????? ????????
srand(ADC); // ????????????? ?????????? ????????? ????? }
void clear_leds() { PORTB &= ~((1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0)); PORTD &= ~((1 << PD7) | (1 << PD6) | (1 << PD5)); }
void set_leds(uint8_t number) { clear_leds();
switch (number) { case 1: PORTD |= (1 << PD6); break; case 2: PORTB |= (1 << PB5); PORTD |= (1 << PD5); break; case 3: PORTB |= (1 << PB0) | (1 << PB3); PORTD |= (1 << PD6); break; case 4: PORTB |= (1 << PB5) | (1 << PB3) | (1 << PB0); PORTD |= (1 << PD5); break; case 5: PORTB |= (1 << PB5) | (1 << PB3) | (1 << PB0); PORTD |= (1 << PD5) | (1 << PD6); break; case 6: PORTB |= (1 << PB5) | (1 << PB4) | (1 << PB3) | (1 << PB0); PORTD |= (1 << PD5) | (1 << PD7); break; default: break; } }
int main(void) { setup();
uint8_t last_button = 1;
while (1) { uint8_t button_state = (PIND & (1 << PD4)) == 0;
if (button_state && last_button) { uint8_t rand_num = (rand() % 6) + 1; // ?? 1 ?? 6 set_leds(rand_num); _delay_ms(200); // ??????????? }
last_button = button_state; } }>
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.

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