Robofun 機器人論壇

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

讀取COM PORT資料問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-9-29 22:29:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
外部程式把"A"寫入COM PORT,
由Serial.read()讀進後是65,
請問如何再把它轉成"A"?
2#
 樓主| 發表於 2011-9-29 23:16:36 | 只看該作者
本帖最後由 pizg 於 2011-9-29 23:18 編輯

我寫了一個很笨的函數, 將ASCII碼轉成字元, 如下:
String toChr(int n)
{
  String s = "";
  switch (n)
  {
    case 44:
      s = ",";
      break;

    case 46:
      s = ".";
      break;

    case 49:
      s = "1";
      break;

    case 50:
      s = "2";
      break;
  
     ....

    case 65:
      s = "A";
      break;
      
    case 66:
      s = "B";
      break;
      
    case 67:
      s = "C";
      break;

    ....
     }
  return s;
}  

應該有更簡便的方法吧, 例如用查表法:
String toChr(int n)
{
  String s = "";
  String strTable = ",.12345678ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  s= strTable.substring(n , 1);
  return s;
}  
請問此程式要如何修改使之正確呢?
3#
 樓主| 發表於 2011-9-29 23:34:02 | 只看該作者
經過一番努力~~
正確的程式在此:

String toChr(int n)
{
  String strTable = "                                            , . 0123456789       ABCDEFGHIJKLMNOPQRSTUVWXYZ      abcdefghijklmnopqrstuvwxyz";
  String s = strTable.substring(n , n + 1);
  return s;
}
4#
發表於 2011-9-30 01:03:58 | 只看該作者
其實A就是65
65就是A
只是print的方式是要用char還是用數字來印他
並不需要轉換
不是很理解為何要轉這個呢!?
5#
發表於 2011-9-30 10:59:10 | 只看該作者
有查看過這裡嗎?  http://www.arduino.cc/en/Serial/Print 說不定對你有幫助
6#
 樓主| 發表於 2011-9-30 12:28:48 | 只看該作者
有查看過這裡嗎?   說不定對你有幫助
sinocgt 發表於 2011-9-30 10:59



    感謝您的提醒,
或許byte(65)這個就是我要的,
等我回家再試試, 謝囉~.
7#
 樓主| 發表於 2011-9-30 12:40:22 | 只看該作者
其實A就是65
65就是A
只是print的方式是要用char還是用數字來印他
並不需要轉換
不是很理解為何要轉這個 ...
mzw2008 發表於 2011-9-30 01:03



我的C#程式會傳類似下面的資料給Arduino:

AN003
BN008
CCYes
....

第1碼為資料類別, 第2碼為資料格式, 第3碼以後為資料的值.
所以我必須再把Arduino收到的ASCII碼還原為字串,
如此Arduino才知道要做什麼
8#
 樓主| 發表於 2011-9-30 23:50:34 | 只看該作者
本帖最後由 pizg 於 2011-10-1 00:29 編輯

求人不如求己, 終於讓我弄出來了, 如下:

int intByte;
char c;
intByte = Serial.read();
c = intByte;

如果改成這樣行嗎?

char c;
c = Serial.read();

呵~~繞一大圈, 這才是最終的答案!!
9#
發表於 2011-12-22 14:28:36 | 只看該作者
兩種寫法都可以。
在 C/C++ 語言裏,type casting 有分 explicit casting 跟 implicit casting 兩種。
一種是明白宣告,另一種是隱喻。通常用明白宣告會比較好,因為這樣可以避免編譯器不相容的狀況。

int intByte;
char c;

intByte = Serial.read();

// 這個是 explicit casting
c = (char) intByte;

// 這個是 implicit casting
c = intByte;
10#
 樓主| 發表於 2011-12-22 18:29:30 | 只看該作者
兩種寫法都可以。
在 C/C++ 語言裏,type casting 有分 explicit casting 跟 implicit casting 兩種。
一 ...
coopermaa 發表於 2011-12-22 14:28



    非常感謝 Cooper Maa 的解說.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-26 20:31 , Processed in 0.206789 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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