Gordons Projects

--> Projects Top-Level GIT

Initial creating of GIT repository for the wiringPi + Gertboard master
authorGordon Henderson <projects@drogon.net>
Tue, 12 Feb 2013 23:07:57 +0000 (23:07 +0000)
committerGordon Henderson <projects@drogon.net>
Tue, 12 Feb 2013 23:07:57 +0000 (23:07 +0000)
demo project

7segments.c [new file with mode: 0644]
Makefile [new file with mode: 0644]
README.TXT [new file with mode: 0644]
blink.c [new file with mode: 0644]
blink12.c [new file with mode: 0644]
blink8.c [new file with mode: 0644]
buttons.c [new file with mode: 0644]

diff --git a/7segments.c b/7segments.c
new file mode 100644 (file)
index 0000000..e04f4f2
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * 7segments.c:
+ *     Simple test program to see if we can drive a 7-segment LED
+ *     display using the GPIO and little else on the Raspberry Pi
+ *
+ *     Copyright (c) 2013 Gordon Henderson
+ ***********************************************************************
+ */
+
+#undef PHOTO_HACK
+
+#include <wiringPi.h>
+
+#include <stdio.h>
+//#include <stdlib.h>
+#include <time.h>
+#include <ctype.h>
+//#include <unistd.h>
+#include <string.h>
+//#include <errno.h>
+//#include <sched.h>
+
+/*
+ *  Segment mapping
+ *
+ *      --a--
+ *     |     |
+ *     f     b
+ *     |     |
+ *      --g--
+ *     |     |
+ *     e     c
+ *     |     |
+ *      --d--  p
+ */
+
+// GPIO Pin Mapping
+
+static int digits   [6] = {  7, 11, 10, 13, 12, 14    } ;
+static int segments [7] = {  6,  5,  4,  3,  2,  1, 0 } ;
+
+
+static const int segmentDigits [] =
+{
+// a  b  c  d  e  f  g     Segments
+// 6  5  4  3  2  1  0,        // wiringPi pin No.
+
+   1, 1, 1, 1, 1, 1, 0,        // 0
+   0, 1, 1, 0, 0, 0, 0,        // 1
+   1, 1, 0, 1, 1, 0, 1,        // 2
+   1, 1, 1, 1, 0, 0, 1,        // 3
+   0, 1, 1, 0, 0, 1, 1,        // 4
+   1, 0, 1, 1, 0, 1, 1,        // 5
+   1, 0, 1, 1, 1, 1, 1,        // 6
+   1, 1, 1, 0, 0, 0, 0,        // 7
+   1, 1, 1, 1, 1, 1, 1,        // 8
+   1, 1, 1, 1, 0, 1, 1,        // 9
+   1, 1, 1, 0, 1, 1, 1,        // A
+   0, 0, 1, 1, 1, 1, 1,        // b
+   1, 0, 0, 1, 1, 1, 0,        // C
+   0, 1, 1, 1, 1, 0, 1,        // d
+   1, 0, 0, 1, 1, 1, 1,        // E
+   1, 0, 0, 0, 1, 1, 1,        // F
+   0, 0, 0, 0, 0, 0, 0,        // blank
+} ;
+
+// display:
+//     A global variable which is written to by the main program and
+//     read from by the thread that updates the display. Only the first
+//     6 characters are used.
+
+char display [8] ;
+
+
+/*
+ * displayDigits:
+ *     This is our thread that's run concurrently with the main program.
+ *     Essentially sit in a loop, parsing and displaying the data held in
+ *     the "display" global.
+ *********************************************************************************
+ */
+
+PI_THREAD (displayDigits)
+{
+  int digit, segment ;
+  int index, d, segVal ;
+
+  piHiPri (50) ;
+
+  for (;;)
+  {
+    for (digit = 0 ; digit < 6 ; ++digit)
+    {
+      for (segment = 0 ; segment < 7 ; ++segment)
+      {
+       d = toupper (display [digit]) ;
+       /**/ if ((d >= '0') && (d <= '9'))      // Digit
+         index = d - '0' ;
+       else if ((d >= 'A') && (d <= 'F'))      // Hex
+         index = d - 'A' + 10 ;
+       else
+         index = 16 ;                          // Blank
+
+       segVal = segmentDigits [index * 7 + segment] ;
+
+       digitalWrite (segments [segment], segVal) ;
+      }
+      digitalWrite (digits [digit], 1) ;
+      delay (2) ;
+      digitalWrite (digits [digit], 0) ;
+    }
+  }
+}
+
+
+/*
+ * setup:
+ *     Initialise the hardware and start the thread
+ *********************************************************************************
+ */
+
+void setup (void)
+{
+  int i, c ;
+
+  wiringPiSetup () ;
+
+// 7 segments
+
+  for (i = 0 ; i < 7 ; ++i)
+    { digitalWrite (segments [i], 0) ; pinMode (segments [i], OUTPUT) ; }
+
+// 6 digits
+
+  for (i = 0 ; i < 7 ; ++i)
+    { digitalWrite (digits [i], 0) ;   pinMode (digits [i],   OUTPUT) ; }
+
+  strcpy (display, "      ") ;
+  piThreadCreate (displayDigits) ;
+  delay (10) ; // Just to make sure it's started
+
+// Quick countdown LED test sort of thing
+
+  c = 999999 ;
+  for (i = 0 ; i < 10 ; ++i)
+  {
+    sprintf (display, "%06d", c) ;
+    delay (400) ;
+    c -= 111111 ;
+  }
+
+  strcpy (display, "      ") ;
+  delay (400) ;
+
+#ifdef PHOTO_HACK
+  sprintf (display, "%s", "123456") ;
+  for (;;)
+    delay (1000) ;
+#endif
+
+}
+
+
+/*
+ * teenager:
+ *     No explanation needed. (Nor one given!)
+ *********************************************************************************
+ */
+
+void teenager (void)
+{
+  char *message = "      b00b1e5      babe      cafe      b00b" ;
+  int i ;
+
+  for (i = 0 ; i < strlen (message) - 4 ; ++i)
+  {
+    strncpy (display, &message [i], 6) ;
+    delay (200) ;
+  }
+  delay (1000) ;
+  for (i = 0 ; i < 3 ; ++i)
+  {
+    strcpy (display, "    ") ;
+    delay (150) ;
+    strcpy (display, " b00b ") ;
+    delay (250) ;
+  }
+  delay (1000) ;
+  strcpy (display, "      ") ;
+  delay (1000) ;
+}
+
+
+/*
+ *********************************************************************************
+ * main:
+ *     Let the fun begin
+ *********************************************************************************
+ */
+
+int main (void)
+{
+  struct tm *t ;
+  time_t     tim ;
+
+  setup    () ;
+  teenager () ;
+
+  tim = time (NULL) ;
+  for (;;)
+  {
+    while (time (NULL) == tim)
+      delay (5) ;
+
+    tim = time (NULL) ;
+    t   = localtime (&tim) ;
+
+    sprintf (display, "%02d%02d%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
+
+    delay (500) ;
+  }
+
+  return 0 ;
+}
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..fa72185
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,68 @@
+#
+# Makefile:
+#      Gertboard - Examples using wiringPi
+#
+#      Copyright (c) 2013 Gordon Henderson
+#################################################################################
+
+#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 -lpthread -lm
+
+# Should not alter anything below this line
+###############################################################################
+
+SRC    =       blink.c blink8.c blink12.c      \
+               buttons.c 7segments.c
+
+OBJ    =       $(SRC:.c=.o)
+
+BINS   =       $(SRC:.c=)
+
+all:   
+       @cat README.TXT
+       @echo "    $(BINS)" | fmt
+       @echo ""
+
+really-all:    $(BINS)
+
+blink: blink.o
+       @echo [link]
+       @$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS)
+
+blink8:        blink8.o
+       @echo [link]
+       @$(CC) -o $@ blink8.o $(LDFLAGS) $(LDLIBS)
+
+blink12:       blink12.o
+       @echo [link]
+       @$(CC) -o $@ blink12.o $(LDFLAGS) $(LDLIBS)
+
+buttons:       buttons.o
+       @echo [link]
+       @$(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS)
+
+7segments:     7segments.o
+       @echo [link]
+       @$(CC) -o $@ 7segments.o $(LDFLAGS) $(LDLIBS)
+
+.c.o:
+       @echo [CC] $<
+       @$(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+       rm -f $(OBJ) *~ core tags $(BINS)
+
+tags:  $(SRC)
+       @echo [ctags]
+       @ctags $(SRC)
+
+depend:
+       makedepend -Y $(SRC)
+
+# DO NOT DELETE
diff --git a/README.TXT b/README.TXT
new file mode 100644 (file)
index 0000000..83b9826
--- /dev/null
@@ -0,0 +1,18 @@
+
+Gertboard + wiringPi Examples
+=============================
+
+There are now too many examples to compile them all in a sensible time,
+and you probably don't want to compile or run them all anyway, so they
+have been separated out.
+
+To compile an individual example, just type
+
+    make exampleName
+
+To really compile everything:
+
+    make really-all
+
+The individual programs are:
+
diff --git a/blink.c b/blink.c
new file mode 100644 (file)
index 0000000..34694d7
--- /dev/null
+++ b/blink.c
@@ -0,0 +1,33 @@
+/*
+ * blink.c:
+ *     Standard "blink" program in wiringPi. Blinks an LED connected
+ *     to the first GPIO pin.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ */
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// LED Pin - wiringPi pin 0 is BCM_GPIO 17.
+
+#define        LED     0
+
+int main (void)
+{
+  printf ("Raspberry Pi - Gertboard Blink\n") ;
+
+  wiringPiSetup () ;
+
+  pinMode (LED, OUTPUT) ;
+
+  for (;;)
+  {
+    digitalWrite (LED, 1) ;    // On
+    delay (500) ;              // mS
+    digitalWrite (LED, 0) ;    // Off
+    delay (500) ;
+  }
+  return 0 ;
+}
diff --git a/blink12.c b/blink12.c
new file mode 100644 (file)
index 0000000..eb8cc85
--- /dev/null
+++ b/blink12.c
@@ -0,0 +1,92 @@
+/*
+ * blink12.c:
+ *     This is a sequencer to make a pattern appear on 12 LEDs
+ *     connected to the GPIO pins wired to the Gertboard
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// Simple sequencer data
+//     Triplets of LED, On/Off and delay
+
+int data [] =
+{
+            0, 1, 1,
+            1, 1, 1,
+  0, 0, 0,  2, 1, 1,
+  1, 0, 0,  3, 1, 1,
+  2, 0, 0,  4, 1, 1,
+  3, 0, 0,  5, 1, 1,
+  4, 0, 0,  6, 1, 1,
+  5, 0, 0,  7, 1, 1,
+  6, 0, 0, 11, 1, 1,
+  7, 0, 0, 10, 1, 1,
+ 11, 0, 0, 13, 1, 1,
+ 10, 0, 0, 12, 1, 1,
+ 13, 0, 1,
+ 12, 0, 1,
+
+  0, 0, 1,     // Extra delay
+
+// Back again
+
+           12, 1, 1,
+           13, 1, 1,
+ 12, 0, 0, 10, 1, 1,
+ 13, 0, 0, 11, 1, 1,
+ 10, 0, 0,  7, 1, 1,
+ 11, 0, 0,  6, 1, 1,
+  7, 0, 0,  5, 1, 1,
+  6, 0, 0,  4, 1, 1,
+  5, 0, 0,  3, 1, 1,
+  4, 0, 0,  2, 1, 1,
+  3, 0, 0,  1, 1, 1,
+  2, 0, 0,  0, 1, 1,
+  1, 0, 1,
+  0, 0, 1,
+
+  0, 0, 1,     // Extra delay
+
+  0, 9, 0,     // End marker
+
+} ;
+
+
+int main (void)
+{
+  int pin ;
+  int dataPtr ;
+  int l, s, d ;
+
+  printf ("Raspberry Pi - Gertboard 12-LED Sequence\n") ;
+
+  wiringPiSetup () ;
+
+  for (pin = 0 ; pin < 14 ; ++pin)
+    pinMode (pin, OUTPUT) ;
+
+  dataPtr = 0 ;
+
+  for (;;)
+  {
+    l = data [dataPtr++] ;     // LED
+    s = data [dataPtr++] ;     // State
+    d = data [dataPtr++] ;     // Duration (10ths)
+
+    if (s == 9)                        // 9 -> End Marker
+    {
+      dataPtr = 0 ;
+      continue ;
+    }
+
+    digitalWrite (l, s) ;
+    delay        (d * 100) ;
+  }
+
+  return 0 ;
+}
diff --git a/blink8.c b/blink8.c
new file mode 100644 (file)
index 0000000..cdbed46
--- /dev/null
+++ b/blink8.c
@@ -0,0 +1,38 @@
+/*
+ * blink8.c:
+ *     Simple sequence over the first 8 LEDs.
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+int main (void)
+{
+  int i, led ;
+
+  printf ("Raspberry Pi - Gertboard 8-LED Sequence\n") ;
+
+  wiringPiSetup () ;
+
+  for (i = 0 ; i < 8 ; ++i)
+    pinMode (i, OUTPUT) ;
+
+  for (;;)
+  {
+    for (led = 0 ; led < 8 ; ++led)
+    {
+      digitalWrite (led, 1) ;
+      delay (100) ;
+    }
+
+    for (led = 0 ; led < 8 ; ++led)
+    {
+      digitalWrite (led, 0) ;
+      delay (100) ;
+    }
+  }
+}
diff --git a/buttons.c b/buttons.c
new file mode 100644 (file)
index 0000000..2cb5bd2
--- /dev/null
+++ b/buttons.c
@@ -0,0 +1,68 @@
+/*
+ * buttons.c:
+ *     Read the Gertboard buttons. Each one will act as an on/off
+ *     tiggle switch for 3 different LEDs
+ *
+ * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
+ ***********************************************************************
+ */
+
+
+#include <stdio.h>
+#include <wiringPi.h>
+
+// Array to keep track of our LEDs
+
+int leds [] = { 0, 0, 0 } ;
+
+// scanButton:
+//     See if a button is pushed, if so, then flip that LED and
+//     wait for the button to be let-go
+
+void scanButton (int button)
+{
+  if (digitalRead (button) == HIGH)    // Low is pushed
+    return ;
+
+  leds [button] ^= 1 ; // Invert state
+  digitalWrite (4 + button, leds [button]) ;
+
+  while (digitalRead (button) == LOW)  // Wait for release
+    delay (10) ;
+}
+
+int main (void)
+{
+  int i ;
+
+  printf ("Raspberry Pi Gertboard Button Test\n") ;
+
+  wiringPiSetup () ;
+
+// Setup the outputs:
+//     Pins 3, 4, 5, 6 and 7 output:
+//     We're not using 3 or 4, but make sure they're off anyway
+//     (Using same hardware config as blink12.c)
+
+  for (i = 3 ; i < 8 ; ++i)
+  {
+    pinMode      (i, OUTPUT) ;
+    digitalWrite (i, 0) ;
+  }
+
+// Setup the inputs
+
+  for (i = 0 ; i < 3 ; ++i)
+  {
+    pinMode         (i, INPUT) ;
+    pullUpDnControl (i, PUD_UP) ;
+    leds [i] = 0 ;
+  }
+
+  for (;;)
+  {
+    for (i = 0 ; i < 3 ; ++i)
+      scanButton (i) ;
+    delay (1) ;
+  }
+}