watersblue 发表于 2016-1-13 14:33:19

arduino 编程求助。

本人是C#程序员。很不适应C的。 所以来问问。

一。 arduino uno 编程时,怎样才能使用 try{} catch{}容错。
二。 百度了一个替代C#中split 的函数,但原字符串过长时。拆分的字符串会出现问题,是乱的。
       贴代码
       static int split(char dst[], char* str, const char* spl)
{
    int n = 0;
    char *result = NULL;
    result = strtok(str, spl);
    while( result != NULL )
    {
      strcpy(dst, result);
      result = strtok(NULL, spl);
    }
    return n;
}

三. char字符串中某个字符比较时怎样比较?
   比如
   字符串charA= "123456"
   if(A == "1")这种比较是不允许的。
   无奈现在用 if(String(A) == "1")但感觉这样很消耗CPU
四。接收蓝牙组件传递过来的字符串时。经常会两三条字符串合并收过来。所用以上的办法,都是为了解决字符串的问题。如果各位有更好的解决方案,希望告诉一下。

164335413 发表于 2016-1-13 20:30:45

Arduino中,字符用'1', 定义使用:char A="123456";
Arduino读取字符串需要多读几次,每次读一个。

msold5 发表于 2016-1-13 23:30:26

容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com/thread-108425-1-1.html
我把内容一起转过来吧:



String a,b;

byte c;

int int_n;//int类型32768

long long_n;//long范围2147483647

void setup() {

   Serial.begin(57600);

   while (!Serial); //只有leonardo这样等待,其他不用

   Serial.println("Serial OK!");

}



void loop() {

    a="alkDdsjFl";

    int_n=a.toInt();      //转换为整数,如果字符串不是数字,则返回值为0,其他如toFloat( );

    b=a.charAt(3);      //取第几个字符,由0开始算位置

    int_n=a.indexOf("kd");    //查找(可字符串数组),未查到为-1

    int_n=a.indexOf("kd",3);//从第n位置开始查找字符串(可字符串数组),未查到为-1

    int_n=a.lastIndexOf("kd");//和indexOf()一样,但是从字符串尾部开始???????????????

    int_n=a.length();         //读取长度。其中是指String型的数组char变量

    b=a.substring(3);         //从2到结尾

    b=a.substring(2,5);       //从2到第3个字符(不是取3个)

    b=a;    b.concat("aslfj");    //把后面字符串添加到本字符串一起(连接)

    b+=" ffffff   ";            //同上也是连接字符串,字符串相加

    a= a + "   sdfgsdfg   "; //同上也是连接字符串,字符串相加

    c=a.startsWith("a6k9");    //开始字符串 返回TRUE(1),否则0

    c=a.endsWith("jf5l");      //结尾字符串 返回TRUE(1),否则0

    int_n=a.compareTo("aFldfghsdfgsegsergdfl");//和字符串比较,相同则返回0,否则为其他数字

    c=a.equals("alkd4sjfl");    //字符串完全相符1(TRUE)否则0

    c=a.equalsIgnoreCase("alKDdsJfl");   //字符串完全相符1(TRUE)否则0,但是不限制大小写

    c=a.endsWith("sj5fl");      //以字符串结尾1(TRUE)否则0

    a.replace("l","6");         //用字符串6替换l

    a.setCharAt(3,'9');       //把字符存储在给定的字符串的索引位置

    a.toUpperCase();          //转大写

    a.toLowerCase();          //转小写

    a.trim();               //去前后空格

   
b=a.substring(2,5);       //从2到第3个字符(不是取3个)

    /*byte a=0xff;c=bitRead(a,3); //此函数返回val数值右边第n位的二进制数字*/

    Serial.println("a=(" + a + ")");

    /* 以下内容未测试

    Serial.parseInt(); //可以直接从串口输入窗接收整数,省去字符处理和转换过程,未测试??????????

    a.getBytes(b,4);   //拷贝提供的字符长度到字节缓冲中,未测试??????????

    toCharArray(buffer,len)—-从字符串0长度开始到给定的缓冲长度拷贝,未测试??????????

      */

    Serial.print("b=|");Serial.print(b);Serial.print("|");

    //Serial.print(int_n);

    //Serial.print(byte(c)); //以二进制形式将数字发送到串口-终于可以发送"0"了

    //Serial.print(c,16); //在串口输出16进制(字符串格式输出),16可写成HEX,也可用2来输出二进制的数字

    delay (9999999999);

}

bbc11234 发表于 2016-1-14 01:43:39

    字符串charA= "123456"
   if(A == "1")这种比较是不允许的。
=============
你在C#里这样写可以吗??C#没学好吧
if(a=='1')试试
C#与arduino完全不一样,C#多强悍哦, arduino单薄的跟片纸似的,想用类库什么的就打消这个念头吧

bbc11234 发表于 2016-1-14 01:47:17

try, catch 是没有的,自己保证不需要try吧

watersblue 发表于 2016-1-14 08:25:46

bbc11234 发表于 2016-1-14 01:43 static/image/common/back.gif
字符串charA= "123456"
   if(A == "1")这种比较是不允许的。
=============


字符串charA= "123456"
   if(A == "1")这种比较是不允许的。
=============
这也只是打个比方,C#定义字符串是string,也不是char。""代表字符串''代表单个字符。学得不太好。但毕竟工作天天接触,所以这个我还是知道。我是感觉我问的是arduino。不是C#。所以感觉C#方面没必要这么认真。谢谢你的解答

watersblue 发表于 2016-1-14 09:42:23

msold5 发表于 2016-1-13 23:30 static/image/common/back.gif
容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com ...

要的就是这个,谢谢兄弟了。我找了一大圈也没找到string的这些成员函数

bbc11234 发表于 2016-1-14 10:12:04

watersblue 发表于 2016-1-14 08:25 static/image/common/back.gif
字符串charA= "123456"
   if(A == "1")这种比较是不允许的。
=============


实际上 char * A="123456";
if (A=='1')在 arduino里是可以的
没有什么不可以,这些是基础的C用法。你这半桶子水晃的可真厉害。
arduino里不可以的是调用现成的类库。 arduino的String库用起来非常不方便,开销还大,还不如不用。

watersblue 发表于 2016-1-14 10:58:35

bbc11234 发表于 2016-1-14 10:12 static/image/common/back.gif
实际上 char * A="123456";
if (A=='1')在 arduino里是可以的
没有什么不可以,这些是基础的C用法。 ...

刚才试了下确实可以。
当初应该就是输入"的问题。太马虎。VS提供的环境太好,有点过份依赖它了。工作十多年,水平越干越低。过2年估计就剩小学水平了。
页: [1]
查看完整版本: arduino 编程求助。