/******************************************** * File: bumper.c * Author: Christian *********************************************/ #include #include #include #include // Ausgänge #define Magnetventil GP2 #define Schalter GP5 #define LED GP4 // Mach doch mal Pause *Gääähn* #define XTAL_FREQ 4MHZ // Crystal frequency in MHz #define MHZ *1000 // number of kHz in a MHz #define DelayUs(x) { unsigned int _dcnt; \ _dcnt = (x)/(12MHZ/(XTAL_FREQ))|1; \ while(--_dcnt != 0) \ continue; } #define TRUE 1 #define FALSE 0 // Konfiguration: Interner Oszillator, Watchdog, Brownout hat der Eimer nicht __CONFIG (MCLRE_ON & WDT_ON & OSC_IntRC); /*********************** * * Reiss an den Eimer! * ***********************/ void Sysinit (void) { OPTION = 0; // GP2 als Ausgang nutzbar TRIS = 0b00100000; // Nur ein Eingang LED = 0; Magnetventil = 0; } /************************** * * Kurze Pause *Schnarch* * **************************/ void Delayms (int wert) { int i; for (i=0; i < wert; i++) { DelayUs(1000); CLRWDT (); } } /********* * * Main * *********/ int main (void) { unsigned long Blincounter = 0; char Blink = TRUE; Sysinit (); // Hardware initialisieren while (1) { // LED hektisch blinken lassen im Ruhezustand Blincounter++; if ((Blincounter % 100) == 0) if (Blink) Blink = FALSE; else Blink = TRUE; if (Blink) LED = 1; else LED = 0; // Hat jemand die Kontakte befummelt???? if (!Schalter) { Delayms (2); if (!Schalter) { // Schalter ist immer noch High, also Magnetventil freigeben LED = 0; Magnetventil = 1; // Einschalten Delayms (70); // Kurz warten Magnetventil = 0; // Abschalten LED = 1; Delayms (70); // Kurz warten LED = 0; } // Von zweite Abfrage if (Schalter) } // Von if (Schalter) CLRWDT (); } // Von while (1) } // Das wars mal wieder für heute.....