VB與arduino之間字串傳遞
我查看過板上很多字串處理的問題始終就是無法成功使用,我需要從VB端丟出'1A'的字串指令,arduino端接收指令'1A'1代表LED ON,A代表pinmode 3輸出,我只用簡單的if來判斷
現在只有字串處理問題無法解決,請問要如何讓字串裡的字元用if分開判斷,謝謝 序列搜尋法(我不知道能不能用在Arduino上)
1A丟到location,location=
12
↓ ↓
定位資料S=
S=1 位址1是"1"
S=A 位址2是"A"
這樣就可以分開判斷
在來就是switch case(if也可以)
(之前好像有看過在arduino SD上好像有看過類似的程式,
好像是把字串二維陣列丟到SD卡裡面,在抓陣列的資料出來) 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);
}
} 回復 3# mark501227
QAQ這個我不知道,因為我也是第一次碰到2個字串分開的問題! 前幾天看到,取起始位置與終止位置
希望對你有幫助,可以把第一位與第二位都取一位
stringOne.substring(1,1)='1' &stringOne.substring(2,2)='A' http://arduino.cc/en/Tutorial/StringSubstring 本帖最後由 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;
}
} 回復 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中間這個範圍) 你上次給的arduino網站他的substing()這個指令是橘字,可是我自己打的是黑字?所以無法使用?
還有不好意思,我的另外的小問題你可以幫我看一下嗎,謝謝你 回復 8# mark501227
= =我都沒問題了,只是上面我的回覆範例有點打錯,這才是正確版本(實際上有跑過...) OK了,謝謝你耐心的指導
谢谢大大分享
頁:
[1]