0

也許這只是一個無稽之談,但它讓我發瘋。我試圖讀取Arduino中的一個模擬端口,並使用節點將值通過串口發送到JavaScript。當我在Arduino控制檯顯示數據時,一切正常,但是當我在Mac中使用終端時,某些值出現在兩行中。從模擬端口讀取時從Arduino串行接收的錯誤數據

460 
460 
4 
60 
460 

我正在使用的代碼是:

的Arduino:

const int analogInPin = A0; 
int sensorValue = 0; 

void setup() { 
    Serial.begin(500000); 
} 

void loop() { 
    sensorValue = analogRead(analogInPin); 
    Serial.print(sensorValue); 
    delay(200); 
} 

節點:

var com = require('serialport').SerialPort; 

var opts = {baudrate: 500000}; 

var serialPort = new com('/dev/tty.usbmodem641', opts); 

serialPort.on('data', function(data) { 
    console.log(data.toString()); 
}); 

代碼再簡單不過了,但仍然不好好工作。我知道我錯過了一些東西,但我看不到它。我測試了不同的波特率,但沒有做到。你可以幫我嗎?

在此先感謝

+0

'500000'看起來像一個不尋常的波特率值,並且預計會更容易受到噪音的影響。你有沒有試過像「115200」這樣更「標準」的波特率? – angelatlarge

+0

是的,我已經嘗試了其他波特率,仍然是一樣的。當我嘗試從ADC讀取一個數字(例如525)時,有時在通過串行端口讀取計算機時,有時會將它分成5和25。它也發生在例如1021(1-021,10-21)。 – Timbergus

回答

1

我想也許Elias Benevedes試圖在他們的回答中提出這個建議:現在你的Arduino數據不是在所有分隔假設你sensorValue總是讀爲1在這種情況下,從Arduino的輸出將是

11111111111111111111111111111111111111111111111111111111111.... 

等等;因​​爲你沒有任何分隔符打印整數值就被分成不同號碼的方式。 ,因此,與數據到達的時間有關,繼續上面的例子,有時你的值被讀作1,有時爲11,有時爲111等,這取決於讀取和寫入的時間。

開始修復它的方法是在您的傳感器讀數輸出之間插入一些非數字數據。一(同樣,這可能是什麼Elias Benevedes心中都有)是印刷

Serial.println(sensorValue); 

另一種方式的每個數字之間插入換行符將數據

Serial.print(sensorValue); 
Serial.print(" "); 

兩種解決方案將會分離之間添加空格你的數字讀數,這是你想要的。

+0

我現在正在嘗試。使用分隔符而不是相信從計算機讀取時間。 – Timbergus

+0

嗯,它的工作原理! 我愛JavaScript :) 我在Arduino的代碼中使用'Serial.println()',打開串口時我在JavaScript代碼中使用了一個解析器:var serialPort = new SerialPort('/ dev/tty.usbmodem641' ,{波特率:115200,解析器:serialport.parsers.readline(「\ n」)});'。我已經降低了一點波特率,但它適用於所有人。我甚至從2kHz(500us)的ADC讀取數據:) – Timbergus

+0

感謝大家的幫助:) – Timbergus

-1

我有這種事發生在我一次也。 Serial.print()將數據發送給arduino。 Serial.println()會將信息從arduino發送到計算機串口留言板(或任何你想要調用它的地址)

+0

嗯...... Serial.print()和Serial.println()之間的唯一區別是添加到最後的行終止。 – angelatlarge

+0

我上次嘗試修復,它工作。對不起,如果我提供了不良信息順便說一下,這個Q應該被轉移到電子產品... –

+0

移動到電子產品:也許?這裏有一些Arduino的問題。 'Serial.print()'和'Serial.println()'的方向是相同的:它在Arduino的串口上輸出數據。也許你試圖建議OP使用'Serial.println()'做一切事情? – angelatlarge