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 {
}