質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2834閲覧

Qtのシリアルポートのアクセスプログラムの質問

nqf27650

総合スコア115

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/04/20 02:25

CUIインターフェースで下記のプログラムを作成し、
オープン出来ますが、ポートへの出力が出来ません、
この件に関してコメント頂けますと大変助かります。

//aCUI_rs232c.pro
######################################################################

Automatically generated by qmake (2.01a) ? 4? 20 11:01:10 2017

######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

Input

SOURCES += main.cpp

//main.cpp
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<termios.h> //ok
#include<unistd.h> //ok
#include<fcntl.h> //ok
#define BAUDRATE B600 //B38400 // 通信速度の設定
#define MODEMDEVICE "/dev/ttyS0" // デバイスファイルの指定:COM1
#define SERIAL_PORT "/dev/ttyS0" // デバイスファイル

#define FALSE 0
#define TRUE 1
#define MC 4 // 読み込む文字数 4-->1
int bbb();

int main(){
bbb();
return 0;
}

int bbb(){

volatile int STOP=FALSE;

int fd, res, i; // fd:ファイルディスクリプタ res:受け取った文字数
struct termios oldtio, newtio;// 通信ポートを制御インターフェイス
unsigned char bufR[255]; // 受信文字を格納

unsigned char bufW[4]={'A','B','C','D'}; // 送信文字を格納
//警告: narrowing conversion of '192' from 'int' to 'char' inside { }
//is ill-formed in C++11 [-Wnarrowing]

//sudo chmod 666 /dev/ttyS0 で パーミションが許可された
if((fd=open(MODEMDEVICE, O_RDWR | O_NOCTTY))== -1){
//if((fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY))== -1){
// O_RDWR:読み書き両用 O_NOCTTY:tty制御をしない

perror(MODEMDEVICE);
printf("Open error\n");
exit(-1);
}
printf("Open OK\n");
//emit signal();

tcgetattr(fd, &oldtio); // 現在のシリアルポートの設定を退避させる
bzero(&newtio, sizeof(newtio)); // 新しいポートの設定の構造体をクリア

newtio.c_cflag= (BAUDRATE | CS8 | CLOCAL | CREAD);
//newtio.c_cflag= (BAUDRATE | CS8 );
// CRTSCTS:フロー制御有り CS8:8ビット、ノンパリティ、ストップビット1
// CLOCAL:モデムの状態信号を無視 CREAD:受信可能にする

newtio.c_iflag=IGNPAR; // IGNPAR:パリティエラーの文字は無視

newtio.c_oflag=0; // rawモード
newtio.c_lflag=0; // 非カノニカル入力

newtio.c_cc[VTIME]=0; // キャラクタ間タイマは未使用
newtio.c_cc[VMIN]=MC; // MC文字受け取るまでブロックする

tcflush(fd,TCIFLUSH); // ポートのクリア
tcsetattr(fd, TCSANOW, &newtio); // ポートの設定を有効にする

write(fd, bufW, sizeof(bufW));

//QString str;
int cnt=10;
while(STOP==FALSE){
//QThread::msleep(10);
//str=QString("cnt=%1").arg(cnt,4,10);
//qDebug("%s", qPrintable(str));
res=read(fd, bufR, 255);
if(--cnt<1)break;
for(i=0; i<res; i++){
if(bufR[i]==0xC0 || true){
STOP=true;
printf("Get the data\n");
break;
}
printf("%c", bufR[i]);
if((i%4)==0){
printf("\n");
}
}//for
}//while

tcsetattr(fd, TCSANOW, &oldtio); // 退避させた設定に戻す
close(fd); // COM1のシリアルポートを閉じる
printf("Port is closed\n");
return 0;

}
以上、宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2017/04/20 02:28

Markdownをちゃんと使うべし。やりなおし。
guest

回答1

0

自己解決

この質問のコードはモデム用のコードでした。
質問のR232Cポートのものではありませんでしたので、
この質問を取り消します。
なお、既に解決すみです。

投稿2017/04/20 04:11

nqf27650

総合スコア115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問