2進数でのシリアル通信
シリアルを用いてデータを伝送するプログラムを作りたいのですが、よく分かりません。
10進数では出来たのですが2進数に変換する際に上手く行きません。
シリアル通信のプログラムとして以下を使用しています。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <fcntl.h>
#include <errno.h>
#define BAUDRATE B9600 //hentyou-kaisu per second
#define BSIZE 64 //byte size
#define CR 0x0D // carriage return
int fd; //file descriptor 0:H-nyuryoku,1:H-syuturyoku,2;error
struct termios otio;
int
open_serial_port(char *modem_dev) //modem_dev = serial_dev
{
struct termios ntio;
if ((fd = open(modem_dev, O_RDWR | O_NOCTTY)) < 0) { // O_RDWR=read&write O_NOCTTY=
perror(modem_dev);
exit (1);
}
tcgetattr(fd, &otio); //tanmatsu-no-now-settei-syutoku
memset(&ntio, 0, sizeof(ntio));
ntio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
ntio.c_cc[VTIME] = 0; //burst-de-datadenso-wo-timeout-surutameno-timer
ntio.c_cc[VMIN] = 1; //jyusin-moji-no-min
tcflush(fd, TCIFLUSH); // not read data-wo flash
tcsetattr(fd, TCSANOW, &ntio); //new-tanmatsu-settei-watasu
return (0);
}
void
close_serial_port(void)
{
tcsetattr(fd, TCSANOW, &otio); //motono-settei-ni-modosu
close(fd);
}
int
main(int argc, char **argv)
{
char *serial_dev;
// char buf[BSIZE]; //data-wo-kakikomu-buffa-no-top-address
char *buf = (char *)malloc(sizeof(char)*64);
char msg[BSIZE];
int i,j;
j=0;
if (argc != 2) {
fprintf(stderr, "usage : %s serial_dev\n", argv[0]);
exit (1);
}
serial_dev = argv[1]; //device to write e.g. /dev/ttyUSB0
memset(buf, '\0', BSIZE); //m byte memory block no set \0=char-gatano-0
memset(msg, '\0', BSIZE); //syokika
open_serial_port(serial_dev);
i = 0;
while (1) { //infinite loop
sprintf(buf, "%d,", i); //printf-wo-buf-ni
j = strlen(buf);
write(fd, buf, j); //write to modem-device
printf("%s\n", buf);
sleep (2);
//read(fd, msg, BSIZE);
//printf("%s\n", msg);
i++;
if (i >= 10) i = 0;
}
close_serial_port();
free(buf);
exit (0);
}
2進数変換プログラムは、
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n;
int bits[1024];
int digit, amari;
printf("10進数: ");
scanf("%d", &digit);
n=0;
while(digit>=1){
amari = digit % 2;
/* 配列変数に順番に代入して */
bits[n++] = amari;
digit = digit / 2;
}
/* 逆順に表示している */
for(i=n-1; i>=0; i--){
printf("%d", bits[i]);
}
printf("\n");
return 0;
}
この両者をつなぎ合わせたいのですが、どうすればよろしいでしょうか。
お礼
回答ありがとうございます。 ファイルは確かに存在しますしinittabでターミナルを使ってもいません 存在するのにエラーになる状態です