Browse Source

Added in PiGlow devLib and a couple of examples for the PiGlow
bumped version.

Gordon Henderson 11 years ago
parent
commit
cbf6d642b5
7 changed files with 451 additions and 2 deletions
  1. 5 1
      devLib/Makefile
  2. 117 0
      devLib/piGlow.c
  3. 36 0
      devLib/piGlow.h
  4. 69 0
      examples/PiGlow/Makefile
  5. 0 0
      examples/PiGlow/piGlow0.c
  6. 223 0
      examples/PiGlow/piGlow1.c
  7. 1 1
      gpio/gpio.c

+ 5 - 1
devLib/Makefile

@@ -42,7 +42,8 @@ LIBS    =
 
 SRC	=	ds1302.c maxdetect.c  piNes.c		\
 		gertboard.c piFace.c			\
-		lcd128x64.c lcd.c
+		lcd128x64.c lcd.c			\
+		piGlow.c
 
 OBJ	=	$(SRC:.c=.o)
 
@@ -86,6 +87,7 @@ install-headers:
 	@install -m 0644 piFace.h		$(DESTDIR)$(PREFIX)/include
 	@install -m 0644 lcd128x64.h		$(DESTDIR)$(PREFIX)/include
 	@install -m 0644 lcd.h			$(DESTDIR)$(PREFIX)/include
+	@install -m 0644 piGlow.h		$(DESTDIR)$(PREFIX)/include
 
 .PHONEY:	install
 install:	$(DYNAMIC) install-headers
@@ -111,6 +113,7 @@ uninstall:
 	@rm -f $(DESTDIR)$(PREFIX)/include/piFace.h
 	@rm -f $(DESTDIR)$(PREFIX)/include/lcd128x64.h
 	@rm -f $(DESTDIR)$(PREFIX)/include/lcd.h
+	@rm -f $(DESTDIR)$(PREFIX)/include/piGlow.h
 	@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.*
 	@ldconfig
 
@@ -128,3 +131,4 @@ gertboard.o: gertboard.h
 piFace.o: piFace.h
 lcd128x64.o: font.h lcd128x64.h
 lcd.o: lcd.h
+piGlow.o: piGlow.h

+ 117 - 0
devLib/piGlow.c

@@ -0,0 +1,117 @@
+/*
+ * piGlow.c:
+ *	Easy access to the Pimoroni PiGlow board.
+ *
+ * Copyright (c) 2013 Gordon Henderson.
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *	https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as published by
+ *    the Free Software Foundation, either version 3 of the License, or
+ *    (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public License
+ *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <wiringPi.h>
+#include <sn3218.h>
+
+#include "piGlow.h"
+
+static int myBase ;
+
+static int leg0 [6] = {  6,  7,  8,  5,  4,  9 } ;
+static int leg1 [6] = { 17, 16, 15, 13, 11, 10 } ;
+static int leg2 [6] = {  0,  1,  2,  3, 14, 12 } ;
+
+
+/*
+ * piGlow1:
+ *	Light up an individual LED
+ *********************************************************************************
+ */
+
+void piGlow1 (const int leg, const int ring, const int intensity)
+{
+  int *legLeds ;
+
+  if ((leg  < 0) || (leg  > 2)) return ;
+  if ((ring < 0) || (ring > 5)) return ;
+
+  /**/ if (leg == 0)
+    legLeds = leg0 ;
+  else if (leg == 1)
+    legLeds = leg1 ;
+  else
+    legLeds = leg2 ;
+
+  analogWrite (myBase + legLeds [ring], intensity) ;
+}
+
+/*
+ * piGlowLeg:
+ *	Light up all 6 LEDs on a leg
+ *********************************************************************************
+ */
+
+void piGlowLeg (const int leg, const int intensity)
+{
+  int i ;
+  int *legLeds ;
+
+  if ((leg < 0) || (leg > 2))
+    return ;
+
+  /**/ if (leg == 0)
+    legLeds = leg0 ;
+  else if (leg == 1)
+    legLeds = leg1 ;
+  else
+    legLeds = leg2 ;
+
+  for (i = 0 ; i < 6 ; ++i)
+    analogWrite (myBase + legLeds [i], intensity) ;
+}
+
+
+/*
+ * piGlowRing:
+ *	Light up 3 LEDs in a ring. Ring 0 is the outermost, 5 the innermost
+ *********************************************************************************
+ */
+
+void piGlowRing (const int ring, const int intensity)
+{
+  if ((ring < 0) || (ring > 5))
+    return ;
+
+  analogWrite (myBase + leg0 [ring], intensity) ;
+  analogWrite (myBase + leg1 [ring], intensity) ;
+  analogWrite (myBase + leg2 [ring], intensity) ;
+}
+
+/*
+ * piGlowSetup:
+ *	Initialise the board & remember the pins we're using
+ *********************************************************************************
+ */
+
+void piGlowSetup (const int pinBase)
+{
+  sn3218Setup (myBase = pinBase) ;
+
+// Turn all off to start with
+
+  piGlowLeg (0, 0) ;
+  piGlowLeg (1, 0) ;
+  piGlowLeg (2, 0) ;
+}

