我正在爲Arduino編寫代碼。它應該做的是:監視Arduino上的6個模擬輸入引腳
它能夠監視6個模擬輸入,如果有任何人的任何活動,通過串行連接發送(其引腳上的活動銷+價值數)。
在串行連接的另一端,其他程序就這個給定的信息決定。
如何最有效地做到這一點?
我正在爲Arduino編寫代碼。它應該做的是:監視Arduino上的6個模擬輸入引腳
它能夠監視6個模擬輸入,如果有任何人的任何活動,通過串行連接發送(其引腳上的活動銷+價值數)。
在串行連接的另一端,其他程序就這個給定的信息決定。
如何最有效地做到這一點?
一種解決方案是這樣的:
int analogPin1 = 1;
int analogPin2 = 2;
int analogPin3 = 3;
int analogPin4 = 4;
int analogPin5 = 5;
int analogPin6 = 6;
int val = 0;
byte sendAnalog=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val=analogRead(analogPin1);
if(val>0){
Serial.print("1");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin2);
if(val>0){
Serial.print("2");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin3);
if(val>0){
Serial.print("3");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin4);
if(val>0){
Serial.print("4");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
}
AD轉換器正存儲10位的值。 AD轉換器的最大值爲1023([2^10-1])。用於串行通信的模塊發送數據字節,因此您需要從1023縮放到255。等式是(255/1023)* currentAnalogValue(因此它是0.249266 * currentAnalogValue)。在您的計算機應用程序中,您需要反向方程1023/255 * receivedByte來接收原始值。
的Arduino和其他設備(我假設這裏PC)之間的通信是最簡單的(也是最容易調試),如果你使用基於文本的界面。例如:
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 6; i++) {
Serial.print(i);
Serial.print(":");
Serial.println(analogRead(i));
}
}
這將連續地從模擬端口讀取值,並將它們發送(如文本)所示:
0:456
1:26
2:0
3:1023
4:321
5:1010
端口編號從0到5,然後用冒號(:
)字符作爲分隔符發送,然後是模擬值(從0到1023)。
這將無限重複,但你只提發送數據,如果有活動。如果您需要更復雜的東西,請擴展您認爲的「活動」(例如,如果模擬值自上次讀取後發生變化,您只想發送數據)。
此外,代碼應該能夠偵聽串行端口的「消息」,告訴什麼引腳應該是高或低。換句話說,監聽串口並寫入串口。兩項任務如何同時工作? – user1165574
我想你已經在這個其他問題已經覆蓋:http://stackoverflow.com/questions/8996675/arduino-code-to-write-and-send-at-the-same-time-simultaneously have not您? –
是的,還沒有得到任何答覆 – user1165574