Gordons Projects

--> Projects Top-Level GIT

Initial creation in GIT
[halloweenPi] / halloween.c
1
2 /*
3  * Halloween Pi:
4  *      A little seasonal project for the MagPi magazine - however
5  *      it demonstrates the use of software PWM to control a pair
6  *      of RGB LEDs and reading from a PIR sensor
7  *
8  *      Copyright (c) Gordon Henderson, 2012.
9  *********************************************************************************
10  */
11
12 #include <stdio.h>
13 #include <string.h>
14 #include <errno.h>
15
16 #include <wiringPi.h>
17 #include <softPwm.h>
18
19 #include "ledControl.h"
20 #include "ledPatterns.h"
21
22 #define TANDY_PIR
23
24 #define PIR_SENSOR      7
25
26
27 /*
28  * waitForSensorClear:
29  *********************************************************************************
30  */
31
32 static void waitForSensorClear ()
33 {
34   printf ("Waiting for the sensor to clear... ") ; fflush (stdout) ;
35
36   while (digitalRead (PIR_SENSOR) == HIGH)
37     delay (10) ;
38
39   printf ("Ready... Shhhh...\n") ;
40 }
41
42 static void waitForSensorSet ()
43 {
44   printf ("Waiting for the sensor to trip... ") ; fflush (stdout) ;
45
46   while (digitalRead (PIR_SENSOR) == LOW)
47     delay (10) ;
48
49   printf ("Boo!\n") ;
50 }
51
52
53
54 /*
55  * setup:
56  *      Setup the GPIO pins, etc.
57  *********************************************************************************
58  */
59
60 static void setup (void)
61 {
62
63 // First LED is on pins 0, 1 and 2, the 2nd is on pins 3, 4 and 5.
64
65   createRgbLed (0, 0, 1, 2) ;
66   createRgbLed (1, 3, 4, 5) ;
67
68   pinMode (PIR_SENSOR, INPUT) ;
69
70 // Note:
71 //      If using the Tandy sensor, then we need to make sure the pin is
72 //      a normal input pin - some sensors (e.g. SKPang) have an open-
73 //      collector output and need the internal pull-up enabled.
74
75 #ifdef  TANDY_PIR
76   pullUpDnControl (PIR_SENSOR, PUD_OFF) ;
77 #else
78   pullUpDnControl (PIR_SENSOR, PUD_UP) ;
79 #endif
80
81   waitForSensorClear () ;
82 }
83
84
85 /*
86  * main:
87  *      This is where it all starts
88  *********************************************************************************
89  */
90
91 int main (void)
92 {
93   printf ("Halloween Pi - Have some seasonal fun from the MagPi and Gordons Projects\n") ;
94
95   if (wiringPiSetup () < 0)
96   {
97     fprintf (stderr, "wiringPiSetup failed: %s\n", strerror (errno)) ;
98     return 1 ;
99   }
100
101   setup () ;
102
103 // Now, loop:
104 //      We wait for the sensor to trip, then do something!
105
106   for (;;)
107   {
108     waitForSensorSet () ;
109
110       randomLeds  (5000) ;
111       flickerRY   (5000) ;
112       purplePulse (5000) ;
113     
114     waitForSensorClear () ;
115   }
116
117   return 0 ;
118 }