我正在做一个小项目,我使用 Web 界面(node + socket.io + node-serialport)将数据发送到串行端口,然后由 Arduino 读取以将引脚设置为高电平,为 LED 供电(我稍后将转换为模型火箭点火系统)。
我在下面的工作,但我遇到了两个基本问题,我想解决以确保可靠性:
- 为什么我必须在每个页面加载/串行连接之间重置 Arduino 才能使其正常工作?
- 为什么当我不限制执行多少次草图循环(通过x)时,即使我只发送一个字符,它也会连续将数据打印到串口?
草图
int led = 8;
int x = 0;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(x < 1) {
if(Serial.available() > 0) {
Serial.print(1);
digitalWrite(led, HIGH);
delay(5000);
digitalWrite(led, LOW);
x++;
}
}
}
app.js(为简洁起见)
socket.on('launch', function(data) {
for(var i = 5; i > 0; i--) {
socket.emit('countdown', { count: i });
if(i !== 1) {
sleep(1);
}
}
serialPort = new SerialPort("/dev/tty.usbserial-A6004amR", {
baudrate: 9600
});
serialPort.on('open', function (err) {
console.log('port opened... Press reset on the Arduino.');
serialPort.on('close', function (err) {
console.log('port closed');
});
serialPort.on('error', function (err) {
console.log('error: ' + err);
});
serialPort.on('data', function(data) {
// keeps getting 'data' events when x doesn't limit the loop
console.log('data received: ' + data);
});
serialPort.write(2, function(err, result) {
console.log('sent ' + result + ' chars.');
});
});