1 | //C0 cw in vom Mainframe
|
2 | //C1 ccw in vom Mainframe
|
3 | //
|
4 | //C2 Taster K?ltebad
|
5 | //C3 Taster W?rmebad
|
6 | //
|
7 | //D0 cw out zum Motor -> Richtung K?ltebad
|
8 | //D1 ccw out zum Motor -> Richtung W?rmebad
|
9 | //D2 LED on als Anzeige das mit dem Beladen begonnen werden kann
|
10 |
|
11 | //#define F_CPU 1000000UL
|
12 |
|
13 | //#include <inttypes.h>
|
14 | #include <stdint.h>
|
15 | #include <avr/io.h>
|
16 | //#include <util/delay.h>
|
17 | //#include <avr/interrupt.h>
|
18 |
|
19 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
20 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
21 |
|
22 | //****************************************
|
23 | //Einstiegspunkt
|
24 | int main(void)
|
25 | {
|
26 |
|
27 | DDRC = 0x00; //Eing?nge
|
28 | DDRB = 0x00; //Eing?nge
|
29 | DDRD = 0xFF; //Ausg?nge
|
30 |
|
31 | PORTD = 0x00; //D-PINs alle auf low
|
32 |
|
33 | //Wenn Taster vom K?ltebad aus,
|
34 | if(!(PINC & (1<<PINC2))) //C2 low
|
35 | {
|
36 | //=> Motor Richtung K?ltebad fahren.
|
37 | PORTD |= (1<<PIND0); //D0 high
|
38 |
|
39 | //warten bis Taster vom K?ltebad durch Motor gedr?ckt wurde
|
40 | while(!(PINC & (1<<PINC2))) //C2 low -> warten auf high
|
41 | {}
|
42 |
|
43 | //=> Motor anhalten
|
44 | PORTD &= ~(1<<PIND0); //D0 low
|
45 | }
|
46 |
|
47 | // Hauptroutine
|
48 | while(1)
|
49 | {
|
50 | //Mainframe: Wenn Signal f?r Richtung W?rmebad anliegt
|
51 | if((PINC & (1<<PINC1)) && !(PINC & (1<<PINC0))) //C1 high && C0 low
|
52 | {
|
53 | //=> Motor Richtung W?rmebad fahren.
|
54 | PORTD |= (1<<PIND1); //D1 high
|
55 | }
|
56 | //Mainframe: Wenn Signal f?r Richtung K?ltebad anliegt
|
57 | else if((PINC & (1<<PINC0)) && !(PINC & (1<<PINC1))) //C0 high // C1 high
|
58 | {
|
59 | //=> Motor Richtung K?ltebad fahren.
|
60 | PORTD |= (1<<PIND0); //D0 high
|
61 | }
|
62 | //Taster: K?ltebad ODER W?rmebad gedr?ckt
|
63 | else if( ( (PINC & (1<<PINC2)) || (PINC & (1<<PINC3)) )
|
64 | //und wenn Motor noch nicht angehalten wurde
|
65 | && ( PORTD & (1<<PIND0) || PORTD & (1<<PIND1) ) )
|
66 | {
|
67 | //Motor anhalten (cw und ccw Pin f?r Motor auf Low setzen)
|
68 | PORTD &= ~( (1<<PIND0) | (1<<PIND1) );
|
69 | }
|
70 |
|
71 | }//Hauptroutine / while(1)
|
72 |
|
73 | }//main()
|