0,0 → 1,229 |
// |
// Grottenflieger hat: Nisthakens main.c angepasst auf PCB version 2.2 |
// |
|
#include <avr/io.h> |
#include <util/delay.h> |
#include <stdint.h> |
#include <avr/interrupt.h> |
|
void sleep_ms(uint16_t ms); |
|
#define LED_WS PB2 // LED port 1 |
#define LED_BL PC1 // LED port 2 |
#define LED_BLITZRT PC2 // LED port 3 |
#define LED_BLITZGN PC3 // LED port 4 |
#define LED_PORT5 PC4 // LED port 5 |
#define LED_HINTENGN PC5 // LED port 6 |
#define LED_HINTENRT PD4 // LED port 7 |
#define LED_VORNEGN PD5 // LED port 8 |
#define LED_UNTENGB PD6 // LED port 9 |
#define LED_VORNERT PD7 // LED port 10 |
#define LED_STATUS PB0 // LED blau - on board |
|
#define STATUS_OFF PORTB |= (1<<LED_STATUS) //Den Portpin auf high setzen |
#define STATUS_ON PORTB &= ~(1<<LED_STATUS) //Den Portpin auf low setzen |
#define STATUS_TOGGLE PORTB ^= ~(1<<LED_STATUS) //Den Portpin toggeln |
|
#define WEISS_ON PORTB |= (1<<LED_WS) //Den Portpin auf high setzen |
#define WEISS_OFF PORTB &= ~(1<<LED_WS) //Den Portpin auf low setzen |
|
#define PORT5_ON PORTC |= (1<<LED_PORT5) //Den Portpin auf high setzen |
#define PORT5_OFF PORTC &= ~(1<<LED_PORT5) //Den Portpin auf low setzen |
|
#define BLITZGN_ON PORTC |= (1<<LED_BLITZGN) //Den Portpin auf high setzen |
#define BLITZGN_OFF PORTC &= ~(1<<LED_BLITZGN) //Den Portpin auf low setzen |
#define BLITZRT_ON PORTC |= (1<<LED_BLITZRT) //Den Portpin auf high setzen |
#define BLITZRT_OFF PORTC &= ~(1<<LED_BLITZRT) //Den Portpin auf low setzen |
#define BLAU_ON PORTC |= (1<<LED_BL) //Den Portpin auf high setzen |
#define BLAU_OFF PORTC &= ~(1<<LED_BL) //Den Portpin auf low setzen |
#define GELB_ON PORTD |= (1<<LED_UNTENGB) //Den Portpin auf high setzen |
#define GELB_OFF PORTD &= ~(1<<LED_UNTENGB) //Den Portpin auf low setzen |
#define VORNGN_ON PORTD |= (1<<LED_VORNEGN) //Den Portpin auf high setzen |
#define VORNGN_OFF PORTD &= ~(1<<LED_VORNEGN) //Den Portpin auf low setzen |
#define HINTENGN_ON PORTC |= (1<<LED_HINTENGN) //Den Portpin auf high setzen |
#define HINTENGN_OFF PORTC &= ~(1<<LED_HINTENGN) //Den Portpin auf low setzen |
#define VORNRT_ON PORTD |= (1<<LED_VORNERT) //Den Portpin auf high setzen |
#define VORNRT_OFF PORTD &= ~(1<<LED_VORNERT) //Den Portpin auf low setzen |
#define HINTENRT_ON PORTD |= (1<<LED_HINTENRT) //Den Portpin auf high setzen |
#define HINTENRT_OFF PORTD &= ~(1<<LED_HINTENRT) //Den Portpin auf low setzen |
|
|
#define ALLES_OFF BLITZGN_OFF;BLITZRT_OFF;WEISS_OFF;BLAU_OFF;GELB_OFF;VORNGN_OFF;HINTENGN_OFF;VORNRT_OFF;HINTENRT_OFF |
#define ALLES_ON BLITZGN_ON;BLITZRT_ON;WEISS_ON;BLAU_ON;GELB_ON;VORNGN_ON;HINTENGN_ON;VORNRT_ON;HINTENRT_ON |
|
|
|
#define F_CPU 1000000UL |
|
#ifndef F_CPU |
#define F_CPU 1000000 |
#endif |
|
|
volatile uint8_t mode = 0; |
volatile uint8_t abbruch = 0; |
|
|
ISR(INT1_vect) |
{ |
// Interrupt Code |
if (mode <= 3) |
{ |
mode++; |
} |
else |
{ |
mode = 0; |
} |
STATUS_TOGGLE; |
abbruch = 1; |
} |
|
|
|
int main(void){ |
|
// Ports einstellen |
|
// Pin B |7|6|5|4|3|2|1|0 |
// Binär:|0|0|0|0|0|1|0|1 (b) => #05 (h) |
// Pin B0 und B2 als Ausgänge festlegen |
DDRB = 0x05; |
|
// Pin C |7|6|5|4|3|2|1|0 |
// Binär:|0|0|1|1|1|1|1|0 (b) => #3E (h) |
// Pin C1 bis C5 als Ausgänge festlegen |
DDRC = 0x3E; |
|
// Pin D |7|6|5|4|3|2|1|0 |
// Binär:|1|1|1|1|0|0|0|0 (b) => #F0 (h) |
DDRD = 0xF0; |
//Pullup für PD3 aktivieren |
PORTD |= (1 << PD3); |
|
|
//interrupt konfigurueren |
GIMSK = 1<<INT1; |
MCUCR = 1<<ISC10; |
|
ALLES_OFF; |
STATUS_OFF; |
sleep_ms(3000); |
STATUS_ON; |
sei(); //interrupts einschalten |
|
|
while(1){ |
|
|
abbruch = 0; |
if (mode == 0) |
{ |
BLITZRT_OFF; |
BLITZGN_OFF; |
WEISS_ON; |
sleep_ms(50); |
WEISS_OFF; |
BLAU_ON; |
sleep_ms(50); |
BLAU_OFF; |
VORNGN_ON; |
HINTENGN_ON; |
sleep_ms(50); |
VORNGN_OFF; |
HINTENGN_OFF; |
VORNRT_ON; |
HINTENRT_ON; |
sleep_ms(50); |
VORNRT_OFF; |
HINTENRT_OFF; |
} |
|
if (mode == 1) //mit diesem Mode wird gestartet |
{ |
ALLES_OFF; |
} |
|
if (mode == 2) |
{ |
ALLES_ON; |
} |
|
if (mode == 3) //Dieser Mode ist nach dem Kalibrieren an |
{ |
WEISS_OFF; |
BLAU_OFF; |
GELB_ON; |
VORNGN_OFF; |
HINTENGN_OFF; |
HINTENRT_OFF; |
VORNRT_OFF; |
BLITZGN_ON; |
sleep_ms(30); |
BLITZGN_OFF; |
sleep_ms(60); |
BLITZRT_ON; |
sleep_ms(30); |
BLITZRT_OFF; |
sleep_ms(200); |
BLITZGN_ON; |
sleep_ms(30); |
BLITZGN_OFF; |
BLITZRT_ON; |
sleep_ms(30); |
BLITZRT_OFF; |
sleep_ms(1000); |
} |
|
if (mode == 4) |
{ |
WEISS_ON; |
BLAU_ON; |
GELB_ON; |
VORNGN_OFF; |
HINTENGN_OFF; |
HINTENRT_OFF; |
VORNRT_OFF; |
BLITZGN_ON; |
sleep_ms(30); |
BLITZGN_OFF; |
sleep_ms(60); |
BLITZRT_ON; |
sleep_ms(30); |
BLITZRT_OFF; |
sleep_ms(200); |
BLITZGN_ON; |
sleep_ms(30); |
BLITZGN_OFF; |
BLITZRT_ON; |
sleep_ms(30); |
BLITZRT_OFF; |
sleep_ms(1000); |
} |
|
else |
{ |
sleep_ms(10); |
} |
} |
} |
|
|
void sleep_ms(uint16_t ms){ |
if (abbruch == 0) |
{ |
while(ms) |
{ |
if (abbruch != 0) |
{ |
break; |
} |
else |
{ |
ms--; |
_delay_ms(1); |
} |
} |
} |
} |