Blame |
Last modification |
View Log
| RSS feed
//
// 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);
}
}
}
}