这是c代码
#include <iostream>#include <unistd.h>#include <fstream>using namespace std;int main(){ unsigned int angle; fstream arduino; cout<<"check-1"; arduino.open("/dev/tty.usbmodem3a21"); cout<<"check-2"; if(arduino) { do { cout<<"\n\ninsert a number between 0 and 179"; cin>>angle; arduino<<angle; }while(angle <= 179); arduino.close(); } else { cout<<"\n\nERROR!!\n\n"; }}
这是arduino的:
#include <Servo.h>Servo servo;const int pinServo = 2;unsigned int angle;voID setup(){ Serial.begin(9600); servo.attach(pinServo); servo.write(0);}voID loop(){ if(Serial.available()>0) { angle = Serial.read(); if(angle <= 179) { servo.write(angle); } }}
问题是它停在arduino.open(…),我不知道为什么,它甚至不写“check-1”,我也确定这是在arduino中选择的端口app中的工具>串口.
知道如果我写arduino.open(“/ dev / tty.usbmodem3a21”,iOS :: binary)或写错了串口名,它写“check-1”,“check-2”也是有用的.和“错误!!”,所以错误有效.
解决方法 arduino显示为串行设备.您应该查看使用open()和close()函数.我在linux上做过这个,但我很确定它在Mac上的工作方式类似.这是代码片段的示例.第一个片段打开并设置文件描述符.int fd; // file descriptor// Open portfd = open("/dev/ttyACM0",O_RDWR | O_NOCTTY | O_NDELAY);if (fd == -1){ printf("Device cannot be opened.\n"); exit(-1); // If the device is not open,return -1}struct termios options;fcntl(fd,F_SETFL,FNDELAY); // Open the device in nonblocking mode// Set parameterstcgetattr(fd,&options); // Get the current options of the portbzero(&options,sizeof(options)); // Clear all the optionsspeed_t Speed;switch (baudrate) // Set the speed (baudrate){ case 110 : Speed=B110; break; case 300 : Speed=B300; break; case 600 : Speed=B600; break; case 1200 : Speed=B1200; break; case 2400 : Speed=B2400; break; case 4800 : Speed=B4800; break; case 9600 : Speed=B9600; break; case 19200 : Speed=B19200; break; case 38400 : Speed=B38400; break; case 57600 : Speed=B57600; break; case 115200 : Speed=B115200; break; default : exit(-4);}cfsetispeed(&options,Speed); // Set the baud rate at 115200 baudscfsetospeed(&options,Speed);options.c_cflag |= ( CLOCAL | CREAD | CS8); // Configure the device : 8 bits,no parity,no controloptions.c_iflag |= ( IGNPAR | IGNBRK );options.c_cc[VTIME]=0; // Timer unusedoptions.c_cc[VMIN]=0; // At least on character before satisfy readingtcsetattr(fd,TCSANow,&options); // Activate the settings
这只是关闭它:
close(fd);
要从实际的文件描述符中读取:
ioctl(fd,FIONREAD,&t1); if(t1 > 0) { // If the number of bytes read is equal to the number of bytes retrIEved if(read(fd,pByte,t1) == t1) { for(int i =0; i < t1; i++) { if(pByte[i] != '\r'){ // Just makes sure you're not scanning new lines // Todo: Do what you want with this character } } }}总结
以上是内存溢出为你收集整理的使用带有Xcode的c使用arduino打开一个串口全部内容,希望文章能够帮你解决使用带有Xcode的c使用arduino打开一个串口所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)