gpt4 book ai didi

php - 回显Linux发送到Arduino的数据

转载 作者:行者123 更新时间:2023-11-30 17:58:37 25 4
gpt4 key购买 nike

我想回显 Linux 发送到 Arduino 的数据,这是一个十六进制命令,因为我需要 PHP 读取回显的数据。问题是我不想使用换行符来打印完整的数据。我想在 Arduino 没有更多数据可供读取时打印它。代码如下:

我想要实现的目标:

  1. 如果没有使用\n,如何发现读取序列的结尾
  2. 如何以您想要的格式打印十六进制。

Arduino 代码:

char printByte[100];
byte getByte;
int pos = 0;
void setup(){
Serial.begin(9600);
}

void loop(){
if(Serial.available() > 0){
getByte = Serial.read();
printByte[pos] = getByte;
pos++;
printByte[pos] = '\0';

if(getByte == '\n'){
Serial.print(printByte);
for(int i=0; i<=sizeof(printByte);i++){
printByte[i]=0;
}
pos = 0;
}
}
}

Linux 发送十六进制的示例代码..

unsigned char pCom[2][7]={{0xFF,0x01,0x00,0x10,0x2F,0x2F,0x6F},
{0xFF,0x01,0x00,0x08,0x2F,0x2F,0x67}};

write(fd,pCom[0],8);

另外,我如何在 Arduino 代码中进行修剪,比如 0x 这样它只会输出 FF 01 10 等?

最佳答案

你想做的事情(几乎)可以通过替换来完成

Serial.print(printByte);
for(int i=0; i<=sizeof(printByte);i++){
printByte[i]=0;
}

Serial.print(printByte);

for(int i=0; i<=sizeof(printByte);i++){
if (0 == printByte[i])
break;
printf("%02x", printByte[i]);
}
printf("\n"); // Newline after output

if (0 == strpos(printByte, "QUIT"))
{
// The cycle ends.
}

for(int i=0; i<=sizeof(printByte);i++){
printByte[i]=0;
}

更新:Serial.print() 命令是输出 0xFF 的命令...:我不明白您想要修改输出 Arduino 端。我不知道如何实现,需要修改 Serial 包的源代码。那里会有一个“0x%02x”或“0x02X”,必须从中删除 0x。

关于读取序列的结尾,您可能会输出双\n。然后,如果读取的字节为\n pos 为 0,则意味着 Arduino 写入了空行并且序列已停止。

或者您可以使用几乎任何序列作为终止符:在上面的代码中,我添加了对字符串“QUIT”的检查。

关于php - 回显Linux发送到Arduino的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12076240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com