Robofun 機器人論壇

標題: 讀取COM PORT資料問題 [打印本頁]

作者: pizg    時間: 2011-9-29 22:29
標題: 讀取COM PORT資料問題
外部程式把"A"寫入COM PORT,
由Serial.read()讀進後是65,
請問如何再把它轉成"A"?
作者: pizg    時間: 2011-9-29 23:16
本帖最後由 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;
}  
請問此程式要如何修改使之正確呢?
作者: pizg    時間: 2011-9-29 23:34
經過一番努力~~
正確的程式在此:

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



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



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

AN003
BN008
CCYes
....

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

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

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

如果改成這樣行嗎?

char c;
c = Serial.read();

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

int intByte;
char c;

intByte = Serial.read();

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

// 這個是 implicit casting
c = intByte;
作者: pizg    時間: 2011-12-22 18:29
兩種寫法都可以。
在 C/C++ 語言裏,type casting 有分 explicit casting 跟 implicit casting 兩種。
一 ...
coopermaa 發表於 2011-12-22 14:28



    非常感謝 Cooper Maa 的解說.




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