Riadenie križovatky: Rozdiel medzi revíziami
Zo stránky SensorWiki
| Bez shrnutí editace | Bez shrnutí editace | ||
| Riadok 4: | Riadok 4: | ||
| == Zadanie == | == Zadanie == | ||
| Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov. | Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov na doske ACROB. | ||
| [[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]] | [[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]] | ||
| Riadok 19: | Riadok 19: | ||
| == Analýza  a opis riešenia == | == 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. | |||
| [[Súbor:semaforluky.jpg|400px|thumb|center| LED semafor | [[Súbor:semaforluky.jpg|400px|thumb|center| LED semafor]] | ||
| Schéma zapojenia | |||
| [[Súbor:lukyschema1.png|400px|thumb|center|Schéma zapojenia LEDiek semafora a tlačidla.]] | [[Súbor:lukyschema1.png|400px|thumb|center|Schéma zapojenia LEDiek semafora a tlačidla.]] | ||
| Riadok 36: | Riadok 36: | ||
| <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | ||
| #include <avr/io.h> | #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();    | |||
|         // Blikání ostatních LED | |||
|         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'':   | Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':   | ||
Verzia z 12:17, 29. 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....
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
- 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();
	
	
       // Blikání ostatních LED
       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.