kevinzhang 发表于 2014-8-11 09:23:37

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

本帖最后由 kevinzhang 于 2014-9-4 14:09 编辑

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

林定祥 发表于 2014-8-11 09:57:12

应该只和内存有关吧.

kevinzhang 发表于 2014-8-11 13:20:43

哦?是吧。。。。。。我昨天合并两个130个字符的字符串赋给一个变量时,显示是空。晕。:dizzy:

kevinzhang 发表于 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;
}
Serial.println("==");
for(int xx=0; xx<p_myMessage.length(); xx++)
{
    p_wholeMessage += p_myMessage;
}

//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;
    myP = 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;
}
Serial.println("==");
for(int xx=0; xx<p_myMessage.length(); xx++)
{
    p_wholeMessage += p_myMessage;
}

//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;
    myP = 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:} 为蛤蟆字符串会突然缩水呢?

kevinzhang 发表于 2014-8-25 14:53:42

{:soso_e109:}大神木有出现啊。

zyzand 发表于 2014-8-25 21:46:42

和你的问题差不多,可能内存不够了,String太多吧

kevinzhang 发表于 2014-8-26 12:23:49

zyzand 发表于 2014-8-25 21:46 static/image/common/back.gif
和你的问题差不多,可能内存不够了,String太多吧

:Q真实非常遗憾啊,看来复杂一点的程序,uno是跑不了。

kevinzhang 发表于 2014-8-26 14:21:16

zyzand 发表于 2014-8-25 21:46 static/image/common/back.gif
和你的问题差不多,可能内存不够了,String太多吧

改用char[]数组也一样:Q

zyzand 发表于 2014-8-28 15:13:50

kevinzhang 发表于 2014-8-26 12:23 static/image/common/back.gif
真实非常遗憾啊,看来复杂一点的程序,uno是跑不了。

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

kevinzhang 发表于 2014-8-29 10:07:01

本帖最后由 kevinzhang 于 2014-8-29 10:10 编辑

zyzand 发表于 2014-8-28 15:13 static/image/common/back.gif
是啊,MemoryFree的库试了么,我就剩100多字节了。处理比较大的数据时还是用Mega吧。顺便附上一张从极客工 ...

我试试。非常感谢老兄:handshake:handshake

Mega和Due,选哪个比较合适捏?{:soso_e132:}

kevinzhang 发表于 2014-9-4 14:07:37

低级问题专家帖,再次发问:

适合UNO上的Shield,可以直接插到Due上吗?:loveliness:
页: [1]
查看完整版本: 低级问题专家帖,再发问,谢谢