mark501227 發表於 2014-12-22 13:37:53

VB與arduino之間字串傳遞

我查看過板上很多字串處理的問題始終就是無法成功使用,我需要從VB端丟出'1A'的字串指令,arduino端接收指令'1A'
1代表LED ON,A代表pinmode 3輸出,我只用簡單的if來判斷
現在只有字串處理問題無法解決,請問要如何讓字串裡的字元用if分開判斷,謝謝

ates1687 發表於 2014-12-22 14:58:12

序列搜尋法(我不知道能不能用在Arduino上)
1A丟到location,location=

                               12
                               ↓   ↓
定位資料S=

S=1 位址1是"1"

S=A 位址2是"A"

這樣就可以分開判斷

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

(之前好像有看過在arduino SD上好像有看過類似的程式,
好像是把字串二維陣列丟到SD卡裡面,在抓陣列的資料出來)

mark501227 發表於 2014-12-22 17:03:38

ates1687大,這個位址判斷我懂,我試過了好像不行耶,如果我想用現在這個程式進行修改,要怎麼修改呢謝謝

char x;
char c;
int count = 0;
void setup()
{
Serial.begin(9600);
pinMode(3,OUTPUT);
}
void loop()
{
      if (Serial.available() > 0)
       {
               x = Serial.read();
               c = 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:54

回復 3# mark501227


    QAQ這個我不知道,因為我也是第一次碰到2個字串分開的問題!

tonychu 發表於 2014-12-23 17:40:40

前幾天看到,取起始位置與終止位置
希望對你有幫助,可以把第一位與第二位都取一位
stringOne.substring(1,1)='1' &stringOne.substring(2,2)='A' http://arduino.cc/en/Tutorial/StringSubstring

mark501227 發表於 2015-1-7 21:52:44

本帖最後由 mark501227 於 2015-1-7 22:01 編輯

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

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

char x;
void setup()
{
Serial.begin(9600);
for(int ledpin = 2; ledpin <=13; ledpin++)
{pinMode(ledpin,OUTPUT);}
}
void loop()
{
      if (Serial.available() > 0)
      {x = Serial.read();
         LED();
      }
void LED(){
          switch(x)
          {
            case 'A':    digitalWrite(2,HIGH);    break;
            case 'M':    digitalWrite(2,LOW);   break;
            case 'B':    digitalWrite(3,HIGH);    break;
            case 'N':    digitalWrite(3,LOW);   break;
            case 'C':    digitalWrite(4,HIGH);    break;
            case 'O':    digitalWrite(4,LOW);   break;
            case 'D':    digitalWrite(5,HIGH);    break;
            case 'P':    digitalWrite(5,LOW);   break;
            case 'E':    digitalWrite(6,HIGH);    break;
            case 'Q':    digitalWrite(6,LOW);   break;
            case 'F':    digitalWrite(7,HIGH);    break;
            case 'R':    digitalWrite(7,LOW);   break;
            case 'G':    digitalWrite(8,HIGH);    break;
            case 'S':    digitalWrite(8,LOW);   break;
            case 'H':    digitalWrite(9,HIGH);    break;
            case 'T':    digitalWrite(9,LOW);   break;
            case 'I':    digitalWrite(10,HIGH);   break;
            case 'U':    digitalWrite(10,LOW);    break;
            case 'J':    digitalWrite(11,HIGH);   break;
            case 'V':    digitalWrite(11,LOW);    break;
            case 'K':    digitalWrite(12,HIGH);   break;
            case 'W':    digitalWrite(12,LOW);    break;
            case 'L':    digitalWrite(13,HIGH);   break;
            case 'X':    digitalWrite(13,LOW);    break;
            case 'Y':    for(int ledpinON = 2; ledpinON <=13; ledpinON++)
                         {pinMode(ledpinON,HIGH);}break;
            case 'Z':    for(int ledpinoff = 2; ledpinoff <=13; ledpinoff++)
                         {pinMode(ledpinoff,LOW);}break;
          }
}

ates1687 發表於 2015-1-8 02:30:01

回復 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)
}
------------------------------------------------------
               ↓                  ↓
位址012345678910 11 12 13 14
字串w ww.powenk   o   .   c    om

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

第二個就會回傳.powe(從3到8中間這個範圍)

mark501227 發表於 2015-1-8 18:22:38

你上次給的arduino網站他的substing()這個指令是橘字,可是我自己打的是黑字?所以無法使用?
還有不好意思,我的另外的小問題你可以幫我看一下嗎,謝謝你

ates1687 發表於 2015-1-8 19:35:28

回復 8# mark501227



= =我都沒問題了,只是上面我的回覆範例有點打錯,這才是正確版本(實際上有跑過...)

mark501227 發表於 2015-1-9 13:34:25

OK了,謝謝你耐心的指導

cc1357 發表於 2022-3-12 21:08:47


谢谢大大分享
頁: [1]
查看完整版本: VB與arduino之間字串傳遞