我正在做这个基于IoT的项目,目的是在nodeMCU的帮助下将数据显示到连接的显示器上(在这种情况下,我使用了MAX7219模块)。这里的想法是存储在我的Firebase数据库中的字符串将显示在led显示器上。
我从数据库中获取值到我的nodeMCU没有问题,但是由于我正在使用的代码(Max72xx_Message_serial,它可以作为max72xx的示例使用),因此将该字符串转换为char数组没有这个小问题。库)已使用char数组,但我只能以字符串格式获取存储的数据。我已经修改了该代码以便与Firebase连接,但是主要问题是将从数据库中获取的字符串转换为char数组。
我尝试了toCharArray()
,但它仍然显示转换错误。
void readfromfirebase(void)
{
static uint8_t putIndex = 0;
int n=1;
while (Firebase.available())
{
newMessage[putIndex] = (char)Firebase.getString("Submit Message"); // this line produces the error
if ((newMessage[putIndex] == '\n') || (putIndex >= BUF_SIZE-3)) // end of message character or full buffer
{
// put in a message separator and end the string
newMessage[putIndex++] = ' ';
newMessage[putIndex] = '\0';
// restart the index for next filling spree and flag we have a message waiting
putIndex = 0;
newMessageAvailable = true;
}
else if (newMessage[putIndex] != '\r')
// Just save the next char in next location
{putIndex++;}
n++;
}
}
答案 0 :(得分:1)
我认为您在混淆类型
getString
返回一个String对象,可以使用String类的方法将其转换为char []。
我假设您的newMessage
的类型为char []或char *。
然后,我建议您使用String.c_str()方法,因为它返回一个C样式的以空字符结尾的字符串,即char *。
请参阅https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/c_str/以供参考。
它还将字符串的最后一个字符设置为0。因此,诸如strlen,strcmp等方法都可以使用。
!注意不要修改c_str()返回的数组,如果要修改它,则应复制char []或使用string.toCharArray(buf, len)
。
您的代码可能如下所示。
String msg = Firebase.getString("Submit Message");
newMessage = msg.c_str();
// rest of your code
如果newMessage
是存储多个消息的缓冲区,表示char* newMessage[3]
。
String msg = Firebase.getString("Submit Message");
newMessage[putIndex] = msg.c_str();
// rest of your code
请注意,因为您要在一个数组中存储多个字符,所以请使用strcmp来比较这些数组!
如果您不熟悉C,我建议您阅读。