我的项目是通过串行监视器发送'1'或'0'来控制LED。 我对这个项目的任务是当通过串行监视器发送'1'时,Led ON PIN 3需要每2000ms打开和关闭一次。然后,当通过串行监视器发送'0'时,需要关闭LED直到发送下一个'1',这样Led ON PIN 3可以再次打开和关闭2000ms。但它对我的代码不起作用,任何人都可以告诉我我的代码有什么问题。以下是我的代码:
char data = 0; //Variable for storing received data
void setup()
{
Serial.begin(115200); //Sets the baud for serial data transmission
pinMode(3, OUTPUT); //Sets digital pin 3 as output pin
}
void loop()
{
if(Serial.available()>0 ) // Send data only when you receive data:
{
data = Serial.read(); //Read the incoming data send via serial monitor & store into data
Serial.print(data); //Print Value inside data in Serial monitor
Serial.print("\n");
while(data == '1') //Do looping so that when '1' send via serial monitor, the LED can blink
{
digitalWrite(3, HIGH);
delay(2000);
digitalWrite(3, LOW);
delay(2000);
}
while(data == '0') // Checks whether value of data is equal to 0
digitalWrite(3, LOW); //If value is 0 then LED turns OFF
}
}
答案 0 :(得分:1)
你有几个明显的错误......主要是你已经将执行锁定到while循环中。因此,执行路径变为“while data ==”,当数据等于该值时,它将保持在那里。该值虽然不能改变,因为您只读取函数循环()开头的数据值。唯一可行的方法是if循环由定时器函数提供服务并在两个线程之间共享。
用ifs替换你的whiles,并使用while(1){loop();}运行它;你可能会发现它。 TBH,我在while循环级别添加Delay 2000,并且每2000mS只查询一次串口。在飞轮循环中锤击东西是不好的业力。
答案 1 :(得分:0)
更改循环的结构。
让循环每2000毫秒执行一次。如果有数据可从串行读取,则读取并解析它以更新for (String h : webDriver.getWindowHandles()) {
webDriver.switchTo().window(h);}
WebElement element= webDriver.findElement(By.xpath("//*[@id='Standard']/p[1]"));
Actions a = new Actions(webDriver);
a.moveToElement(element).build().perform();
/ 1
状态。
取决于状态,要么让LED的状态在打开和关闭之间切换,要么让它处于关闭状态。