# 接线图
# 树莓派管脚图
# 代码
| #include <wiringPi.h> |
| #include <stdio.h> |
| |
| #define TiltPin 0 |
| #define Gpin 1 |
| #define Rpin 2 |
| |
| void LED(char* color) |
| { |
| pinMode(Gpin, OUTPUT); |
| pinMode(Rpin, OUTPUT); |
| if (color == "RED") |
| { |
| digitalWrite(Rpin, HIGH); |
| digitalWrite(Gpin, LOW); |
| } |
| else if (color == "GREEN") |
| { |
| digitalWrite(Rpin, LOW); |
| digitalWrite(Gpin, HIGH); |
| } |
| else |
| printf("LED Error"); |
| } |
| |
| int main(void) |
| { |
| if(wiringPiSetup() == -1){ |
| printf("setup wiringPi failed !"); |
| return 1; |
| } |
| |
| pinMode(TiltPin, INPUT); |
| LED("GREEN"); |
| |
| while(1){ |
| if(0 == digitalRead(TiltPin)){ |
| delay(10); |
| if(0 == digitalRead(TiltPin)){ |
| LED("RED"); |
| printf("Tilt!\n"); |
| } |
| } |
| else if(1 == digitalRead(TiltPin)){ |
| delay(10); |
| if(1 == digitalRead(TiltPin)){ |
| while(!digitalRead(TiltPin)); |
| LED("GREEN"); |
| } |
| } |
| } |
| return 0; |
| } |
编译命令: gcc tilt_switch.c -o tilt_switch -lwiringPi
# Python
| |
| import RPi.GPIO as GPIO |
| |
| TiltPin = 11 |
| Gpin = 12 |
| Rpin = 13 |
| |
| def setup(): |
| GPIO.setmode(GPIO.BOARD) |
| GPIO.setup(Gpin, GPIO.OUT) |
| GPIO.setup(Rpin, GPIO.OUT) |
| GPIO.setup(TiltPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) |
| GPIO.add_event_detect(TiltPin, GPIO.BOTH, callback=detect, bouncetime=200) |
| |
| def Led(x): |
| if x == 0: |
| GPIO.output(Rpin, 1) |
| GPIO.output(Gpin, 0) |
| if x == 1: |
| GPIO.output(Rpin, 0) |
| GPIO.output(Gpin, 1) |
| |
| def Print(x): |
| if x == 0: |
| print ' *************' |
| print ' * Tilt! *' |
| print ' *************' |
| |
| def detect(chn): |
| Led(GPIO.input(TiltPin)) |
| Print(GPIO.input(TiltPin)) |
| |
| def loop(): |
| while True: |
| pass |
| |
| def destroy(): |
| GPIO.output(Gpin, GPIO.HIGH) |
| GPIO.output(Rpin, GPIO.HIGH) |
| GPIO.cleanup() |
| |
| if __name__ == '__main__': |
| setup() |
| try: |
| loop() |
| except KeyboardInterrupt: |
| destroy() |