Robofun 機器人論壇

標題: VB與arduino之間字串傳遞 [打印本頁]

作者: mark501227    時間: 2014-12-22 13:37
標題: VB與arduino之間字串傳遞
我查看過板上很多字串處理的問題始終就是無法成功使用,我需要從VB端丟出'1A'的字串指令,arduino端接收指令'1A'
1代表LED ON,A代表pinmode 3輸出,我只用簡單的if來判斷
現在只有字串處理問題無法解決,請問要如何讓字串裡的字元用if分開判斷,謝謝
作者: ates1687    時間: 2014-12-22 14:58
序列搜尋法(我不知道能不能用在Arduino上)
1A丟到location,location=[1A]

                               1  2
                               ↓   ↓
定位資料S[location]=[1  A]

S[1]=1 位址1是"1"

S[2]=A 位址2是"A"

這樣就可以分開判斷

在來就是switch case(if也可以)

(之前好像有看過在arduino SD上好像有看過類似的程式,
好像是把字串二維陣列丟到SD卡裡面,在抓陣列的資料出來)
作者: mark501227    時間: 2014-12-22 17:03
ates1687大,這個位址判斷我懂,我試過了好像不行耶,如果我想用現在這個程式進行修改,要怎麼修改呢謝謝

char x;
char c[2];
int count = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(3,OUTPUT);
}
void loop()
{
      if (Serial.available() > 0)
       {
               x = Serial.read();
               c[count++] = x;
               if(count == 2)
               {
                  count=0;
                  exam();
               }
        }
}
void exam()
{
       if(c=="1A")
        {
          digitalWrite(3,HIGH);
        }
        else if(c== "0A")
        {
          digitalWrite(3,LOW);
        }
}
作者: ates1687    時間: 2014-12-22 21:49
回復 3# mark501227


    QAQ這個我不知道,因為我也是第一次碰到2個字串分開的問題!
作者: tonychu    時間: 2014-12-23 17:40
前幾天看到,取起始位置與終止位置
希望對你有幫助,可以把第一位與第二位都取一位
stringOne.substring(1,1)='1' &stringOne.substring(2,2)='A' http://arduino.cc/en/Tutorial/StringSubstring
作者: mark501227    時間: 2015-1-7 21:52
本帖最後由 mark501227 於 2015-1-7 22:01 編輯

我看懂了,但是我不知道怎麼使用這個函數,如果我要用substing()這個函數是要先宣告還是要去哪裡引用麻..?

有額外小問題,
1.為何我輸入Y沒辦法全亮,其他都正常(單獨全部打開也可),是因為需要delay還是?
2.若我要用digitalread讀取全部LED狀態丟到電腦,我是要把指令放在哪裡?因為放在loop裡面就會一直讀值
   EX: ABC(全亮)放在loop裡會變成100110111

  1. char x;  
  2. void setup()
  3. {
  4.   Serial.begin(9600);
  5.   for(int ledpin = 2; ledpin <=13; ledpin++)
  6.   {  pinMode(ledpin,OUTPUT);  }
  7. }
  8. void loop()
  9. {
  10.       if (Serial.available() > 0)
  11.       {  x = Serial.read();
  12.          LED();
  13.       }
  14. void LED(){
  15.           switch(x)
  16.           {
  17.             case 'A':    digitalWrite(2,HIGH);    break;
  18.             case 'M':    digitalWrite(2,LOW);     break;
  19.             case 'B':    digitalWrite(3,HIGH);    break;
  20.             case 'N':    digitalWrite(3,LOW);     break;
  21.             case 'C':    digitalWrite(4,HIGH);    break;
  22.             case 'O':    digitalWrite(4,LOW);     break;
  23.             case 'D':    digitalWrite(5,HIGH);    break;
  24.             case 'P':    digitalWrite(5,LOW);     break;
  25.             case 'E':    digitalWrite(6,HIGH);    break;
  26.             case 'Q':    digitalWrite(6,LOW);     break;
  27.             case 'F':    digitalWrite(7,HIGH);    break;
  28.             case 'R':    digitalWrite(7,LOW);     break;
  29.             case 'G':    digitalWrite(8,HIGH);    break;
  30.             case 'S':    digitalWrite(8,LOW);     break;
  31.             case 'H':    digitalWrite(9,HIGH);    break;
  32.             case 'T':    digitalWrite(9,LOW);     break;
  33.             case 'I':    digitalWrite(10,HIGH);   break;
  34.             case 'U':    digitalWrite(10,LOW);    break;  
  35.             case 'J':    digitalWrite(11,HIGH);   break;
  36.             case 'V':    digitalWrite(11,LOW);    break;
  37.             case 'K':    digitalWrite(12,HIGH);   break;
  38.             case 'W':    digitalWrite(12,LOW);    break;
  39.             case 'L':    digitalWrite(13,HIGH);   break;
  40.             case 'X':    digitalWrite(13,LOW);    break;
  41.             case 'Y':    for(int ledpinON = 2; ledpinON <=13; ledpinON++)
  42.                          {  pinMode(ledpinON,HIGH);  }  break;
  43.             case 'Z':    for(int ledpinoff = 2; ledpinoff <=13; ledpinoff++)
  44.                          {  pinMode(ledpinoff,LOW);  }  break;
  45.           }
  46. }
複製代碼

作者: ates1687    時間: 2015-1-8 02:30
回復 6# mark501227


拍照放在網站上會侵權(再製權),所以用打的!

    根據這本[書名:Arduino互動專題與實戰]的 11.7.14章節提到

substing()取得字串中間的一段文字(說明懶得打~省略!)

語法:
string.substing(from)
string.substing(from, to)

參數:
string:原本的字串
substing:要從第幾個字開始裁切
to:要裁切到後面第幾個文字

回傳值:
String回傳字串

範利程式:
---------------------------------------------------
String Str1;

void setup(){
  Serial.begin(9600);
  Serial.println("START");
}

void loop(){
  Str1= "www.powenko.com";
  Serial.println(Str1.string.substing(3))
  Serial.println(Str1.string.substing(3,8))
delay(1000)
}
------------------------------------------------------
                 ↓                  ↓
位址0  1  2  3  4  5  6  7  8  9  10 11 12 13 14
字串w w  w  .  p  o  w  e  n  k   o   .   c    o  m

第一個就會回傳.powenko.com (從3到結束)

第二個就會回傳.powe(從3到8中間這個範圍)
作者: mark501227    時間: 2015-1-8 18:22
你上次給的arduino網站他的substing()這個指令是橘字,可是我自己打的是黑字?所以無法使用?
還有不好意思,我的另外的小問題你可以幫我看一下嗎,謝謝你
作者: ates1687    時間: 2015-1-8 19:35
回復 8# mark501227



= =我都沒問題了,只是上面我的回覆範例有點打錯,這才是正確版本(實際上有跑過...)
作者: mark501227    時間: 2015-1-9 13:34
OK了,謝謝你耐心的指導
作者: cc1357    時間: 2022-3-12 21:08

谢谢大大分享




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