+ 36 - 0
devLib/piGlow.h

@@ -0,0 +1,36 @@
+/*
+ * piglow.h:
+ *	Easy access to the Pimoroni PiGlow board.
+ *
+ * Copyright (c) 2013 Gordon Henderson.
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *	https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as published by
+ *    the Free Software Foundation, either version 3 of the License, or
+ *    (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public License
+ *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void piGlow1     (const int leg,  const int ring, const int intensity) ;
+extern void piGlowLeg   (const int leg,  const int intensity) ;
+extern void piGlowRing  (const int ring, const int intensity) ;
+extern void piGlowSetup (const int pinBase) ;
+
+#ifdef __cplusplus
+}
+#endif

+ 69 - 0
examples/PiGlow/Makefile

@@ -0,0 +1,69 @@
+#
+# Makefile:
+#	wiringPi - Wiring Compatable library for the Raspberry Pi
+#	https://projects.drogon.net/wiring-pi
+#
+#	Copyright (c) 2012-2013 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+#	Wiring Compatable library for the Raspberry Pi
+#
+#    wiringPi is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Lesser General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    wiringPi is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Lesser General Public License for more details.
+#
+#    You should have received a copy of the GNU Lesser General Public License
+#    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
+#################################################################################
+
+
+#DEBUG	= -g -O0
+DEBUG	= -O3
+CC	= gcc
+INCLUDE	= -I/usr/local/include
+CFLAGS	= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+
+LDFLAGS	= -L/usr/local/lib
+LDLIBS    = -lwiringPi -lwiringPiDev -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC	=	piGlow0.c piGlow1.c
+
+OBJ	=	$(SRC:.c=.o)
+
+BINS	=	$(SRC:.c=)
+
+all:	$(BINS)
+
+piGlow0:	piGlow0.o
+	@echo [link]
+	@$(CC) -o $@ piGlow0.o $(LDFLAGS) $(LDLIBS)
+
+piGlow1:	piGlow1.o
+	@echo [link]
+	@$(CC) -o $@ piGlow1.o $(LDFLAGS) $(LDLIBS)
+
+.c.o:
+	@echo [CC] $<
+	@$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+	@echo "[Clean]"
+	@rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:	$(SRC)
+	@echo [ctags]
+	@ctags $(SRC)
+
+depend:
+	makedepend -Y $(SRC)
+
+# DO NOT DELETE

+ 0 - 0
examples/piglow.c → examples/PiGlow/piGlow0.c


+ 223 - 0
examples/PiGlow/piGlow1.c

@@ -0,0 +1,223 @@
+/*
+ * piGlow1.c:
+ *	Very simple demonstration of the PiGlow board.
+ *	This uses the piGlow devLib.
+ *
+ * Copyright (c) 2013 Gordon Henderson.
+ ***********************************************************************
+ * This file is part of wiringPi:
+ *	https://projects.drogon.net/raspberry-pi/wiringpi/
+ *
+ *    wiringPi is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Lesser General Public License as published by
+ *    the Free Software Foundation, either version 3 of the License, or
+ *    (at your option) any later version.
+ *
+ *    wiringPi is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public License
+ *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <poll.h>
+
+#include <wiringPi.h>
+#include <piGlow.h>
+
+#define	PIGLOW_BASE	533
+
+
+/*
+ * keypressed: clearKeypressed:
+ *	Simple but effective ways to tell if the enter key has been pressed
+ *********************************************************************************
+ */
+
+static int keypressed (void)
+{
+  struct pollfd polls ;
+
+  polls.fd     = fileno (stdin) ;
+  polls.events = POLLIN ;
+
+  return poll (&polls, 1, 0) != 0 ;
+}
+
+static void clearKeypressed (void)
+{
+  while (keypressed ())
+    (void)getchar () ;
+}
+
+
+/*
+ * pulseLed:
+ *	Pulses the LED at position leg, ring from off to a max. value,
+ *	then off again
+ *********************************************************************************
+ */
+
+static void pulseLed (int leg, int ring)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlow1 (leg, ring, i) ;
+    delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlow1 (leg, ring, i) ;
+    delay (1) ;
+  }
+}
+
+/*
+ * pulseLeg:
+ *	Same as above, but a whole leg at a time
+ *********************************************************************************
+ */
+
+static void pulseLeg (int leg)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlowLeg (leg, i) ; delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlowLeg (leg, i) ; delay (1) ;
+  }
+}
+
+
+/*
+ * pulse Ring:
+ *	Same as above, but a whole ring at a time
+ *********************************************************************************
+ */
+
+static void pulseRing (int ring)
+{
+  int i ;
+
+  for (i = 0 ; i < 140 ; ++i)
+  {
+    piGlowRing (ring, i) ; delay (1) ;
+  }
+  delay (10) ;
+  for (i = 140 ; i >= 0 ; --i)
+  {
+    piGlowRing (ring, i) ; delay (1) ;
+  }
+}
+
+
+/*
+ * main:
+ *	Our little demo prgoram
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  int i ;
+  int ring, leg ;
+
+// Always initialise wiringPi:
+//	Use the Sys method if you don't need to run as root
+
+  wiringPiSetupSys () ;
+
+// Initialise the piGlow devLib with our chosen pin base
+
+  piGlowSetup (PIGLOW_BASE) ;
+
+// LEDs, one at a time
+
+  printf ("LEDs, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (leg = 0 ; leg < 3 ; ++leg)
+    {
+      for (ring = 0 ; ring < 6 ; ++ring)
+      {
+	pulseLed (leg, ring) ;
+	if (keypressed ())
+	  break ;
+      }
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+// Rings, one at a time
+
+  printf ("Rings, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (ring = 0 ; ring < 6 ; ++ring)
+    {
+      pulseRing (ring) ;
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+// Legs, one at a time
+
+  printf ("Legs, one at a time\n") ;
+  for (; !keypressed () ;)
+    for (leg = 0 ; leg < 3 ; ++leg)
+    {
+      pulseLeg (leg) ;
+      if (keypressed ())
+	break ;
+    }
+  clearKeypressed () ;
+
+  delay (1000) ;
+
+// Sequence - alternating rings, legs and random
+
+  printf ("Sequence now\n") ;
+
+  for (; !keypressed () ;)
+  {
+    for (i = 0 ; i < 20 ; ++i)
+      for (leg = 2 ; leg >= 0 ; --leg)
+      {
+	piGlowLeg (leg, 100) ;
+	delay (100) ;
+	piGlowLeg (leg, 0) ;
+      }
+
+    for (i = 0 ; i < 20 ; ++i)
+      for (ring = 5 ; ring >= 0 ; --ring)
+      {
+	piGlowRing (ring, 100) ;
+	delay (50) ;
+	piGlowRing (ring,   0) ;
+      }
+
+    for (i = 0 ; i < 1000 ; ++i)
+    {
+      leg = random () % 3 ;
+      ring = random () % 6 ;
+      piGlow1 (leg, ring, random () % 256) ;
+      delay (5) ; 
+      piGlow1 (leg, ring, 0) ;
+    }
+  }
+
+  return 0 ;
+}

+ 1 - 1
gpio/gpio.c

@@ -51,7 +51,7 @@ extern void doReadallOld (void) ;
 #  define	FALSE	(1==2)
 #endif
 
-#define	VERSION		"2.09"
+#define	VERSION		"2.10"
 #define	I2CDETECT	"/usr/sbin/i2cdetect"
 
 int wpMode ;