Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4875|回復: 9
打印 上一主題 下一主題

新手xbee對傳問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-4-30 17:08:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
小弟對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);
}


程式可以燒進去...可是我一直沒看到燈光改變亮度
想請問我哪裡有問題.....
2#
發表於 2012-5-1 00:14:09 | 只看該作者
使用 Serial.println(sensorValue,DEC) 傳送,會將 sensorValue 轉成十進位表示的"字串"。
例如 sensorValue = 1023,就會送出"1023"四個字元,再加上換行(ASCII 13 + ASCII 10)。
接收端收到字元,會當作是字元對應的 ASCII 碼,即依序收到 0x31 0x30 0x32 0x34 0x0D 0x0A 六個數字,而非1023這個數字。
所以必須在收到字元後,用一小段程式解碼,將字元還原為數字。
3#
 樓主| 發表於 2012-5-1 17:00:58 | 只看該作者
接收端:
#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可否使用
4#
發表於 2012-5-1 22:47:37 | 只看該作者
Serial.read() 只傳回一個字元。
建議先閱讀 Serial 的用法及範例。
5#
發表於 2012-5-1 23:48:11 | 只看該作者
也許可以考慮這麼做:
1. 先在發送端把 sensorValue mapping 成 0-255 一個 byte 的數值後用 Serial.write()  送出
2. 在接收端直接以 Serial.read() 取出數值後直接傳給 analogWrite()
6#
 樓主| 發表於 2012-5-2 00:32:16 | 只看該作者
我明天再試試看...今天找了好多東西,可是都打差邊球~累
回覆Curtiss:
我都忘記read只能傳回一個字元了謝謝....
回覆coopermaa:
感謝你回覆   網站真的不錯!!

以下是我實驗結果...我也覺得很詫異......
它還是有傳電阻值,
就如果Curtiss所說的...他只能read一個字元的值.....那轉到0的時候因該會沒光才對....
可是不管我怎樣轉....可是電燈亮度依舊沒變化,
我會繼續嘗試和看例子想辦法解決問題的....
7#
 樓主| 發表於 2012-5-2 22:54:00 | 只看該作者
本帖最後由 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);//改變燈光大小//
}

結果是做出來了....可是在傳的過程中
明明是傳三位數字...不知道為啥會出現第四位字
有點提前讀到下一個值...不知道算不算正常.......
8#
發表於 2012-5-3 16:34:15 | 只看該作者
我覺得用coopermaa的方法最好, Coopermaa大大果然是高手!
9#
發表於 2012-5-3 18:37:46 | 只看該作者
sinocgt 大大你太抬舉我了
你軟硬兼施,這才叫高手!:)

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

昨天才在翻你的 motoduino 手冊說
10#
 樓主| 發表於 2012-5-3 20:51:03 | 只看該作者
.....兩位大神....小弟繼續往下一步發展....
有問題希望兩位和版上各位大大幫忙~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-2 14:20 , Processed in 0.230441 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表