赞
踩
本次的震动开关还是一样的原理,但是代码有了不小改动。这个震动开关在震动时产生的高频信号是瞬间的,所以在接收了一次高频信号后切换一次,有点类似轻触开关的延迟。
#include <wiringPi.h> #include <stdio.h> #define VibratePin 0 #define Gpin 1 #define Rpin 2 int tmp = 0; 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); } else printf("LED Error"); } void Print(int x){ if (x != tmp){ if (x == 0) printf("...ON\n"); if (x == 1) printf("OFF..\n"); tmp = x; } } int main(void) { int status = 0; int tmp = 0; int value = 1; if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen printf("setup wiringPi failed !"); return 1; } pinMode(VibratePin, INPUT); while(1){ value = digitalRead(VibratePin); if (tmp != value){ status ++; if (status > 1){ status = 0; } LED(status); Print(status); delay(1000); } } return 0; }
PS:status
只是用来交替颜色使用,并没有计数。接收一次高频信号后,status得到1,再接收一次信号后status变成2后又归零,导致status只有0和1两个值。
#!/usr/bin/env python import RPi.GPIO as GPIO import time VibratePin = 11 Gpin = 12 Rpin = 13 tmp = 0 def setup(): GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location GPIO.setup(Gpin, GPIO.OUT) # Set Green Led Pin mode to output GPIO.setup(Rpin, GPIO.OUT) # Set Red Led Pin mode to output GPIO.setup(VibratePin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set BtnPin's mode is input, and pull up to high level(3.3V) 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): global tmp if x != tmp: if x == 0: print ' **********' print ' * ON *' print ' **********' if x == 1: print ' **********' print ' * OFF *' print ' **********' tmp = x def loop(): state = 0 while True: if GPIO.input(VibratePin): state = state + 1 if state > 1: state = 0 Led(state) Print(state) time.sleep(1) def destroy(): GPIO.output(Gpin, GPIO.HIGH) # Green led off GPIO.output(Rpin, GPIO.HIGH) # Red led off GPIO.cleanup() # Release resource if __name__ == '__main__': # Program start from here setup() try: loop() except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed. destroy()
python编程也是如此,利用同样的逻辑,不过利用input引脚是否接收到信号,以接收到为准,改变status。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。