Gordons Projects

--> Projects Top-Level GIT

Initial creation in GIT
authorGordon Henderson <gordon@raspberrypi.(none)>
Tue, 25 Sep 2012 16:46:29 +0000 (17:46 +0100)
committerGordon Henderson <gordon@raspberrypi.(none)>
Tue, 25 Sep 2012 16:46:29 +0000 (17:46 +0100)
Makefile [new file with mode: 0644]
README.TXT [new file with mode: 0644]
halloween.c [new file with mode: 0644]
ledControl.c [new file with mode: 0644]
ledControl.h [new file with mode: 0644]
ledPatterns.c [new file with mode: 0644]
ledPatterns.h [new file with mode: 0644]
recipie.txt [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..b460aa3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,46 @@
+#
+# Makefile:
+#      Halloween Pi!
+
+#DEBUG = -g -O0
+DEBUG  = -O3
+CC     = gcc
+INCLUDE        = -I/usr/local/include
+CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS        = -L/usr/local/lib
+LIBS    = -lwiringPi -lpthread
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC    =       halloween.c ledPatterns.c ledControl.c
+
+OBJ    =       halloween.o ledPatterns.o ledControl.o
+
+all:           halloween
+
+halloween:     $(OBJ)
+       @echo [LD] $@
+       @$(CC) $(LDFLAGS) -o halloween $(OBJ) $(LIBS) $(LD2)
+
+.c.o:
+       @echo [CC] $<
+       @$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+       rm -f $(OBJ) *~ core tags halloween *.bak
+
+tags:  $(SRC)
+       @echo [ctags]
+       @ctags $(SRC)
+
+depend:
+       makedepend -Y $(SRC)
+
+
+# DO NOT DELETE
+
+halloween.o: ledControl.h ledPatterns.h
+ledPatterns.o: ledControl.h ledPatterns.h
+ledControl.o: ledControl.h
diff --git a/README.TXT b/README.TXT
new file mode 100644 (file)
index 0000000..198c3fd
--- /dev/null
@@ -0,0 +1,60 @@
+
+ * Halloween Pi
+ **************
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ **********************************************************************
+
+The software here is designed to control the two RGB LEDs triggererd
+from a PIR - Passive Infra Red sensor.
+
+There are 3 files of code and a Makefile. The Makefile is a set of rules
+which gives instructions about building the code.
+
+To compile and run, type:
+
+  make
+  sudo ./halloween
+
+If you do not have wiringPi installed, then you will get failures,
+so install wiringPi:
+
+  pushd /tmp
+  git clone git://git.drogon.net/wiringPi
+  cd wiringPi
+  ./build
+  popd
+
+If you get an error when running the git command, then:
+
+  sudo apt-get install git-core
+
+
+
+The three program files -
+
+halloween.c:   This is the main program - it initialises the
+               sensor and LEDs and the performs actions when
+               the sensor is triggered.
+
+ledControl.c   This sets up the RGB LEDs and provides a function to
+               program any RGB value to either LED.
+
+ledPatterns.c: This is code to create many different patterns on the
+               LEDs.
+
+Of these files, the last one, ledPatterns.c is probably he one you want
+to play with. You can change one of the existing functions, or add new
+functions into it.
+
+To add in a new pattern:
+
+Write the function - try to use the same style as the existing ones and
+have it run for a set period of time.
+
+Add an entry into ledPatterns.h
+
+Call the code from the main halloween.c program.
diff --git a/halloween.c b/halloween.c
new file mode 100644 (file)
index 0000000..cb70226
--- /dev/null
@@ -0,0 +1,118 @@
+
+/*
+ * Halloween Pi:
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ *********************************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <wiringPi.h>
+#include <softPwm.h>
+
+#include "ledControl.h"
+#include "ledPatterns.h"
+
+#define        TANDY_PIR
+
+#define        PIR_SENSOR      7
+
+
+/*
+ * waitForSensorClear:
+ *********************************************************************************
+ */
+
+static void waitForSensorClear ()
+{
+  printf ("Waiting for the sensor to clear... ") ; fflush (stdout) ;
+
+  while (digitalRead (PIR_SENSOR) == HIGH)
+    delay (10) ;
+
+  printf ("Ready... Shhhh...\n") ;
+}
+
+static void waitForSensorSet ()
+{
+  printf ("Waiting for the sensor to trip... ") ; fflush (stdout) ;
+
+  while (digitalRead (PIR_SENSOR) == LOW)
+    delay (10) ;
+
+  printf ("Boo!\n") ;
+}
+
+
+
+/*
+ * setup:
+ *     Setup the GPIO pins, etc.
+ *********************************************************************************
+ */
+
+static void setup (void)
+{
+
+// First LED is on pins 0, 1 and 2, the 2nd is on pins 3, 4 and 5.
+
+  createRgbLed (0, 0, 1, 2) ;
+  createRgbLed (1, 3, 4, 5) ;
+
+  pinMode (PIR_SENSOR, INPUT) ;
+
+// Note:
+//     If using the Tandy sensor, then we need to make sure the pin is
+//     a normal input pin - some sensors (e.g. SKPang) have an open-
+//     collector output and need the internal pull-up enabled.
+
+#ifdef TANDY_PIR
+  pullUpDnControl (PIR_SENSOR, PUD_OFF) ;
+#else
+  pullUpDnControl (PIR_SENSOR, PUD_UP) ;
+#endif
+
+  waitForSensorClear () ;
+}
+
+
+/*
+ * main:
+ *     This is where it all starts
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  printf ("Halloween Pi - Have some seasonal fun from the MagPi and Gordons Projects\n") ;
+
+  if (wiringPiSetup () < 0)
+  {
+    fprintf (stderr, "wiringPiSetup failed: %s\n", strerror (errno)) ;
+    return 1 ;
+  }
+
+  setup () ;
+
+// Now, loop:
+//     We wait for the sensor to trip, then do something!
+
+  for (;;)
+  {
+    waitForSensorSet () ;
+
+      randomLeds  (5000) ;
+      flickerRY   (5000) ;
+      purplePulse (5000) ;
+    
+    waitForSensorClear () ;
+  }
+
+  return 0 ;
+}
diff --git a/ledControl.c b/ledControl.c
new file mode 100644 (file)
index 0000000..4cf975a
--- /dev/null
@@ -0,0 +1,64 @@
+
+/*
+ * Halloween Pi:
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ *********************************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <wiringPi.h>
+#include <softPwm.h>
+
+#include "ledControl.h"
+
+
+// A structure to hold information about the pins used in the LEDs
+
+struct rgbLedStruct
+{
+  int redPin, greenPin, bluePin ;
+} ;
+
+// An array of the above structure to store data about our RGB LEDs
+
+static struct rgbLedStruct rgbLeds [2] ;
+
+
+/*
+ * createRgbLed:
+ *     Define an RGB LED - pin numbers, etc. and fire up the softPWM
+ *     handlers for it.
+ *********************************************************************************
+ */
+
+void createRgbLed (int led, int red, int green, int blue)
+{
+  softPwmCreate (red,   0, 100) ;
+  softPwmCreate (green, 0, 100) ;
+  softPwmCreate (blue,  0, 100) ;
+
+  rgbLeds [led].redPin   = red ;
+  rgbLeds [led].greenPin = green ;
+  rgbLeds [led].bluePin  = blue ;
+}
+
+
+/*
+ * setRgbLed:
+ *     Send the given values to our LED
+ *********************************************************************************
+ */
+
+void setRgbLed (int led, int red, int green, int blue)
+{
+  softPwmWrite (rgbLeds [led].redPin,   red) ;
+  softPwmWrite (rgbLeds [led].greenPin, green) ;
+  softPwmWrite (rgbLeds [led].bluePin,  blue) ;
+}
diff --git a/ledControl.h b/ledControl.h
new file mode 100644 (file)
index 0000000..549fa27
--- /dev/null
@@ -0,0 +1,15 @@
+
+/*
+ * Halloween Pi
+ **************
+ * ledControl.h:
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ *********************************************************************************
+ */
+
+extern void createRgbLed (int led, int red, int green, int blue) ;
+extern void    setRgbLed (int led, int red, int green, int blue) ;
diff --git a/ledPatterns.c b/ledPatterns.c
new file mode 100644 (file)
index 0000000..eb3a44c
--- /dev/null
@@ -0,0 +1,106 @@
+
+/*
+ * Halloween Pi
+ **************
+ * ledPatterns.c:
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ *********************************************************************************
+ */
+
+#include <stdlib.h>
+
+#include <wiringPi.h>
+
+#include "ledControl.h"
+#include "ledPatterns.h"
+
+
+/*
+ * allOff:
+ *     Set all LEDs off
+ *********************************************************************************
+ */
+
+void allOff (void)
+{
+  setRgbLed (0,   0,   0,   0) ;
+  setRgbLed (1,   0,   0,   0) ;
+}
+
+
+/*
+ * randomLeds:
+ *     Flicker them at random for the given time
+ *********************************************************************************
+ */
+
+void randomLeds (int howLong)
+{
+  int endTime = millis () + howLong ;
+
+  while (millis () < endTime)
+  {
+    setRgbLed (0, rand () % 101, rand () % 101, rand () % 101) ;
+    setRgbLed (1, rand () % 101, rand () % 101, rand () % 101) ;
+    delay (50) ;
+  }
+
+  allOff () ;  
+}
+
+
+/*
+ * flickerRY:
+ *********************************************************************************
+ */
+
+void flickerRY (int howLong)
+{
+  int endTime = millis () + howLong ;
+
+  while (millis () < endTime)
+  {
+    setRgbLed (0, 100,  50,   0) ;
+    setRgbLed (1, 100,  50,   0) ;
+    delay (200) ;
+
+    setRgbLed (0, 100,   0,   0) ;
+    setRgbLed (1, 100,   0,   0) ;
+    delay (50) ;
+  }
+  
+  allOff () ;  
+}
+
+/*
+ * purplePulse:
+ *********************************************************************************
+ */
+
+void purplePulse (int howLong)
+{
+  int endTime = millis () + howLong ;
+  int i ;
+
+  while (millis () < endTime)
+  {
+    for (i = 0 ; i <= 100 ; ++i)
+    {
+      setRgbLed (0, i, 0, i) ;
+      setRgbLed (0, i, 0, i) ;
+      delay (20) ;
+    }
+    for (i = 100 ; i > 0 ; --i)
+    {
+      setRgbLed (0, i, 0, i) ;
+      setRgbLed (0, i, 0, i) ;
+      delay (20) ;
+    }
+  }
+    
+  allOff () ;  
+}
diff --git a/ledPatterns.h b/ledPatterns.h
new file mode 100644 (file)
index 0000000..311a878
--- /dev/null
@@ -0,0 +1,17 @@
+
+/*
+ * Halloween Pi
+ **************
+ * ledPatterns.h:
+ *     A little seasonal project for the MagPi magazine - however
+ *     it demonstrates the use of software PWM to control a pair
+ *     of RGB LEDs and reading from a PIR sensor
+ *
+ *     Copyright (c) Gordon Henderson, 2012.
+ *********************************************************************************
+ */
+
+extern void allOff      (void) ;
+extern void randomLeds  (int howLong) ;
+extern void flickerRY   (int howLong) ;
+extern void purplePulse (int howLong) ;
diff --git a/recipie.txt b/recipie.txt
new file mode 100644 (file)
index 0000000..839db8f
--- /dev/null
@@ -0,0 +1,22 @@
+
+Creamy Roast Pumpkin Soup - To go with your Halloween Pi
+========================================================
+
+When you have removed all the flesh from your pumpkin, don't throw it
+away! Instead, use it to make some nice and tasty roast pumpkin soup.
+
+Put the flesh into an ovenproof dish with a glug of olive oil and a
+sprinkling of salt and roast in a hot oven - 220C or Gas mark 7 for
+about hanf an hour until it starts to take a little colour.
+
+Remove from the oven and transfer into a pan. Add in half a vegetable
+stock cube (or a whole one if you carved a huge pumpkin!)  and a small
+tub of single cream. (again, maybe a a large pot if it's a huge pumpkin!)
+
+Mash or blitz with one of those hand-held mixer thing and return to the
+heat to thoroughly warm through - add a little milk or water if it's a
+bit think, and serve immediately with some fresh crusty bread.
+
+For a little variation and more texture, add in a drained tin of
+sweetcorn and to make it a little warmer, try some smoked paprika
+sprinkled on-top when serving.