Работя върху проект, при който компютърът ми комуникира с платка Arduino, която чете изхода на сензора и го поставя на серийния порт само ако е получено "t". Кодът на Arduino, както е показано по-долу, работи.
const int inputPin = 0;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);}
void loop(){
if (Serial.available() > 0){
char c=Serial.read();
if(c=='t'){
int value = analogRead(inputPin);
float celsius = (5.0 * value * 100.0)/1024.0;
Serial.println(celsius);
}
}
}
Проблемът ми е в C кода, когато се опитвам да прочета какво поставя arduino на серийния порт. Моят C код е:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
#include<fcntl.h>
int main(){
int STATE_OK=0;
int STATE_WARNING=1;
int STATE_CRITICAL=2;
char tempbuf[10];
int fd=open("/dev/ttyACM0",O_RDWR | O_NOCTTY | O_NONBLOCK);
if(fd == -1){
printf("Unable to open /dev/ttyACM0\n");
return STATE_WARNING;
} else {
fcntl(fd, F_SETFL, FNDELAY);
int w=write(fd, "t", 1);
printf("The number of bytes written to the serial port is %d \n",w);
fprintf(stderr, "fd = %d.\n", fd);
sleep(10);
int n=read(fd,tempbuf,5);
printf("%d,%s \n",n,strerror(errno));
if(n>0){
float temp=atof(tempbuf);
printf("Temperature is: %f Celsius\n", temp);
if (temp>27){
return STATE_CRITICAL;
}else{
printf("The temperature is %f Celsius and checked 10 seconds ago\n",temp);
return STATE_OK;
}
}
}
close(fd);
return 0;
}
n винаги е = 0 и не мога да разбера какъв е проблемът. Благодаря предварително.
open()
, за да разрешите запис, но след това не извършвайте записвания. Идеята е да се определи дали проблемът е вашето open() повикване или вашето write() извикване. - person chux - Reinstate Monica   schedule 16.07.2013