极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14485|回复: 8

arduino 编程求助。

[复制链接]
发表于 2016-1-13 14:33:19 | 显示全部楼层 |阅读模式
本人是C#程序员。很不适应C的。 所以来问问。

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


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

使用道具 举报

发表于 2016-1-13 20:30:45 | 显示全部楼层
Arduino中,字符用  '1', 定义使用:char A[x]="123456";
Arduino读取字符串需要多读几次,每次读一个。
回复 支持 反对

使用道具 举报

发表于 2016-1-13 23:30:26 | 显示全部楼层
容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com/thread-108425-1-1.html
我把内容一起转过来吧:




  1. String a,b;

  2. byte c;

  3. int int_n;//int类型32768

  4. long long_n;//long范围2147483647

  5. void setup() {

  6.    Serial.begin(57600);

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

  8.    Serial.println("Serial OK!");

  9. }



  10. void loop() {

  11.     a="alkDdsjFl";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  31.     a.toUpperCase();          //转大写

  32.     a.toLowerCase();          //转小写

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

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

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

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

  38.     /* 以下内容未测试

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

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

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

  42.         */

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

  44.     //Serial.print(int_n);

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

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

  47.     delay (9999999999);

  48. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2016-1-14 01:43:39 | 显示全部楼层
    字符串  char  A= "123456"
     if(A[0] == "1")  这种比较是不允许的。
=============
你在C#里这样写可以吗??C#没学好吧
if(a[0]=='1')试试
C#与arduino完全不一样,C#多强悍哦, arduino单薄的跟片纸似的,想用类库什么的就打消这个念头吧
回复 支持 反对

使用道具 举报

发表于 2016-1-14 01:47:17 | 显示全部楼层
try, catch 是没有的,自己保证不需要try吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-14 08:25:46 | 显示全部楼层
bbc11234 发表于 2016-1-14 01:43
字符串  char  A= "123456"
     if(A[0] == "1")  这种比较是不允许的。
=============

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

使用道具 举报

 楼主| 发表于 2016-1-14 09:42:23 | 显示全部楼层
msold5 发表于 2016-1-13 23:30
容错方面的我不太清楚,字符串的我倒是前段时间刚总结了下自己测试后的结果,原贴在:http://bbs.dp168.com ...

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

使用道具 举报

发表于 2016-1-14 10:12:04 | 显示全部楼层
watersblue 发表于 2016-1-14 08:25
字符串  char  A= "123456"
     if(A[0] == "1")  这种比较是不允许的。
=============

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

使用道具 举报

 楼主| 发表于 2016-1-14 10:58:35 | 显示全部楼层
bbc11234 发表于 2016-1-14 10:12
实际上 char * A="123456";
if (A[0]=='1')在 arduino里是可以的
没有什么不可以,这些是基础的C用法。 ...

刚才试了下确实可以。
当初应该就是输入"的问题。太马虎。VS提供的环境太好,有点过份依赖它了。工作十多年,水平越干越低。过2年估计就剩小学水平了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 08:19 , Processed in 0.057375 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表