简体   繁体   English

导致树莓派/ python控制的arduino问题

[英]Led issue with arduino controled by raspberry pi/python

I'm having an issue with 2 parts of my project. 我的项目有2个部分有问题。 I am using a raspberry pi to read and control a potentiometer and some leds. 我正在使用树莓派读取和控制电位计和一些LED。

1 when I'm controlling leds with a potentiometer my leds flash on my low threshold but not on my higher, how can I fix this? 1当我用电位计控制LED时,LED的闪光阈值低但不高,我该如何解决?

(Fixed)2 my potentiometer has to be set at 0 when first starting the script other wise I get abnormal reads from my potentiometer, how can I fix that? (已修复)2首次启动脚本时,必须将电位计设置为0,否则会从电位计中读取异常读数,该如何解决?

I have tried adding a delay before and after. 我尝试添加一个延迟之前和之后。 I've tried adding the center string before and no luck. 我试过添加中心字符串之前,没有运气。 I've searched for solutions all over Google with no luck. 我在整个Google上都在寻找解决方案,但是没有运气。 All I have found is script for the blink example. 我所发现的只是眨眼示例的脚本。

I have this script run on my raspberry pi through python to control my arduino. 我通过python在树莓派上运行此脚本以控制arduino。 If I have it posted in the wrong area please let me know where it should be posted so I can move it. 如果我将其张贴在错误的区域,请告诉我应该将其张贴在何处,以便我将其移动。

Here is my script! 这是我的剧本!

from nanpy import Arduino
from nanpy import serial_manager
from time import sleep

serial_manager.connect('/dev/ttyUSB0')

POT = 0
LED1 = 13
LED2 = 12
LED3 = 11
LED4 = 10
LED5 = 9
LED6 = 8
LED7 = 7
LED8 = 6

Arduino.pinMode(POT, Arduino.INPUT)
Arduino.pinMode(13, Arduino.OUTPUT)
Arduino.pinMode(12, Arduino.OUTPUT)
Arduino.pinMode(11, Arduino.OUTPUT)
Arduino.pinMode(10, Arduino.OUTPUT)
Arduino.pinMode(9, Arduino.OUTPUT)
Arduino.pinMode(8, Arduino.OUTPUT)
Arduino.pinMode(7, Arduino.OUTPUT)
Arduino.pinMode(6, Arduino.OUTPUT)

print "starting"
while True:
    pot = Arduino.analogRead(POT)
#this is the section that is blinking when it shouldn't
    if pot < 450:
        Arduino.digitalWrite(LED1, Arduino.HIGH)
        Arduino.digitalWrite(LED2, Arduino.HIGH)
        Arduino.digitalWrite(LED3, Arduino.HIGH)
        Arduino.digitalWrite(LED4, Arduino.HIGH)
        Arduino.digitalWrite(LED5, Arduino.LOW)
        Arduino.digitalWrite(LED6, Arduino.LOW)
        Arduino.digitalWrite(LED7, Arduino.LOW)
        Arduino.digitalWrite(LED8, Arduino.LOW)
        sleep(.5)
#
    if pot < 650 > 450:
        Arduino.digitalWrite(LED1, Arduino.LOW)
        Arduino.digitalWrite(LED2, Arduino.LOW)
        Arduino.digitalWrite(LED3, Arduino.LOW)
        Arduino.digitalWrite(LED4, Arduino.LOW)
        Arduino.digitalWrite(LED5, Arduino.LOW)
        Arduino.digitalWrite(LED6, Arduino.LOW)
        Arduino.digitalWrite(LED7, Arduino.LOW)
        Arduino.digitalWrite(LED8, Arduino.LOW)
        sleep(.1)
    if pot > 650:
        Arduino.digitalWrite(LED1, Arduino.LOW)
        Arduino.digitalWrite(LED2, Arduino.LOW)
        Arduino.digitalWrite(LED3, Arduino.LOW)
        Arduino.digitalWrite(LED4, Arduino.LOW)
        Arduino.digitalWrite(LED5, Arduino.HIGH)
        Arduino.digitalWrite(LED6, Arduino.HIGH)
        Arduino.digitalWrite(LED7, Arduino.HIGH)
        Arduino.digitalWrite(LED8, Arduino.HIGH)
        sleep(.5)
