static void doGbr (int argc, char *argv []) { int channel ; if (argc != 3) { fprintf (stderr, "Usage: %s gbr <channel>\n", argv [0]) ; exit (1) ; } channel = atoi (argv [2]) ; if ((channel < 0) || (channel > 1)) { fprintf (stderr, "%s: channel must be 0 or 1\n", argv [0]) ; exit (1) ; } if (gertboardSPISetup () == -1) { fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ; exit (1) ; } printf ("%d\n",gertboardAnalogRead (channel)) ; }
static void doGbw (int argc, char *argv []) { int channel, value ; if (argc != 4) { fprintf (stderr, "Usage: %s gbr <channel> <value>\n", argv [0]) ; exit (1) ; } channel = atoi (argv [2]) ; value = atoi (argv [3]) ; if ((channel < 0) || (channel > 1)) { fprintf (stderr, "%s: channel must be 0 or 1\n", argv [0]) ; exit (1) ; } if ((value < 0) || (value > 1023)) { fprintf (stderr, "%s: value must be from 0 to 255\n", argv [0]) ; exit (1) ; } if (gertboardSPISetup () == -1) { fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ; exit (1) ; } gertboardAnalogWrite (channel, value) ; }
int main () { int quietLevel, min, max ; int i, sum ; unsigned int tStart, tEnd ; printf ("\n") ; printf ("Gertboard demo: VU Meter\n") ; printf ("========================\n") ; wiringPiSetup () ; gertboardSPISetup () ; ledPercent (0) ; for (i = 0 ; i < 8 ; ++i) pinMode (i, OUTPUT) ; for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr) buffer [bPtr] = 99 ; tPeriod = 1000000 / 1000 ; printf ("Shhhh.... ") ; fflush (stdout) ; delay (1000) ; printf ("Sampling quiet... ") ; fflush (stdout) ; tStart = micros () ; tNextSampleTime = micros () ; for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr) sample () ; tEnd = micros () ; quietLevel = 0 ; max = 0 ; min = 1024 ; for (i = 0 ; i < B_SIZE ; ++i) { quietLevel += buffer [i] ; if (buffer [i] > max) max = buffer [i] ; if (buffer [i] < min) min = buffer [i] ; } quietLevel /= B_SIZE ; printf ("Done. Quiet level is: %d [%d:%d] [%d:%d]\n", quietLevel, min, max, quietLevel - min, max - quietLevel) ; printf ("Time taken for %d reads: %duS\n", B_SIZE, tEnd - tStart) ; for (bPtr = 0 ;;) { sample () ; sum = 0 ; for (i = 0 ; i < S_SIZE ; ++i) sum += buffer [i] ; sum /= S_SIZE ; sum = abs (quietLevel - sum) ; sum = (sum * 1000) / quietLevel ; ledPercent (sum) ; if (++bPtr > S_SIZE) bPtr = 0 ; } return 0 ; }