私は、Web インターフェイス (node + socket.io + node- serialport ) を使用してデータをシリアル ポートに送信し、Arduino によって読み取られてピンを HIGH に設定し、 LED に電力を供給する小さなプロジェクトに取り組んでいます。 (後でロケット点火システムのモデルに変換します)。
私が以下に持っているものは機能しますが、信頼性を確保するために解決したい2つの基本的な問題が発生しました:
- これを機能させるには、各ページの読み込み/シリアル接続の間に 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.');
});
});