gpt4 book ai didi

c++ - 仅接收7位读取串行端口Midi字节C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:30 26 4
gpt4 key购买 nike

天啊!
我想通过串行发送MIDI字节到C++。我已经收到数据了唯一的问题是我只收到7位,如果我试图得到2个字节,这些位是没有意义的。我收到的范围在0到127之间,我应该可以看到0到255之间的数字。
我将数据存储为一个字符(1字节)。我试过智力和智力,但还是不行。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>

unsigned char data_in[0];
int data_in_int;

int main(void){

int fd_serialport;
struct termios options;

fd_serialport = open("/dev/ttyACM0", O_RDONLY | O_NOCTTY);
//fd_serialport = open("/dev/ttyACM0", O_RDONLY | O_NOCTTY | O_NDELAY);


if(fd_serialport == -1){
perror("Unable to open /dev/ttyACM0");
}

tcgetattr(fd_serialport, &options);
cfsetispeed(&options, B38400);
cfsetospeed(&options, B38400);
options.c_cflag |= (CLOCAL | CREAD);
//options.c_cflag |= PARENB;
//options.c_cflag |= PARODD;
//options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//options.c_iflag |= (INPCK | ISTRIP);
tcsetattr(fd_serialport, TCSANOW, &options);

fcntl(fd_serialport, F_SETFL, 0);
usleep(1000000);

while(read(fd_serialport, &data_in[0], 1)){

data_in_int=(int)data_in[0];
printf("%i\n", data_in_int);

}
usleep(2000);
}
return(0);

我正在使用一个teensy(类似于arduino)来发送midi数据。目前我只是做个测试看看能不能拿到号码。我知道teensy可以工作,因为其他程序可以正确地解释数据(纯数据)我在用Ubuntu12.04LTS。
我试过发送-255到255之间的号码初始代码:
int indx=-256;

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

void loop(){

Serial.print(indx,BYTE);
delay(200);
indx++;
if (indx==256) indx=-256;
}

你知道为什么我不能得到整个字节吗?我试过termios.options和fcntl的不同配置。你觉得去别的图书馆试试更好吗?
谢谢!
pd:我也意识到有些0到127之间的数字不是由程序解释的这个数字是3,17,19还有一些我记不起来了。

最佳答案

我以前用所有的行来设置termios.options。我后来把它们写成评论。因为我没有更改termios的状态,所以注释没有更改端口的设置。似乎其中一行或某些行使用了1位字节。重新启动电脑后,它工作了,我可以得到0到255之间的数字!

//options.c_cflag |= PARENB;
//options.c_cflag |= PARODD;
//options.c_cflag &= ~CSTOPB;

//options.c_iflag |= (INPCK | ISTRIP);

我对3号,17号和19号还是有问题。我看不懂这些数字,程序似乎什么也没收到有人知道为什么会这样吗?
我会把数字用二进制表示,也许有人有个主意:
00000011 -- 3
00010001 -- 17
00010011 -- 19

关于c++ - 仅接收7位读取串行端口Midi字节C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15514318/

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