Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Arduino-如何获取字符串命令并将其与if语句匹配?_C_Arduino - Fatal编程技术网

C Arduino-如何获取字符串命令并将其与if语句匹配?

C Arduino-如何获取字符串命令并将其与if语句匹配?,c,arduino,C,Arduino,我有以下代码,它适用于任何字符串发送和接收hello world。但是如何发送特定字符串并使用if-then-else呢 例如,当我发送以下信息时,它总是只发送hello world,但我该怎么做 echo "command1" | nc -4u localhost 21 echo "command2 | nc -4u localhsot 21 在接收时,我想用if-then-else解析它们,但它不起作用: if ( packetBuffer == "command1" ) { els

我有以下代码,它适用于任何字符串发送和接收
hello world
。但是如何发送特定字符串并使用if-then-else呢

例如,当我发送以下信息时,它总是只发送hello world,但我该怎么做

echo "command1" | nc -4u localhost 21
echo "command2  | nc -4u localhsot 21
在接收时,我想用if-then-else解析它们,但它不起作用:

if ( packetBuffer == "command1" ) { 

else if ( packetBuffer == "command2") { 

} else {

}
代码:

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

byte mac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xAD, 0xDE};
IPAddress ip(192,168,1,2);
unsigned int localPort = 21;

char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
char  ReplyBuffer[] = "hello world";
EthernetUDP Udp;

char          r1[] = "1";
char          r2[] = "2";
char          r3[] = "3";

void setup() {
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
}

void loop() {
  int packetSize = Udp.parsePacket();
  if(packetSize) {
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Udp.write(packetBuffer);

      if ( !strcmp(packetBuffer, "command1") ) {
        Udp.write(r1);
      } else if ( !strcmp(packetBuffer, "command2") ) {
        Udp.write(r2);
      } else {
        Udp.write(r3);
      }

    Udp.endPacket();
  }
  delay(10);
}
#包括
#包括
#包括
字节mac[]={0xDE,0xAD,0xBE,0xEF,0xAD,0xDE};
ip地址ip(192168,1,2);
无符号int localPort=21;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
char ReplyBuffer[]=“你好,世界”;
以太网Udp;
字符r1[]=“1”;
字符r2[]=“2”;
字符r3[]=“3”;
无效设置(){
以太网开始(mac,ip);
开始(localPort);
}
void循环(){
int packetSize=Udp.parsePacket();
if(包装尺寸){
Udp.beginPacket(Udp.remoteIP(),Udp.remotePort());
读取(数据包缓冲区、Udp_发送_数据包最大大小);
Udp.write(packetBuffer);
如果(!strcmp(packetBuffer,“command1”)){
Udp.write(r1);
}否则如果(!strcmp(packetBuffer,“command2”)){
Udp.write(r2);
}其他{
Udp.write(r3);
      }
Udp.endPacket();
}
延迟(10);
}

使用相等运算符
=
时,您正在比较指针

在您的情况下,可以使用
strcmp()
进行“字符串比较”,来比较内容


请注意,
strcmp()
在字符串匹配时返回
0
,否则返回
-1
+1
(取决于字母顺序)。

您可能会在消息末尾收到
\n
(或
\r\n
)。这可以解释为什么比较失败。您可以通过将消息记录到串行端口轻松找到答案。最好的方法是编写一个修剪函数,从末尾开始扫描字符串,并用
\0
替换'\n'或'\r',以减少字符串长度。惰性解决方案是:
*strrchr(packetBuffer,'\n')=0
echo
正在添加
\n
。你可以
echo-n
来避免这种情况,但我不确定
nc
是否会喜欢。对不起,我厌倦了这个游戏。我对一个具体问题给了你一个准确的答案。然后你改变了问题,要求更多。这是不诚实的,你不应该改变原来的问题那么多,它现在没有任何意义。此外,你不应该删除你的评论,现在看来我是在自言自语。
if ( !strcmp(packetBuffer, "command1") ) { 

else if ( !strcmp(packetBuffer, "command2") ) { 

} else {

}