我应该在通过串口从C向arduino发送数据的同时进行任何转换吗?

我应该在通过串口从C向arduino发送数据的同时进行任何转换吗?,c,linux,sockets,arduino,linksys,C,Linux,Sockets,Arduino,Linksys,我的设置: Android设备=WiFi=>Linksys路由器WRT54G=串行=>Arduino Android设备:使用套接字IO连接到路由器 Linksys路由器:Linux套接字IO-接受客户端 Arduino:从路由器串行读取数据。我在路由器上焊接了一个串行端口 串行buad速率为9600,因此一切都是同步的 问题是: 我可以看到服务器正确地将数据打印到控制台,但我在Arduino控制台中看到奇怪的字符。以下是我看到的: 来自Android设备:向上 路由器控制台: <Rece

我的设置:

Android设备=WiFi=>Linksys路由器WRT54G=串行=>Arduino

Android设备:使用套接字IO连接到路由器 Linksys路由器:Linux套接字IO-接受客户端 Arduino:从路由器串行读取数据。我在路由器上焊接了一个串行端口

串行buad速率为9600,因此一切都是同步的

问题是: 我可以看到服务器正确地将数据打印到控制台,但我在Arduino控制台中看到奇怪的字符。以下是我看到的:

来自Android设备:向上

路由器控制台:

<Received : up
我不知道这个贝尔角色是从哪里来的

我的实验: 如果我从路由器控制台窗口执行此操作:

$> echo "hello" > /dev/tts/1
我得到了Arduino侧的正确数据,即:

received: hello
received:
我的代码: 路由器代码

int fd;
char *portname = "/dev/tts/1";

fd = open(portname, O_WRONLY);

if (fd < 0)
{
    printf("Error : cannot open port %s\n", portname);
    return -1;
}
...
    connfd = accept(listenfd, (struct sockaddr*)&serv_addr, &len);
    printf("accept OK!\n");
    printf("accepted connection from %s\n", inet_ntoa(serv_addr.sin_addr));

    char rcvbuf[MAX_BUFF_SIZE] = { '\0' };

    while(1)
    {
        int inData = recv(connfd, rcvbuf, sizeof(rcvbuf), 0);


        if (inData <= 0)
        {
         printf("Client closed!\n");
         break;
        }

        int result = write(fd, rcvbuf, strlen(rcvbuf));

        printf("<Received : %s\n", rcvbuf);

        // reset memory otherwise we will have data
        // from previous data
        bzero((char *)rcvbuff, sizeof(rcvbuf));
     }

...
如有任何*指示,将不胜感激:

编辑 添加波特率以了解更多信息: 路由器

root@OpenWrt:/usr/bin stty-F/dev/tts/1-a 速度9600波特;第0行;第0列;直线=0; intr=^C;退出=^\;擦除=^?;杀死你;eof=^D;eol=; eol2=;swtch=;开始=^Q;停止=^S;susp=^Z;rprnt=^R; werase=^W;lnext=^V;冲洗=^O;最小值=1;时间=0

阿杜伊诺:

  Serial.begin(9600);

  delay(50);

当您使用android应用程序发送数据时,您确定从路由器写入arduino的数据中有换行符吗?我不确定这些是否是您的bug的原因,但我建议:

在android或服务器中添加“\n”。 确保android应用程序是java?正在发送ascii字符,如果您希望arduino中包含ascii字符。 在服务器中写入时,使用int-inData作为长度。检查其长度是否合理。 检查int结果是否存在错误,并与inData进行比较
确定双方使用相同的波特率?BEL或“\7”闻起来像是不匹配的Baud.inputString+=英寸;在我看来不像C。也许你在使用C++?
// the loop routine runs over and over again forever:
void loop() {

        while (Serial.available() > 0)
        {
          char inChar = (char)Serial.read();

          if (inChar == '\n' || inChar == '\r' || inChar == '\n\r' || inChar == '\r\n')
          {
            DATA_READ = true;
            break;
          }

          inputString += inChar;          
        }        
        // send data only when you receive data:
        if (DATA_READ) 
        {
          if (inputString[0] != ' ' || inputString[0] != '\n')
          {
            Serial.print("received: ");
            Serial.println(inputString + " " + inputString[0]);

            process_message(inputString[0]);

            // prepare for next round
            DATA_READ = false;

            Serial.flush();
            inputString = "";
          }
        }        
}
  Serial.begin(9600);

  delay(50);