RaspberryPi[14] USB入力のGPSデータをUSBメモリに記録する。
時刻でファイル名を生成し、時刻がちょうど00分になったらファイルを更新し、USBメモリに記録するプログラムです。USBNAMEにはUSB名を入れてください。(ubuntu MATE ではUSBNAMEが付きません。)
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <time.h>
#define SERIAL_PORT "/dev/ttyACM0"
#define BFILENAME rover
int main(int argc, char *argv[])
{
unsigned char msg[] = "serial port open...\n";
// unsigned char bfn[64]; = "rover_gps" // base file name
unsigned char cfn[255]; // current file name based on size
unsigned char buf[255];
int fd;
struct termios tio;
int baudRate = B115200;
int i;
int cnt;
int cng_file;
int len;
int ret;
int size;
int disp;
int store_hour;
time_t t;
FILE *file;
struct tm *local;
// file = fopen("gps.txt","w");
fd = open(SERIAL_PORT, O_RDWR);
if (fd < 0) {
printf("open error\n");
return -1;
}
tio.c_cflag += CREAD;
tio.c_cflag += CLOCAL;
tio.c_cflag += CS8;
tio.c_cflag += 0;
tio.c_cflag += 0;
cfsetispeed( &tio, baudRate );
cfsetospeed( &tio, baudRate );
cfmakeraw(&tio);
tcsetattr( fd, TCSANOW, &tio );
ioctl(fd, TCSETS, &tio);
cnt = 0;
cng_file = 1;
if(argc >1) disp = 1;
else disp = 0;
while(1) {
if(cng_file == 1){ // generate file name
t = time(NULL);
local = localtime(&t);
sprintf(cfn,"/media/pi/USBNAME/RTK/rtk%02d%02d%02d%02d.txt",local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min);
file = fopen(cfn,"a");
cng_file = 0;
store_hour = local->tm_hour;
// printf("File create %s\n",cfn);
}
len = read(fd, buf, sizeof(buf));
if (0 < len) {
for(i = 0; i < len; i++) {
if(disp == 1) printf("%c", buf[i]);
fprintf(file,"%c",buf[i]);
}
}
cnt++;
t = time(NULL);
local = localtime(&t);
// printf("cnt:%d st:%d ct:%d\n",cnt,store_hour,local->tm_min);
if(store_hour != local->tm_hour) {
fclose(file);
cng_file = 1;
cnt = 0;
// printf("Time changed\n");
// break;
}
}
close(fd);
return 0;
}