Robofun 機器人論壇

標題: 新手xbee對傳問題 [打印本頁]

作者: a125125460    時間: 2012-4-30 17:08
標題: 新手xbee對傳問題
小弟對xbee還不是熟,關於文法上有些問題.....想請各位大大幫我debug一下
目的:利用可變電阻控制燈光亮度(by xbee)
以下是我的程式碼:
發送端:
int potPin=3;
void setup()
{
Serial.begin(9600);
}
void loop()
{
in sensorValue = analogRead(potPin);//讀取可變電阻值//
Serial.println(sensorValue,DEC);//傳送可變電阻值  BY 10進位//
delay(150);
}

接收端:
int ledPin = 9;
int sensorValue;
void setup()
{
pinMode(9,OUTPUT);  
}
void loop()
{
int sensorValue = Serial.read ();//將接受到的可變電阻值放到 sensorValue(我認為*)//
map(sensorValue,0,1023,0,254);//將可變電阻值依照比率從0~1023到0~254等比率縮小//
analogWrite(ledPin,sensorValue);//pwn改變亮度//
delay(150);
}


程式可以燒進去...可是我一直沒看到燈光改變亮度
想請問我哪裡有問題.....
作者: Curtiss    時間: 2012-5-1 00:14
使用 Serial.println(sensorValue,DEC) 傳送,會將 sensorValue 轉成十進位表示的"字串"。
例如 sensorValue = 1023,就會送出"1023"四個字元,再加上換行(ASCII 13 + ASCII 10)。
接收端收到字元,會當作是字元對應的 ASCII 碼,即依序收到 0x31 0x30 0x32 0x34 0x0D 0x0A 六個數字,而非1023這個數字。
所以必須在收到字元後,用一小段程式解碼,將字元還原為數字。
作者: a125125460    時間: 2012-5-1 17:00
接收端:
#include<stdlib.h>
int ledPin = 9;
int sensorValue;
void setup()
{
pinMode(9,OUTPUT);  
}
void loop()
{
int sensorValue = Serial.read ();//將接受到的可變電阻值放到 sensorValue(字串)//
int atoi(char *sensorValue);//將sensorValue(字串)改成字元//
map(sensorValue,0,1023,0,254);//將可變電阻值依照比率從0~1023到0~254等比率縮小//
analogWrite(ledPin,sensorValue);//pwn改變亮度//
delay(150);
}

這樣改可以嗎....
c++的語法,不確定arduino可否使用
作者: Curtiss    時間: 2012-5-1 22:47
Serial.read() 只傳回一個字元。
建議先閱讀 Serial 的用法及範例。
作者: coopermaa    時間: 2012-5-1 23:48
也許可以考慮這麼做:
1. 先在發送端把 sensorValue mapping 成 0-255 一個 byte 的數值後用 Serial.write()  送出
2. 在接收端直接以 Serial.read() 取出數值後直接傳給 analogWrite()
作者: a125125460    時間: 2012-5-2 00:32
我明天再試試看...今天找了好多東西,可是都打差邊球~累
回覆Curtiss:
我都忘記read只能傳回一個字元了謝謝....
回覆coopermaa:
感謝你回覆   網站真的不錯!!

以下是我實驗結果...我也覺得很詫異......
它還是有傳電阻值,
就如果Curtiss所說的...他只能read一個字元的值.....那轉到0的時候因該會沒光才對....
可是不管我怎樣轉....可是電燈亮度依舊沒變化,
我會繼續嘗試和看例子想辦法解決問題的....
作者: a125125460    時間: 2012-5-2 22:54
本帖最後由 a125125460 於 2012-5-2 23:07 編輯

發送端:
int potPin=3;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(potPin);//讀取可變電阻值//
sensorValue = sensorValue/4; //先讓電阻值從1023~0縮減255>0
Serial.print(sensorValue);//傳送可變電阻值  **不用println是因為它會傳"空白"跟"換行"
delay(150);
}

接收端:
#include <stdlib.h>
int ledPin = 9;
char sensorValue[3];//宣告成矩陣//
int sensor=0;
int i = 0;
void setup()
{

  Serial.begin(9600);
pinMode(9,OUTPUT);  
}
void loop()
{
  for(i=0;i<3;i++)
  {
sensorValue = Serial.read ();
  }//讓他讀滿三個值當作一個值
delay(150);

Serial.println(sensorValue);
sensor = atoi(sensorValue);//字串==>數值//
analogWrite(ledPin,sensor);//改變燈光大小//
}

結果是做出來了....可是在傳的過程中
明明是傳三位數字...不知道為啥會出現第四位字
有點提前讀到下一個值...不知道算不算正常.......

作者: sinocgt    時間: 2012-5-3 16:34
我覺得用coopermaa的方法最好, Coopermaa大大果然是高手!
作者: coopermaa    時間: 2012-5-3 18:37
sinocgt 大大你太抬舉我了
你軟硬兼施,這才叫高手!:)

最近實在太混了,什麼進展也沒有
其實應該說是太不專心了,一下想玩 Android,一下想玩 Cloud Computing,一下又想玩 JavaScript (node.js ...),結果什麼都沒學到~~ 哈

昨天才在翻你的 motoduino 手冊說
作者: a125125460    時間: 2012-5-3 20:51
.....兩位大神....小弟繼續往下一步發展....
有問題希望兩位和版上各位大大幫忙~




歡迎光臨 Robofun 機器人論壇 (https://www.robofun.net/forum/) Powered by Discuz! X3.2