Operácie

Riadenie križovatky

Z SensorWiki

Verzia z 12:17, 29. apríl 2024, ktorú vytvoril StudentMIPS (diskusia | príspevky)

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.

Vývojová doska 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.

LED semafor

Schéma zapojenia

Schéma zapojenia LEDiek semafora a tlačidla.


Algoritmus a program

Algoritmus programu je....


<tabs> <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">

  1. include <avr/io.h>
  2. include <avr/interrupt.h>
  3. include <util/delay.h>
  1. define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
  2. define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
  1. define ZELENA PD5
  2. define ZLTA PD4
  3. define CERVENA PD2
  4. define ZELENA2 PC2
  5. define ZLTA2 PC1
  6. define CERVENA2 PC0
  7. define CERVENA3 PC3
  8. define ZELENA3 PC4
  9. 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.

Aplikácia.

Video:

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