1

我有一个运行以下代码的 Arduino Uno:

byte data;

void setup(){
   Serial.begin(9600);
}

void loop(){

  data = 0xAA;
  Serial.write(data);
  delay(1000);
}

这真的很简单,只需每秒将 0xAA 的值写入 Serial TX 引脚即可。

我已将串行 TX 引脚连接到 DB9 分支电缆的引脚 3,并将分支电缆的引脚 5 连接到 Arduino 上的地。然后将串行电缆插入连接到我笔记本电脑 USB 端口的 USB 串行转换器。我从过去的经验中知道 USB 串行转换器是可靠的并且不会扭曲数据。

在我的笔记本电脑上,我正在运行下面的代码,我希望每秒看到 AA 打印到屏幕上,但是,我看到的是 15 值。我的代码有什么问题,还是由不同的电压电平引起的?

 void dump_packet(void* packet, int len)
 {
u_int8_t* bytes = (u_int8_t*)packet;
int i = 0;  

while (i < len){
    if (i == len-1){
        printf("%02X-", bytes[i++]);
    }
    else{
        printf("%d", bytes[i++]);
        }
}   
 }

 int ttySetRaw(int fd, struct termios *prevTermios)
 {
 struct termios t;
 if (tcgetattr(fd, &t) == -1)
  return -1;
 if (prevTermios != NULL)
 *prevTermios = t;
 t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO);
 t.c_iflag &= ~(BRKINT | ICRNL | IGNBRK | IGNCR | INLCR |
 INPCK | ISTRIP | IXON | PARMRK);
 t.c_oflag &= ~OPOST; /* Disable all output processing */
 t.c_cc[VMIN] = 1; /* Character-at-a-time input */
 t.c_cc[VTIME] = 0; /* with blocking */
 if (tcsetattr(fd, TCSAFLUSH, &t) == -1)
   return -1;
 return 0;
 }

 int main()
 {
   struct termios  tty;
   struct termios  savetty;
   speed_t     spd;
   unsigned int    sfd;
   unsigned char   buf[12];
   int reqlen = 79;
   int     rc;
   int     rdlen;
   int success;

   sfd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NONBLOCK);
   rc = tcgetattr(sfd, &tty);
   if (rc < 0) {
    printf("failed to get attr: %d, %s", rc, strerror(errno));
    exit (-2);
   }
   savetty = tty;    /* preserve original settings for restoration */

   success = ttySetRaw(sfd, &tty);
   spd = B9600;
   cfsetospeed(&tty, (speed_t)spd);
   cfsetispeed(&tty, (speed_t)spd);

   if (sfd > 0 && success == 0){
printf("TTY set up ready to Read:\n\n");
   }

   memset(&buf[0], 0, sizeof(buf));

   do {
    rdlen = read(sfd, buf, reqlen);
  if (rdlen != -1){
    printf("Read %d bytes\n", rdlen);
    dump_packet( buf, rdlen);
   }

   } while (1);

   tcsetattr(sfd, TCSANOW, &savetty);
   close(sfd);
   exit (0);

   return 0;
   }
4

0 回答 0