che*_*505 0 serial-port arduino
我正在做一个用arduino制作响铃的项目,当我第一次尝试时,它的工作方式我想要它(wait(Serial.read())),但现在我需要0通过串口发送100 多个才能显示4秒 这是我的Java代码:
为长期做准备
Main.ringBell("100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
public static void ringBell(String length) throws Exception {
output.write(length.getBytes());
output.flush();
}
Run Code Online (Sandbox Code Playgroud)
这是Arduino草图:
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0) {
digitalWrite(ledPin, HIGH);
delay(Serial.read());
digitalWrite(ledPin, LOW);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人在我的代码中看到错误?如果是这样,请告诉我什么是错的,我会解决它.
谢谢.
你没有向arduino发送一个大数字,而是发送几个ASCII字节.Arduino会看到这个序列:
49, 48, 48, 48, 48, 48, ...
Run Code Online (Sandbox Code Playgroud)
在每个循环中,它将读取一个字节并等待该毫秒数.49或48毫秒不是很长时间.所以你所拥有的是LED的恒定闪烁,这是用眼睛快速看到的.
接下来是:您正在一次刷新中发送字节.但是Arduino只有一个64字节的小内部缓冲区(参见可用的文档).其余的都被遗忘了.
让我们大致计算:64字节*(每字节48毫秒延迟)是3072毫秒.是的,这听起来似乎有道理.
接下来的事情是:delay只能处理unsigned long32位类型的参数,转换为可以等待的约4,000,000,000毫秒.你的论点Main超出了这个限度.
所以:最简单的方法是使用parseInt而不是read.并且Main仅提供正数范围内的数字int(0 .. 32767).Main在发送下一个之前还要做一些延迟ringBell.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |