Riadenie križovatky: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
(3 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.) | |||
Riadok 65: | Riadok 65: | ||
set_bit(DDRC, CERVENA3); | set_bit(DDRC, CERVENA3); | ||
// Nastavenie pinu SW ako vstupu s pull-up rezistorom | // Nastavenie pinu SW ako vstupu s pull-up rezistorom | ||
set_bit(PORTB, SW); | set_bit(PORTB, SW); | ||
} | } | ||
ISR(PCINT0_vect) { | ISR(PCINT0_vect) { | ||
Riadok 92: | Riadok 86: | ||
int main() { | int main() { | ||
inicializacia(); | inicializacia(); | ||
PCMSK0 |= (1<<PCINT0); | PCMSK0 |= (1<<PCINT0); | ||
PCICR |= (1<<PCIE0); | |||
sei(); | |||
while(1) { | while(1) { | ||
set_bit(PORTD, ZELENA); | set_bit(PORTD, ZELENA); | ||
set_bit(PORTC, CERVENA2); | set_bit(PORTC, CERVENA2); | ||
set_bit(PORTC, CERVENA3) | set_bit(PORTC, CERVENA3); | ||
_delay_ms(3500); | _delay_ms(3500); | ||
set_bit(PORTD, ZLTA); | set_bit(PORTD, ZLTA); | ||
Riadok 117: | Riadok 102: | ||
clear_bit(PORTD, ZLTA); | clear_bit(PORTD, ZLTA); | ||
_delay_ms(1000); | _delay_ms(1000); | ||
set_bit(PORTC, ZELENA3) | set_bit(PORTC, ZELENA3); | ||
clear_bit(PORTC, CERVENA3) | clear_bit(PORTC, CERVENA3); | ||
set_bit(PORTC, ZELENA2); | set_bit(PORTC, ZELENA2); | ||
clear_bit(PORTC, CERVENA2); | clear_bit(PORTC, CERVENA2); | ||
clear_bit(PORTC, ZLTA2); | clear_bit(PORTC, ZLTA2); | ||
_delay_ms(3500); | _delay_ms(3500); | ||
set_bit(PORTC, CERVENA3) | set_bit(PORTC, CERVENA3); | ||
clear_bit(PORTC, ZELENA3); | clear_bit(PORTC, ZELENA3); | ||
set_bit(PORTC, ZLTA2); | set_bit(PORTC, ZLTA2); | ||
Riadok 152: | Riadok 137: | ||
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas. | Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas. | ||
[[Súbor: | [[Súbor:lukyyy.jpg|400px|thumb|center|Aplikácia.]] | ||
'''Video:''' | '''Video:''' | ||
<center><youtube> | <center><youtube>https://youtu.be/Nq93dwdAcpc?si=MjijKgg95Q2sI4aE</youtube></center> | ||
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | ||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] |
Verzia z 11:36, 30. apríl 2024
Záverečný projekt predmetu MIPS / LS2024 - Lukáš Kudláč
Zadanie
Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov na doske ACROB.
Literatúra:
Analýza a opis riešenia
Každú LEDku a aj tlačidlo som pripojil na samostatný pin mikroprocesora. Prvý semafor som zapojil do pinov ako výstup nasledovne:PD5 zelená LED, PD3 žltá LED, PD2 červená LED.Druhý semafor som zapojil do pinov ako výstup nasledovne:PC2 zelená LED, PC1 žltá LED, PC0 červená LED. Semafor pre chodcov som zapojil ako dve samostatné LEDky. Červenú ako výstup pinu PC3 a zelenú ako výstup PC4.Tlačidlo je zapojené ako vstup do pinu PB0. Všetky komponenty sú zapojené na zem aby mohol pretekať elektrický prúd.
Schéma zapojenia
Algoritmus a program
Algoritmus programu je....
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define ZELENA PD5
#define ZLTA PD4
#define CERVENA PD2
#define ZELENA2 PC2
#define ZLTA2 PC1
#define CERVENA2 PC0
#define CERVENA3 PC3
#define ZELENA3 PC4
#define SW PB0
volatile uint8_t buttonPressed = 0;
void inicializacia() {
// Nastavenie LED pinov ako výstupných
set_bit(DDRD, ZELENA);
set_bit(DDRD, ZLTA);
set_bit(DDRD, CERVENA);
set_bit(DDRC, ZELENA2);
set_bit(DDRC, ZLTA2);
set_bit(DDRC, CERVENA2);
set_bit(DDRC, ZELENA3);
set_bit(DDRC, CERVENA3);
// Nastavenie pinu SW ako vstupu s pull-up rezistorom
set_bit(PORTB, SW);
}
ISR(PCINT0_vect) {
while(!(PINB & (1 << PB0))){
clear_bit(PORTD, CERVENA);
clear_bit(PORTD, ZELENA);
clear_bit(PORTC, CERVENA2);
clear_bit(PORTC, ZELENA2);
clear_bit(PORTC, CERVENA3);
clear_bit(PORTC, ZELENA3);
set_bit(PORTD, ZLTA);
set_bit(PORTC, ZLTA2);
_delay_ms(1000);
clear_bit(PORTD, ZLTA);
clear_bit(PORTC, ZLTA2);
_delay_ms(1000);
}
}
int main() {
inicializacia();
PCMSK0 |= (1<<PCINT0);
PCICR |= (1<<PCIE0);
sei();
while(1) {
set_bit(PORTD, ZELENA);
set_bit(PORTC, CERVENA2);
set_bit(PORTC, CERVENA3);
_delay_ms(3500);
set_bit(PORTD, ZLTA);
clear_bit(PORTD, ZELENA);
_delay_ms(1000);
set_bit(PORTC, ZLTA2);
set_bit(PORTD, CERVENA);
clear_bit(PORTD, ZLTA);
_delay_ms(1000);
set_bit(PORTC, ZELENA3);
clear_bit(PORTC, CERVENA3);
set_bit(PORTC, ZELENA2);
clear_bit(PORTC, CERVENA2);
clear_bit(PORTC, ZLTA2);
_delay_ms(3500);
set_bit(PORTC, CERVENA3);
clear_bit(PORTC, ZELENA3);
set_bit(PORTC, ZLTA2);
clear_bit(PORTC, ZELENA2);
_delay_ms(1000);
set_bit(PORTD, ZLTA);
set_bit(PORTC, CERVENA2);
clear_bit(PORTC, ZLTA2);
_delay_ms(1000);
set_bit(PORTD, ZELENA);
clear_bit(PORTD, CERVENA);
clear_bit(PORTD, ZLTA);
}
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
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 záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.