Gordons Projects

--> Projects Top-Level GIT

Some minor changes to fix the LED patterns
[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   delay (2000) ;
47
48   while (digitalRead (PIR_SENSOR) == LOW)
49     delay (10) ;
50
51   printf ("Boo!\n") ;
52 }
53
54
55
56 /*
57  * setup:
58  *      Setup the GPIO pins, etc.
59  *********************************************************************************
60  */
61
62 static void setup (void)
63 {
64
65 // First LED is on pins 0, 1 and 2, the 2nd is on pins 3, 4 and 5.
66
67   createRgbLed (0, 0, 1, 2) ;
68   createRgbLed (1, 3, 4, 5) ;
69
70   pinMode (PIR_SENSOR, INPUT) ;
71
72 // Note:
73 //      If using the Tandy sensor, then we need to make sure the pin is
74 //      a normal input pin - some sensors (e.g. SKPang) have an open-
75 //      collector output and need the internal pull-up enabled.
76
77 #ifdef  TANDY_PIR
78   pullUpDnControl (PIR_SENSOR, PUD_OFF) ;
79 #else
80   pullUpDnControl (PIR_SENSOR, PUD_UP) ;
81 #endif
82
83   waitForSensorClear () ;
84 }
85
86
87 /*
88  * main:
89  *      This is where it all starts
90  *********************************************************************************
91  */
92
93 int main (void)
94 {
95   printf ("Halloween Pi - Have some seasonal fun from the MagPi and Gordons Projects\n") ;
96
97   if (wiringPiSetup () < 0)
98   {
99     fprintf (stderr, "wiringPiSetup failed: %s\n", strerror (errno)) ;
100     return 1 ;
101   }
102
103   setup () ;
104
105 // Now, loop:
106 //      We wait for the sensor to trip, then do something!
107
108   for (;;)
109   {
110     waitForSensorSet () ;
111
112       randomLeds  (5000) ;
113       flickerRY   (5000) ;
114       purplePulse (5000) ;
115     
116     waitForSensorClear () ;
117   }
118
119   return 0 ;
120 }