Operácie

Riadenie križovatky: Rozdiel medzi revíziami

Z SensorWiki

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 ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
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]]
  
Nezabudnite doplniť schému zapojenia!
+
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>
  
int main(void)
+
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
{
+
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
  unsigned int measuredValue;
 
  
  while (1)
+
#define ZELENA PD5
  {
+
#define ZLTA PD4
    /*  relax  */ 
+
#define CERVENA PD2
  }
+
#define ZELENA2 PC2
 +
#define ZLTA2 PC1
 +
#define CERVENA2 PC0
 +
#define CERVENA3 PC3
 +
#define ZELENA3 PC4
 +
#define SW PB0
  
  return(0);
+
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();
  
</source></tab>
+
    PCMSK0 |= (1<<PCINT0);
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
PCICR |= (1<<PCIE0);
#include <avr/io.h>
+
 
 +
 
  
void adc_init(void);                                   // A/D converter initialization
+
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);
 +
       
 +
    }
  
unsigned int adc_read(char a_pin);
+
    return 0;
</source></tab>
+
}
</tabs>
 
  
 
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 zo dňa a času 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.

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.