我试着用Arduino+以太网屏蔽检查未读邮件的数量,发送两个IMAP请求。
使用client.read(服务器端应答),我将其存储到一个char中。
当我用serial.print(服务器端应答)将其发送到serial时,得到以下结果:

* OK IMAP server ready H migmx111 92345
0 OK LOGIN completed
* STATUS INBOX (UNSEEN 1)
0 OK STATUS completed
* STATUS INBOX (MESSAGES 1917)
0 OK STATUS completed
* BYE Server logging out
0 OK LOGOUT completed

现在我的问题是:如何提取这两个数字(邮件总数和未读邮件总数,在示例1未读和1917总数中)?
我怎样才能把它们分成两条不同的线呢?
我想用一些文字来显示号码(“你有[号码]封新邮件!”)在液晶显示器上。
如果有帮助,我的代码中有一个有趣的部分:
void loop()
{
 updateClient();
 checkAvail();
}

void updateClient()
{
 if ((millis() - updateTimer) > 10000)
 {
   Ethernet.begin(mac, ip);
  // Serial.println("connecting...");
   delay(1000);
   if (client.connect())
   {
 //Serial.println("connected");
 client.println("0 login myusername mypasswd");

 client.println("0 STATUS INBOX (UNSEEN)");
 client.println("0 STATUS INBOX (MESSAGES)");
 client.println("0 logout");
 clientConnected = true;
   }
   else
   {
 Serial.println("connection failed");
   }
   updateTimer = millis();
 }
}

void checkAvail()
{
 if (clientConnected)
 {
   if (client.available())
   {

server_answer = client.read();

 Serial.print(server_answer);

   }
   if (!client.connected())
   {
 Serial.println();
// Serial.println("disconnecting.");
 client.stop();
 clientConnected = false;
   }
 }
}

最佳答案

在不为您编写代码的情况下,您需要使用strtok_r()将传入的数据分成块。看看上面的代码,使用“(”作为分隔符,然后再次使用空格作为分隔符,然后再次使用“)”调用strtok_r(),应该可以找到第一个数字的开头。从那里atoi()将把它转换成一个整数。重复这个过程也会得到第二个值。
如果你还有什么问题的话,试试看,然后把你的代码贴出来。

关于c - Arduino:转换client.read(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10667665/

10-14 19:14
查看更多