#    print pot

I see a problem at initialization, in this line: 我在初始化这一行看到一个问题:

POT = Arduino.analogRead(0)

Then, in the while, you use POT as a pin number here, but POT will be initialized in the line above as a variable: 然后,在此期间,您在此处使用POT作为引脚号,但是POT将在上面的行中初始化为变量:

pot = Arduino.analogRead(POT)

I think that's why you get unexpected behaviour. 我认为这就是为什么您会得到意想不到的行为。 I think that if you change the initialization of POT to POT=0 or the pin number that your pot is connected to (if it is not pin 0), it might work. 我认为,如果你改变的初始化POTPOT=0或者(如果它没有脚0),你的锅连接到引脚,它可能工作。

I figured it out. 我想到了。 The blink issue was not expected. 没想到眨眼问题。 However it was acting like the leds were set to an off delay for about .5 seconds. 但是,它的行为就像是将LED设置为关闭延迟约0.5秒。 Here is my new script. 这是我的新脚本。

from nanpy import Arduino
from nanpy import serial_manager
from time import sleep

serial_manager.connect('/dev/ttyUSB0')

POT = 0
LED1 = 13
LED2 = 12
LED3 = 11
LED4 = 10
LED5 = 9
LED6 = 8
LED7 = 7
LED8 = 6

Arduino.pinMode(POT, Arduino.INPUT)
Arduino.pinMode(13, Arduino.OUTPUT)
Arduino.pinMode(12, Arduino.OUTPUT)
Arduino.pinMode(11, Arduino.OUTPUT)
Arduino.pinMode(10, Arduino.OUTPUT)
Arduino.pinMode(9, Arduino.OUTPUT)
Arduino.pinMode(8, Arduino.OUTPUT)
Arduino.pinMode(7, Arduino.OUTPUT)
Arduino.pinMode(6, Arduino.OUTPUT)

print "starting"
while True:
    pot = Arduino.analogRead(POT)
    if pot < 450:
        Arduino.digitalWrite(LED1, Arduino.HIGH)
        Arduino.digitalWrite(LED2, Arduino.HIGH)
        Arduino.digitalWrite(LED3, Arduino.HIGH)
        Arduino.digitalWrite(LED4, Arduino.HIGH)
        Arduino.digitalWrite(LED5, Arduino.LOW)
        Arduino.digitalWrite(LED6, Arduino.LOW)
        Arduino.digitalWrite(LED7, Arduino.LOW)
        Arduino.digitalWrite(LED8, Arduino.LOW)
        sleep(.01)
    elif pot > 650:
        Arduino.digitalWrite(LED1, Arduino.LOW)
        Arduino.digitalWrite(LED2, Arduino.LOW)
        Arduino.digitalWrite(LED3, Arduino.LOW)
        Arduino.digitalWrite(LED4, Arduino.LOW)
        Arduino.digitalWrite(LED5, Arduino.HIGH)
        Arduino.digitalWrite(LED6, Arduino.HIGH)
        Arduino.digitalWrite(LED7, Arduino.HIGH)
        Arduino.digitalWrite(LED8, Arduino.HIGH)
        sleep(.01)
    else:
        Arduino.digitalWrite(LED1, Arduino.LOW)
        Arduino.digitalWrite(LED2, Arduino.LOW)
        Arduino.digitalWrite(LED3, Arduino.LOW)
        Arduino.digitalWrite(LED4, Arduino.LOW)
        Arduino.digitalWrite(LED5, Arduino.LOW)
        Arduino.digitalWrite(LED6, Arduino.LOW)
        Arduino.digitalWrite(LED7, Arduino.LOW)
        Arduino.digitalWrite(LED8, Arduino.LOW)
        sleep(.01)
    print pot

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM