极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13631|回复: 10

低级问题专家帖,再发问,谢谢

[复制链接]
发表于 2014-8-11 09:23:37 | 显示全部楼层 |阅读模式
本帖最后由 kevinzhang 于 2014-9-4 14:09 编辑

Arudino的字符串变量,字符个数有上限吗?
回复

使用道具 举报

发表于 2014-8-11 09:57:12 | 显示全部楼层
应该只和内存有关吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-11 13:20:43 | 显示全部楼层
哦?是吧。。。。。。我昨天合并两个130个字符的字符串赋给一个变量时,显示是空。晕。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-17 17:07:47 | 显示全部楼层
本帖最后由 kevinzhang 于 2014-8-18 09:24 编辑

今天就遇到的字符串的问题

String phoneNumber  = "8613817783164";
String messageCenterNumber = "8613800210500";
String message_text        = "5DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C";

  String p_messageCenterNumber = "";
  String p_phoneNumber = "";
  String p_myMessage = "";
  String p_wholeMessageLength = "";
  String p_wholeMessage = "";
  
void setup()
{
  Serial.begin(9600);
  
  // message center number process
  p_messageCenterNumber = pNumber(messageCenterNumber);
  p_messageCenterNumber = "0891" + p_messageCenterNumber;
  
  // mobile phone number process
  p_phoneNumber = pNumber(phoneNumber);
  
  // message process
  String x_myMessage = message_text;
  String preFix = Dec2Hex_String(x_myMessage.length()/2);
  String xxx = preFix + x_myMessage;
  p_myMessage += xxx;
  
  // make whole message
  String p1 = "11000D91" + p_phoneNumber + "000800";
  
  for(int xx=0; xx<p1.length(); xx++)
  {
    p_wholeMessage += p1[xx];
  }
  Serial.println("==");
  for(int xx=0; xx<p_myMessage.length(); xx++)
  {
    p_wholeMessage += p_myMessage[xx];
  }
  
  //p_wholeMessage = p1 + p_myMessage;
  
  Serial.print("w: ");
  Serial.println(p_wholeMessage);
  
  // whole message length
  p_wholeMessageLength = String(p_wholeMessage.length()/2, DEC);
  Serial.println(p_wholeMessageLength);
  
  //sendMessage(p_wholeMessageLength, p_messageCenterNumber, p_wholeMessage);
  Serial.println();
  Serial.println("End");
}

void loop()
{
  //sendMessage(p_wholeMessageLength, p_messageCenterNumber, p_wholeMessage);
  //delay(120000);
}

String pNumber(String p)
{
  String myP = p;
  myP = myP + "F";
  char x;
  for(int i=0; i<16; i+=2)
  {
    x = myP;
    myP = myP[i+1];
    myP[i+1] = x;
  }
  return myP;
}

String Dec2Hex_String(int number_2bit)
{
  String number;
  if(number_2bit < 16)
  {
    number = "0";
  }   
  number += String(number_2bit, HEX);
  number.toUpperCase();
  return number;
}

上面的代码运行后,能够显示p_wholeMessage字符串,长度是109。



问题是,如果加上其他一点东西的话,字符串就不对了(加入的代码标为红色)。

#include <SoftwareSerial.h>
String phoneNumber         = "8613817783164";
String messageCenterNumber = "8613800210500";
String message_text        = "5DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C61095FEBFF015DE54F5C";
SoftwareSerial mySerial(2,3);
  String p_messageCenterNumber = "";
  String p_phoneNumber = "";
  String p_myMessage = "";
  String p_wholeMessageLength = "";
  String p_wholeMessage = "";
  
void setup()
{
  Serial.begin(9600);
  mySerial.begin(9600);
  // message center number process
  p_messageCenterNumber = pNumber(messageCenterNumber);
  p_messageCenterNumber = "0891" + p_messageCenterNumber;
  
  // mobile phone number process
  p_phoneNumber = pNumber(phoneNumber);
  
  // message process
  String x_myMessage = message_text;
  String preFix = Dec2Hex_String(x_myMessage.length()/2);
  String xxx = preFix + x_myMessage;
  p_myMessage += xxx;
  
  // make whole message
  String p1 = "11000D91" + p_phoneNumber + "000800";
  
  for(int xx=0; xx<p1.length(); xx++)
  {
    p_wholeMessage += p1[xx];
  }
  Serial.println("==");
  for(int xx=0; xx<p_myMessage.length(); xx++)
  {
    p_wholeMessage += p_myMessage[xx];
  }
  
  //p_wholeMessage = p1 + p_myMessage;
  
  Serial.print("w: ");
  Serial.println(p_wholeMessage);
  
  // whole message length
  p_wholeMessageLength = String(p_wholeMessage.length()/2, DEC);
  Serial.println(p_wholeMessageLength);
  
  //sendMessage(p_wholeMessageLength, p_messageCenterNumber, p_wholeMessage);
  Serial.println();
  Serial.println("End");
}

void loop()
{
  //sendMessage(p_wholeMessageLength, p_messageCenterNumber, p_wholeMessage);
  //delay(120000);
}

String pNumber(String p)
{
  String myP = p;
  myP = myP + "F";
  char x;
  for(int i=0; i<16; i+=2)
  {
    x = myP;
    myP = myP[i+1];
    myP[i+1] = x;
  }
  return myP;
}

String Dec2Hex_String(int number_2bit)
{
  String number;
  if(number_2bit < 16)
  {
    number = "0";
  }   
  number += String(number_2bit, HEX);
  number.toUpperCase();
  return number;
}

这时候运行结果,p_wholeMessage字符串长度只有97了。{:soso_e141:} 晕啊。


请大神搭救{:soso_e183:} 为蛤蟆字符串会突然缩水呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-25 14:53:42 | 显示全部楼层
{:soso_e109:}大神木有出现啊。
回复 支持 反对

使用道具 举报

发表于 2014-8-25 21:46:42 | 显示全部楼层
和你的问题差不多,可能内存不够了,String太多吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-26 12:23:49 | 显示全部楼层
zyzand 发表于 2014-8-25 21:46
和你的问题差不多,可能内存不够了,String太多吧

真实非常遗憾啊,看来复杂一点的程序,uno是跑不了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-26 14:21:16 | 显示全部楼层
zyzand 发表于 2014-8-25 21:46
和你的问题差不多,可能内存不够了,String太多吧

改用char[]数组也一样
回复 支持 反对

使用道具 举报

发表于 2014-8-28 15:13:50 | 显示全部楼层
kevinzhang 发表于 2014-8-26 12:23
真实非常遗憾啊,看来复杂一点的程序,uno是跑不了。

是啊,MemoryFree的库试了么,我就剩100多字节了。处理比较大的数据时还是用Mega吧。顺便附上一张从极客工坊里找到的图片。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-29 10:07:01 | 显示全部楼层
本帖最后由 kevinzhang 于 2014-8-29 10:10 编辑
zyzand 发表于 2014-8-28 15:13
是啊,MemoryFree的库试了么,我就剩100多字节了。处理比较大的数据时还是用Mega吧。顺便附上一张从极客工 ...


我试试。非常感谢老兄

Mega和Due,选哪个比较合适捏?{:soso_e132:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-4 14:07:37 | 显示全部楼层
低级问题专家帖,再次发问:

适合UNO上的Shield,可以直接插到Due上吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 19:57 , Processed in 0.059871 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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