/* * 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 . *********************************************************************** */ #include #include #include #include #include #define PIGLOW_BASE 533 #ifndef TRUE # define TRUE (1==1) # define FALSE (!TRUE) #endif /* * 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) ; } } #define LEG_STEPS 3 static int legSequence [] = { 4, 12, 99, 99, 4, 12, 12, 99, 4, } ; #define RING_STEPS 16 static int ringSequence [] = { 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 64, 64, 0, 0, 0, 64, 64, 0, 0, 0, 64, 64, 0, 0, 0, 64, 64, 0, 0, 0, 64, 64, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, } ; /* * main: * Our little demo prgoram ********************************************************************************* */ int main (void) { int i ; int step, 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 (1) ; // 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 (step = 0 ; step < LEG_STEPS ; ++step) { for (leg = 0 ; leg < 3 ; ++leg) piGlowLeg (leg, legSequence [step * 3 + leg]) ; delay (80) ; } for (i = 0 ; i < 10 ; ++i) for (step = 0 ; step < RING_STEPS ; ++step) { for (ring = 0 ; ring < 6 ; ++ring) piGlowRing (ring, ringSequence [step * 6 + ring]) ; delay (80) ; } 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 ; }