根据函数

时间:2017-06-04 11:39:26

标签: python function arduino pyserial

我根据函数返回的值编写了一个闪烁LED的代码。如果功能" blinktheLED"返回TRUE,然后LED必须闪烁,如果返回的值为False,则LED不闪烁。我想要做的是,我希望LED根据函数返回的值闪烁或不闪烁。目前,当我运行代码时,LED只会闪烁一次并停止而不是继续闪烁,因为函数返回TRUE。任何建议将受到高度赞赏。

set_accepted_list = set(['1','3','112','29'])
set_list_LED_id   = set(['1','3'])
def blinktheLED(set_accepted_list,set_list_LED_id):
    if len(set_accepted_list &  set_list_LED_id) >0:
        print"yes,open the gate"                  #it will print, when i run the code
        return True
    else:
        print"no,donot open the gate"
        return False 

def code_controlling_gate(True):
    connected = False
    ser = serial.Serial("COM11",9600)  
    while not connected:
       serin = ser.read()
       connected = True
    ser.write('1')
    while ser.read() == '1':
       ser.read()
    ser.close()

Arduino代码:

void setup() {
Serial.begin(9600);
pinMode(10,OUTPUT);
Serial.write('1');
}
void loop() {
  Serial.read();
  if(Serial.available()>0){
    digitalWrite(10,HIGH);
    delay(500);
    digitalWrite(10,LOW);
    delay(500);
  }
  else{
    Serial.available()==0;
  }
}

1 个答案:

答案 0 :(得分:0)

好像你的Arduino loop闪烁代码只是根据条件Serial.available()运行,并且根本没有连接到可能从串口发出的值。你的Serial.read()就在那个街区的尽头;它应该在开头,你应该根据你收到的闪烁或不闪烁。

我不确定这是唯一的问题,但当然你需要做出改变,使其按照你的描述运作。

更多提示:

  1. 确保您的串行发件人使用终端模拟器或可信设备发送您的想法,以验证您是否正在发送您认为发送的内容。您可以整天修改Arduino方面,如果您的发件人没有发送正确的数据,您只会感到沮丧。另一台PC和零调制解调器电缆在这里非常宝贵。

  2. 确保所有串行参数都相同。速度,奇偶校验,数据库都必须匹配。检查连接的两侧以确保。我没有在您的代码中看到您设置数据位,奇偶校验或停止位的任何位置。

  3. 一旦你有了这个工作,如果你有其他项目将使用串行通信,考虑制作一个这样做的Arduino - 使它成为一个受信任的设备,以便您可以使用受信任的设备排除这些问题。我在永久性电路板上安装了一个微控制器来实现这一点,当它获得9600 bps的串行流量时会闪烁。这是我的RS232 Hello World“设备。;)

  4. 在Arduino方面,考虑在闪烁周围注释掉条件代码,以便loop执行但以您想要的方式闪烁LED。这样你至少知道这是有效的。像:

    digitalWrite(10,HIGH);
    delay(500);
    digitalWrite(10,LOW);
    delay(500);
    
  5. 最后,在您的代码中,您正在执行Serial.read()但不保存值以进行比较。您只需要一个字符来保存“1”或“0”,因此将Serial.read()的结果分配给变量,然后在循环中对其值进行操作。