1

我正在尝试使用 Arduino+Ethernet Shield 检查未读邮件的数量,发送两个 IMAP 请求。使用 client.read(server_answer),我将它存储到一个字符中。当我使用 Serial.print(server_answer) 将其发送到串行时,我得到以下信息:

* 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 总数)?如何将它们放在两个不同的字符串中?我想在 LCD 上显示带有一些文本的数字(“您有 [number] 个新邮件!”)。

如果有帮助,这是我的代码中有趣的部分:

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;  
   }  
 }  
}
4

1 回答 1

0

在不为您编写代码的情况下,您需要使用 strtok_r() 将传入的数据分成块。查看上面调用 strtok_r() 的代码,使用 '(' 作为定界符,然后再次使用空格作为定界符,然后再次使用 ')' 应该让你开始你的第一个数字。从那里 atoi() 将其转换为整数。重复该过程也应该使您达到第二个值。

如果您还有其他问题,请对此进行破解并发布您的代码。

于 2012-05-21T05:28:55.060 回答