2016-05-17 85 views
0

目前我正在開發一個項目,我必須從Arduino中讀出脈衝並檢查結果是高還是低。arduino上的脈衝生成和讀出

我不得不寫我自己的代碼來生成從Arduino的高/輸出低:

//Pulse Generator Arduino Code 
int potPin = 2; // select the input pin for the knob 
int outputPin = 13; // select the pin for the output 
float val = 0;  // variable to store the value coming from the sensor 

void setup() { 
    pinMode(outputPin, OUTPUT); // declare the outputPin as an OUTPUT 
    Serial.begin(9600); 
} 

void loop() { 
    val = analogRead(potPin); // read the value from the k 
    val = val/1024; 
    digitalWrite(outputPin, HIGH); // sets the output HIGH 
    delay(val*1000); 
    digitalWrite(outputPin, LOW); // sets the output LOW 
    delay(val*1000); 
} 

它採用了旋鈕改變脈衝之間的延遲。

林目前正在試圖通過簡單地將2與一電纜從‘outputPin’連接到端口上的計數來讀取與另一Arduino的高/低的數據(允許稱之爲一個「計數的Arduino」) Arduino的。

我正在使用digitalRead讀取端口沒有任何延遲。

//Count Arduino Code 
int sensorPin = 22; 
int sensorState = 0; 

void setup() {     
    pinMode(sensorPin, INPUT); 
    Serial.begin(9600); 
} 

void loop(){ 
    sensorState = digitalRead(sensorPin); 
    Serial.println(sensorState); 
} 

首先,它每隔1秒嘗試一次脈衝,但結果是一噸的低點和高點的垃圾郵件。總是3低和3高並重復。它甚至不是每1秒接近一個,而是更接近1毫秒。

我不知道我做錯了什麼。它是計時問題還是有更好的方法來檢測這些變化?

+1

最後一句話中的問題:「有沒有更好的方法來檢測這些變化?」是的,儘管你沒有提供很多線索,但是通過檢測變化,不報告你所做的水平。傳感器狀態的連續串行輸出將破壞感知輸入狀態的時間。 –

+1

如果您在輸入變爲低電平時發送「0」,並在發送爲高電平時發送「1」,在9600波特時,您應該能夠跟蹤最高約1 kHz的輸入脈衝。 –

+0

我必須每秒追蹤10個脈衝。所以10赫茲已經很棒了。基於中斷的解決方案是Arduino的一個選項。如果引腳由高變低,我能得到中斷嗎? –

回答

1

一噸的低音和高音

的垃圾......發生什麼,如果兩個Arduinos的GND未連接。

另外,如果串行緩衝區不會溢出,那麼您的讀取arduino會在每個循環週期打印,這只是幾微秒。

只有更好的打印輸出更改,或使用led顯示發生了什麼。

void loop(){ 
    static bool oldState; 
    bool sensorState = digitalRead(sensorPin); 
    if (sensorState != oldState) { 
     Serial.println(sensorState); 
     oldState = sensorState; 
    } 
} 
+0

這絕對是這個問題....所以我的GND引腳不夠正確的端口! –

+0

我很樂意幫助解決簡單的問題。 ;) – datafiddler