# 接线图
# 树莓派管脚图
# 代码
| #include <wiringPi.h> |
| #include <stdio.h> |
| |
| #define LBPin 0 |
| #define Gpin 1 |
| #define Rpin 2 |
| |
| void LED(int color) |
| { |
| pinMode(Gpin, OUTPUT); |
| pinMode(Rpin, OUTPUT); |
| if (color == 0){ |
| digitalWrite(Rpin, HIGH); |
| digitalWrite(Gpin, LOW); |
| } |
| else if (color == 1){ |
| digitalWrite(Rpin, LOW); |
| digitalWrite(Gpin, HIGH); |
| } |
| } |
| |
| void Print(int x){ |
| if ( x == 0 ){ |
| printf("Light was blocked\n"); |
| } |
| } |
| |
| int main(void){ |
| |
| if(wiringPiSetup() == -1){ |
| printf("setup wiringPi failed !"); |
| return 1; |
| } |
| |
| pinMode(LBPin, INPUT); |
| int temp; |
| while(1){ |
| |
| if ( digitalRead(LBPin) == 0 ){ |
| temp = 1; |
| } |
| if ( digitalRead(LBPin) == 1 ){ |
| temp = 0; |
| } |
| |
| LED(temp); |
| Print(temp); |
| } |
| return 0; |
| } |
编译命令: gcc photo_interrupter.c -o photo_interrupter -lwiringPi
# Python
| |
| import RPi.GPIO as GPIO |
| |
| PIPin = 11 |
| Gpin = 12 |
| Rpin = 13 |
| |
| def setup(): |
| GPIO.setmode(GPIO.BOARD) |
| GPIO.setup(Gpin, GPIO.OUT) |
| GPIO.setup(Rpin, GPIO.OUT) |
| GPIO.setup(PIPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) |
| GPIO.add_event_detect(PIPin, 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 == 1: |
| print ' *************************' |
| print ' * Light was blocked *' |
| print ' *************************' |
| |
| def detect(chn): |
| Led(GPIO.input(PIPin)) |
| Print(GPIO.input(PIPin)) |
| |
| 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() |