mirror of
git://soft.sys114.com/WiringPi2-Python
synced 2026-02-06 12:07:21 +09:00
Updated to latest WiringPi
This commit is contained in:
@@ -36,13 +36,14 @@ LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
###############################################################################
|
||||
|
||||
SRC = blink.c blink8.c blink12.c \
|
||||
blink12drcs.c \
|
||||
pwm.c \
|
||||
speed.c wfi.c isr.c isr-osc.c \
|
||||
lcd.c lcd-adafruit.c clock.c \
|
||||
nes.c \
|
||||
softPwm.c softTone.c \
|
||||
delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \
|
||||
rht03.c
|
||||
rht03.c piglow.c
|
||||
|
||||
OBJ = $(SRC:.c=.o)
|
||||
|
||||
@@ -63,6 +64,10 @@ blink8: blink8.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ blink8.o $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
blink12drcs: blink12drcs.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ blink12drcs.o $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
blink12: blink12.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ blink12.o $(LDFLAGS) $(LDLIBS)
|
||||
@@ -139,6 +144,10 @@ ds1302: ds1302.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
piglow: piglow.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
|
||||
.c.o:
|
||||
@echo [CC] $<
|
||||
|
||||
79
WiringPi/examples/PiGlow/Makefile
Normal file
79
WiringPi/examples/PiGlow/Makefile
Normal file
@@ -0,0 +1,79 @@
|
||||
#
|
||||
# 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 piglow.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)
|
||||
|
||||
piglow: piglow.o
|
||||
@echo [link]
|
||||
@$(CC) -o $@ piglow.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)
|
||||
|
||||
install: piglow
|
||||
@echo Installing piglow into /usr/local/bin
|
||||
@cp -a piglow /usr/local/bin/piglow
|
||||
@chmod 755 /usr/local/bin/piglow
|
||||
@echo Done. Remember to load the I2C drivers!
|
||||
|
||||
depend:
|
||||
makedepend -Y $(SRC)
|
||||
|
||||
# DO NOT DELETE
|
||||
51
WiringPi/examples/PiGlow/piGlow0.c
Normal file
51
WiringPi/examples/PiGlow/piGlow0.c
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* piglow.c:
|
||||
* Very simple demonstration of the PiGlow board.
|
||||
* This uses the SN3218 directly - soon there will be a new PiGlow
|
||||
* devLib device which will handle the PiGlow board on a more easy
|
||||
* to use manner...
|
||||
*
|
||||
* 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>
|
||||
|
||||
#define LED_BASE 533
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int i, j ;
|
||||
|
||||
wiringPiSetupSys () ;
|
||||
|
||||
sn3218Setup (LED_BASE) ;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (i = 0 ; i < 256 ; ++i)
|
||||
for (j = 0 ; j < 18 ; ++j)
|
||||
analogWrite (LED_BASE + j, i) ;
|
||||
|
||||
for (i = 255 ; i >= 0 ; --i)
|
||||
for (j = 0 ; j < 18 ; ++j)
|
||||
analogWrite (LED_BASE + j, i) ;
|
||||
}
|
||||
}
|
||||
258
WiringPi/examples/PiGlow/piGlow1.c
Normal file
258
WiringPi/examples/PiGlow/piGlow1.c
Normal file
@@ -0,0 +1,258 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
#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 ;
|
||||
}
|
||||
176
WiringPi/examples/PiGlow/piglow.c
Normal file
176
WiringPi/examples/PiGlow/piglow.c
Normal file
@@ -0,0 +1,176 @@
|
||||
/*
|
||||
* piglow.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 <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef TRUE
|
||||
# define TRUE (1==1)
|
||||
# define FALSE (!TRUE)
|
||||
#endif
|
||||
|
||||
#include <wiringPi.h>
|
||||
#include <piGlow.h>
|
||||
|
||||
static void failUsage (void)
|
||||
{
|
||||
fprintf (stderr, "Usage examples:\n") ;
|
||||
fprintf (stderr, " piglow off # All off\n") ;
|
||||
fprintf (stderr, " piglow red 50 # Light the 3 red LEDs to 50%%\n") ;
|
||||
fprintf (stderr, " colours are: red, yellow, orange, green, blue and white\n") ;
|
||||
fprintf (stderr, " piglow all 75 # Light all to 75%%\n") ;
|
||||
fprintf (stderr, " piglow leg 0 25 # Light leg 0 to 25%%\n") ;
|
||||
fprintf (stderr, " piglow ring 3 100 # Light ring 3 to 100%%\n") ;
|
||||
fprintf (stderr, " piglow led 2 5 100 # Light the single LED on Leg 2, ring 5 to 100%%\n") ;
|
||||
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
|
||||
static int getPercent (char *typed)
|
||||
{
|
||||
int percent ;
|
||||
|
||||
percent = atoi (typed) ;
|
||||
if ((percent < 0) || (percent > 100))
|
||||
{
|
||||
fprintf (stderr, "piglow: percent value out of range\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
return (percent * 255) / 100 ;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* main:
|
||||
* Our little demo prgoram
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
int main (int argc, char *argv [])
|
||||
{
|
||||
int percent ;
|
||||
int ring, leg ;
|
||||
|
||||
// Always initialise wiringPi:
|
||||
// Use the Sys method if you don't need to run as root
|
||||
|
||||
wiringPiSetupSys () ;
|
||||
|
||||
// Initialise the piGlow devLib
|
||||
|
||||
piGlowSetup (FALSE) ;
|
||||
|
||||
if (argc == 1)
|
||||
failUsage () ;
|
||||
|
||||
if ((argc == 2) && (strcasecmp (argv [1], "off") == 0))
|
||||
{
|
||||
for (leg = 0 ; leg < 3 ; ++leg)
|
||||
piGlowLeg (leg, 0) ;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
if (argc == 3)
|
||||
{
|
||||
percent = getPercent (argv [2]) ;
|
||||
|
||||
/**/ if (strcasecmp (argv [1], "red") == 0)
|
||||
piGlowRing (PIGLOW_RED, percent) ;
|
||||
else if (strcasecmp (argv [1], "yellow") == 0)
|
||||
piGlowRing (PIGLOW_YELLOW, percent) ;
|
||||
else if (strcasecmp (argv [1], "orange") == 0)
|
||||
piGlowRing (PIGLOW_ORANGE, percent) ;
|
||||
else if (strcasecmp (argv [1], "green") == 0)
|
||||
piGlowRing (PIGLOW_GREEN, percent) ;
|
||||
else if (strcasecmp (argv [1], "blue") == 0)
|
||||
piGlowRing (PIGLOW_BLUE, percent) ;
|
||||
else if (strcasecmp (argv [1], "white") == 0)
|
||||
piGlowRing (PIGLOW_WHITE, percent) ;
|
||||
else if (strcasecmp (argv [1], "all") == 0)
|
||||
for (ring = 0 ; ring < 6 ; ++ring)
|
||||
piGlowRing (ring, percent) ;
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "piglow: invalid colour\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
if (argc == 4)
|
||||
{
|
||||
/**/ if (strcasecmp (argv [1], "leg") == 0)
|
||||
{
|
||||
leg = atoi (argv [2]) ;
|
||||
if ((leg < 0) || (leg > 2))
|
||||
{
|
||||
fprintf (stderr, "piglow: leg value out of range\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
percent = getPercent (argv [3]) ;
|
||||
piGlowLeg (leg, percent) ;
|
||||
}
|
||||
else if (strcasecmp (argv [1], "ring") == 0)
|
||||
{
|
||||
ring = atoi (argv [2]) ;
|
||||
if ((ring < 0) || (ring > 5))
|
||||
{
|
||||
fprintf (stderr, "piglow: ring value out of range\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
percent = getPercent (argv [3]) ;
|
||||
piGlowRing (ring, percent) ;
|
||||
}
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
if (argc == 5)
|
||||
{
|
||||
if (strcasecmp (argv [1], "led") != 0)
|
||||
failUsage () ;
|
||||
|
||||
leg = atoi (argv [2]) ;
|
||||
if ((leg < 0) || (leg > 2))
|
||||
{
|
||||
fprintf (stderr, "piglow: leg value out of range\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
ring = atoi (argv [3]) ;
|
||||
if ((ring < 0) || (ring > 5))
|
||||
{
|
||||
fprintf (stderr, "piglow: ring value out of range\n") ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
percent = getPercent (argv [4]) ;
|
||||
piGlow1 (leg, ring, percent) ;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
failUsage () ;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
# LED Pin - wiringPi pin 0 is BCM_GPIO 17.
|
||||
|
||||
LED=0
|
||||
PIN=0
|
||||
|
||||
gpio mode $PIN out
|
||||
|
||||
|
||||
125
WiringPi/examples/blink12drcs.c
Normal file
125
WiringPi/examples/blink12drcs.c
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* blink12drcs.c:
|
||||
* Simple sequence over the first 12 GPIO pins - LEDs
|
||||
* Aimed at the Gertboard, but it's fairly generic.
|
||||
* This version uses DRC totalk to the ATmega on the Gertboard
|
||||
*
|
||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
|
||||
***********************************************************************
|
||||
* 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 <wiringPi.h>
|
||||
#include <drcSerial.h>
|
||||
|
||||
#define GERT_BASE 100
|
||||
|
||||
static int pinMap [] =
|
||||
{
|
||||
0, 1, 2, 3, // Pi Native
|
||||
GERT_BASE + 2, GERT_BASE + 3, GERT_BASE + 4, GERT_BASE + 5,
|
||||
GERT_BASE + 6, GERT_BASE + 7, GERT_BASE + 8, GERT_BASE + 9,
|
||||
} ;
|
||||
|
||||
// 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, 8, 1, 1,
|
||||
7, 0, 0, 9, 1, 1,
|
||||
8, 0, 0, 10, 1, 1,
|
||||
9, 0, 0, 11, 1, 1,
|
||||
10, 0, 1,
|
||||
11, 0, 1,
|
||||
|
||||
0, 0, 1, // Extra delay
|
||||
|
||||
// Back again
|
||||
|
||||
11, 1, 1,
|
||||
10, 1, 1,
|
||||
11, 0, 0, 9, 1, 1,
|
||||
10, 0, 0, 8, 1, 1,
|
||||
9, 0, 0, 7, 1, 1,
|
||||
8, 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 - 12-LED Sequence\n") ;
|
||||
printf ("==============================\n") ;
|
||||
printf ("\n") ;
|
||||
printf ("Connect LEDs up to the first 4 Pi pins and 8 pins on the ATmega\n") ;
|
||||
printf (" from PD2 through PB1 in that order,\n") ;
|
||||
printf (" then sit back and watch the show!\n") ;
|
||||
|
||||
wiringPiSetup () ;
|
||||
drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ;
|
||||
|
||||
for (pin = 0 ; pin < 12 ; ++pin)
|
||||
pinMode (pinMap [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 (pinMap [l], s) ;
|
||||
delay (d * analogRead (GERT_BASE) / 4) ;
|
||||
}
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
115
WiringPi/examples/blink6drcs.c
Normal file
115
WiringPi/examples/blink6drcs.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* blink6drcs.c:
|
||||
* Simple sequence over 6 pins on a remote DRC board.
|
||||
* Aimed at the Gertduino, but it's fairly generic.
|
||||
* This version uses DRC to talk to the ATmega on the Gertduino
|
||||
*
|
||||
* Copyright (c) 2012-2014 Gordon Henderson. <projects@drogon.net>
|
||||
***********************************************************************
|
||||
* 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 <wiringPi.h>
|
||||
#include <drcSerial.h>
|
||||
|
||||
#define GERT_BASE 100
|
||||
|
||||
static int pinMap [] =
|
||||
{
|
||||
GERT_BASE + 6, GERT_BASE + 5, GERT_BASE + 3, GERT_BASE + 10, GERT_BASE + 9, GERT_BASE + 13,
|
||||
} ;
|
||||
|
||||
// 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, 1,
|
||||
5, 0, 1,
|
||||
|
||||
0, 0, 1, // Extra delay
|
||||
|
||||
// Back again
|
||||
|
||||
5, 1, 1,
|
||||
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 - 6-LED Sequence\n") ;
|
||||
printf ("=============================\n") ;
|
||||
printf ("\n") ;
|
||||
printf (" Use the 2 buttons to temporarily speed up the sequence\n") ;
|
||||
|
||||
wiringPiSetupSys () ; // Not using the Pi's GPIO here
|
||||
drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ;
|
||||
|
||||
for (pin = 0 ; pin < 6 ; ++pin)
|
||||
pinMode (pinMap [pin], OUTPUT) ;
|
||||
|
||||
pinMode (GERT_BASE + 16, INPUT) ; // Buttons
|
||||
pinMode (GERT_BASE + 17, INPUT) ;
|
||||
|
||||
pullUpDnControl (GERT_BASE + 16, PUD_UP) ;
|
||||
pullUpDnControl (GERT_BASE + 17, PUD_UP) ;
|
||||
|
||||
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 (pinMap [l], s) ;
|
||||
delay (d * digitalRead (GERT_BASE + 16) * 15 + digitalRead (GERT_BASE + 17) * 20) ;
|
||||
}
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
238
WiringPi/examples/ds1302.c
Normal file
238
WiringPi/examples/ds1302.c
Normal file
@@ -0,0 +1,238 @@
|
||||
/*
|
||||
* ds1302.c:
|
||||
* Real Time clock
|
||||
*
|
||||
* 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 <stdint.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <wiringPi.h>
|
||||
#include <ds1302.h>
|
||||
|
||||
// Register defines
|
||||
|
||||
#define RTC_SECS 0
|
||||
#define RTC_MINS 1
|
||||
#define RTC_HOURS 2
|
||||
#define RTC_DATE 3
|
||||
#define RTC_MONTH 4
|
||||
#define RTC_DAY 5
|
||||
#define RTC_YEAR 6
|
||||
#define RTC_WP 7
|
||||
#define RTC_TC 8
|
||||
#define RTC_BM 31
|
||||
|
||||
|
||||
static unsigned int masks [] = { 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x07, 0xFF } ;
|
||||
|
||||
|
||||
/*
|
||||
* bcdToD: dToBCD:
|
||||
* BCD decode/encode
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
static int bcdToD (unsigned int byte, unsigned int mask)
|
||||
{
|
||||
unsigned int b1, b2 ;
|
||||
byte &= mask ;
|
||||
b1 = byte & 0x0F ;
|
||||
b2 = ((byte >> 4) & 0x0F) * 10 ;
|
||||
return b1 + b2 ;
|
||||
}
|
||||
|
||||
static unsigned int dToBcd (unsigned int byte)
|
||||
{
|
||||
return ((byte / 10) << 4) + (byte % 10) ;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ramTest:
|
||||
* Simple test of the 31 bytes of RAM inside the DS1302 chip
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
static int ramTestValues [] =
|
||||
{ 0x00, 0xFF, 0xAA, 0x55, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0xF0, 0x0F, -1 } ;
|
||||
|
||||
static int ramTest (void)
|
||||
{
|
||||
int addr ;
|
||||
int got ;
|
||||
int i = 0 ;
|
||||
int errors = 0 ;
|
||||
int testVal ;
|
||||
|
||||
printf ("DS1302 RAM TEST\n") ;
|
||||
|
||||
testVal = ramTestValues [i] ;
|
||||
|
||||
while (testVal != -1)
|
||||
{
|
||||
for (addr = 0 ; addr < 31 ; ++addr)
|
||||
ds1302ramWrite (addr, testVal) ;
|
||||
|
||||
for (addr = 0 ; addr < 31 ; ++addr)
|
||||
if ((got = ds1302ramRead (addr)) != testVal)
|
||||
{
|
||||
printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n",
|
||||
addr, testVal, got) ;
|
||||
++errors ;
|
||||
}
|
||||
testVal = ramTestValues [++i] ;
|
||||
}
|
||||
|
||||
for (addr = 0 ; addr < 31 ; ++addr)
|
||||
ds1302ramWrite (addr, addr) ;
|
||||
|
||||
for (addr = 0 ; addr < 31 ; ++addr)
|
||||
if ((got = ds1302ramRead (addr)) != addr)
|
||||
{
|
||||
printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n",
|
||||
addr, addr, got) ;
|
||||
++errors ;
|
||||
}
|
||||
|
||||
if (errors == 0)
|
||||
printf ("-- DS1302 RAM TEST: OK\n") ;
|
||||
else
|
||||
printf ("-- DS1302 RAM TEST FAILURE. %d errors.\n", errors) ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
/*
|
||||
* setLinuxClock:
|
||||
* Set the Linux clock from the hardware
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
static int setLinuxClock (void)
|
||||
{
|
||||
char dateTime [20] ;
|
||||
char command [64] ;
|
||||
int clock [8] ;
|
||||
|
||||
|
||||
printf ("Setting the Linux Clock from the DS1302... ") ; fflush (stdout) ;
|
||||
|
||||
ds1302clockRead (clock) ;
|
||||
|
||||
// [MMDDhhmm[[CC]YY][.ss]]
|
||||
|
||||
sprintf (dateTime, "%02d%02d%02d%02d%02d%02d.%02d",
|
||||
bcdToD (clock [RTC_MONTH], masks [RTC_MONTH]),
|
||||
bcdToD (clock [RTC_DATE], masks [RTC_DATE]),
|
||||
bcdToD (clock [RTC_HOURS], masks [RTC_HOURS]),
|
||||
bcdToD (clock [RTC_MINS], masks [RTC_MINS]),
|
||||
20,
|
||||
bcdToD (clock [RTC_YEAR], masks [RTC_YEAR]),
|
||||
bcdToD (clock [RTC_SECS], masks [RTC_SECS])) ;
|
||||
|
||||
sprintf (command, "/bin/date %s", dateTime) ;
|
||||
system (command) ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* setDSclock:
|
||||
* Set the DS1302 block from Linux time
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
static int setDSclock (void)
|
||||
{
|
||||
struct tm t ;
|
||||
time_t now ;
|
||||
int clock [8] ;
|
||||
|
||||
printf ("Setting the clock in the DS1302 from Linux time... ") ;
|
||||
|
||||
now = time (NULL) ;
|
||||
gmtime_r (&now, &t) ;
|
||||
|
||||
clock [ 0] = dToBcd (t.tm_sec) ; // seconds
|
||||
clock [ 1] = dToBcd (t.tm_min) ; // mins
|
||||
clock [ 2] = dToBcd (t.tm_hour) ; // hours
|
||||
clock [ 3] = dToBcd (t.tm_mday) ; // date
|
||||
clock [ 4] = dToBcd (t.tm_mon + 1) ; // months 0-11 --> 1-12
|
||||
clock [ 5] = dToBcd (t.tm_wday + 1) ; // weekdays (sun 0)
|
||||
clock [ 6] = dToBcd (t.tm_year - 100) ; // years
|
||||
clock [ 7] = 0 ; // W-Protect off
|
||||
|
||||
ds1302clockWrite (clock) ;
|
||||
|
||||
printf ("OK\n") ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int main (int argc, char *argv [])
|
||||
{
|
||||
int i ;
|
||||
int clock [8] ;
|
||||
|
||||
wiringPiSetup () ;
|
||||
ds1302setup (0, 1, 2) ;
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
/**/ if (strcmp (argv [1], "-slc") == 0)
|
||||
return setLinuxClock () ;
|
||||
else if (strcmp (argv [1], "-sdsc") == 0)
|
||||
return setDSclock () ;
|
||||
else if (strcmp (argv [1], "-rtest") == 0)
|
||||
return ramTest () ;
|
||||
else
|
||||
{
|
||||
printf ("Usage: ds1302 [-slc | -sdsc | -rtest]\n") ;
|
||||
return EXIT_FAILURE ;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0 ;; ++i)
|
||||
{
|
||||
printf ("%5d: ", i) ;
|
||||
|
||||
ds1302clockRead (clock) ;
|
||||
printf (" %2d:%02d:%02d",
|
||||
bcdToD (clock [2], masks [2]), bcdToD (clock [1], masks [1]), bcdToD (clock [0], masks [0])) ;
|
||||
|
||||
printf (" %2d/%02d/%04d",
|
||||
bcdToD (clock [3], masks [3]), bcdToD (clock [4], masks [4]), bcdToD (clock [6], masks [6]) + 2000) ;
|
||||
|
||||
printf ("\n") ;
|
||||
|
||||
delay (200) ;
|
||||
}
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
@@ -56,6 +56,11 @@ int main (void)
|
||||
{
|
||||
temp = newTemp ;
|
||||
rh = newRh ;
|
||||
if ((temp & 0x8000) != 0) // Negative
|
||||
{
|
||||
temp &= 0x7FFF ;
|
||||
temp = -temp ;
|
||||
}
|
||||
printf ("Temp: %5.1f, RH: %5.1f%%\n", temp / 10.0, rh / 10.0) ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user