根据函数返回的值控制LED的闪烁



我根据函数返回的值编写了一个代码,以闪烁LED。如果函数"眨眼"返回true,则LED必须眨眼,并且返回的值为false,则LED不会闪烁。我想做的是,我希望根据功能返回的值眨眼或不要眨眼。当前,当我运行代码时,LED仅眨眼一次,停止而不是在函数返回时保持眨眼。任何建议都将不胜感激。

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;
  }
}

好吧,看起来您的arduino loop闪烁代码仅基于条件Serial.available(),并且与可能从串行端口中脱离的值完全没有连接。您的Serial.read()在该块的末端;它应该在开始,您应该根据 value 眨眼或不眨眼。

我不确定这是这里唯一的问题,但是当然,您需要进行更改才能使其正如您所描述的。

更多提示:

  1. 确保您的串行发件人通过使用终端模拟器或受信任的设备来验证您正在发送您认为发送的内容来发送您的想法。您可以整天使用Arduino方面修补,如果您的发件人不发送正确的数据,您将感到沮丧。另一台PC和无效调制解调器电缆在这里可能是无价的。

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

  3. 完成此工作后,如果您有其他可以使用串行通信的项目,请考虑制作一个可以做到这一点的Arduino - 使其成为一个受信任的设备,以便您可以通过受信任的设备排除这些问题。我在一个永久板上设置了一个微控制器,以确切地做到这一点,当它获得9600 bps的串行流量时眨眼。那是我的RS232 Hello World"设备。(

  4. 在Arduino侧,考虑闪烁周围的条件代码,以便loop nothing ,但按照您想要的方式闪烁LED。这样,您至少知道这在起作用。喜欢:

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

最新更新