RXduino  1.20a
RXduinoマニュアル 最終更新日 平成26年6月29日
Public メソッド | すべてのメンバ一覧
クラス CSerial

シリアル通信を制御するクラス。このクラスのインスタンスは、何らかのシリアルポートを制御する。 [詳細]

#include <serial.h>

Public メソッド

void begin (int bps)
 シリアル通信ポートの初期化 デフォルトのポート(SCI_USB0)が使用される [詳細]
 
void begin (int bps, SCI_PORT port)
 ポートを指定して、シリアル通信ポートの初期化 [詳細]
 
void end ()
 シリアル通信ポートのクローズ [詳細]
 
void setDefault ()
 このシリアルをデフォルトのシリアルとして設定し、printf等の出力先にする [詳細]
 
int available ()
 シリアルポートから何バイトのデータが読み取れるかを返す [詳細]
 
int read ()
 シリアルポートの受信バッファから1バイトのデータを読み出します [詳細]
 
int peek ()
 シリアルポートの受信バッファにある先頭のデータを読みます。バッファ中の読み込み位置は変更しないので、バッファを覗くだけです。CRLFの変換は行われません。 [詳細]
 
void flush ()
 シリアルポートの送信バッファが空になるまで待ちます。受信バッファをどうするかは、Arduinoの仕様が変わっているので、検討中です。 [詳細]
 
size_t write (unsigned char val)
 この関数は実装していない [詳細]
 
size_t write (const char *str)
 シリアルポートに文字列を出力する [詳細]
 
size_t write (const String str)
 シリアルポートにString型を出力する [詳細]
 
size_t write (const unsigned char *buf, int len)
 シリアルポートに指定した長さのデータ列を出力する [詳細]
 
size_t print (const char str[])
 シリアルポートに文字列を出力する [詳細]
 
size_t print (const String str)
 シリアルポートにString型を出力する [詳細]
 
size_t print (char c)
 シリアルポートに文字を出力する [詳細]
 
size_t print (unsigned char c, int print_type=DEC)
 シリアルポートに値(数字)を出力する [詳細]
 
size_t print (int val, int print_type=DEC)
 シリアルポートに値(数字)を出力する [詳細]
 
size_t print (unsigned int val, int print_type=DEC)
 シリアルポートに値(数字)を出力する [詳細]
 
size_t print (long val, int print_type=DEC)
 シリアルポートに値(数字)を出力する [詳細]
 
size_t print (unsigned long val, int print_type=DEC)
 シリアルポートに値(数字)を出力する [詳細]
 
size_t print (double val, int fpdigit=2)
 シリアルポートに浮動小数点数を出力する [詳細]
 
size_t println (const char str[])
 シリアルポートに文字列を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (const String str)
 シリアルポートにString型を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (char c)
 シリアルポートに文字を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (unsigned char c, int print_type=DEC)
 シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (int val, int print_type=DEC)
 シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (unsigned int val, int print_type=DEC)
 シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (long val, int print_type=DEC)
 シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (unsigned long val, int print_type=DEC)
 シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (double val, int fpdigit=2)
 シリアルポートに浮動小数点数を出力して改行コード(\n\r)を出力する [詳細]
 
size_t println (void)
 シリアルポートに改行コードのみ出力して改行コード(\n\r)を出力する [詳細]
 
sci_str * get_handle ()
 このクラスに結びつけられている特電HALのシリアル構造体へのハンドルを得る [詳細]
 

説明

シリアル通信を制御するクラス。このクラスのインスタンスは、何らかのシリアルポートを制御する。

レガシーなUARTや、USB仮想COMポートを統一の取れた手段で扱うことができる。

覚え書き
システム起動時に既に、Serial、Serial1、Serial2、Serial3という4つのグローバルな
インスタンスが宣言されている。これらのインスタンスはデフォルトでは物理的にどこかのポートに
関連付けられているわけではない。Serail?.beginを行って、はじめて実際のポートに関連づけられる。

serial.h50 行で定義されています。

関数

void CSerial::begin ( int  bps)

シリアル通信ポートの初期化 デフォルトのポート(SCI_USB0)が使用される

引数
bpsボーレート
覚え書き
ボーレートには任意の値を設定してよいが、9600,38400,115200などが無難である
戻り値
なし
#include <rxduino.h>
void setup()
{
Serial.begin(38400); // USB仮想COMポートが使われるので、ボーレートは意味を持たない
// パソコン側のターミナルソフトで「Open」しなくても、
// 上の関数は制御を返し、処理は勝手に進む
}
void loop()
{
Serial.println("Hello RX world!"); // 文字列を表示
delay(1000); // 1秒待つ
// パソコン側のターミナルソフトで「Open」していなければ
// そのうち書き込みバッファがあふれるだろう
}
void CSerial::begin ( int  bps,
SCI_PORT  port 
)

ポートを指定して、シリアル通信ポートの初期化

引数
bpsボーレート
port
  • SCI_NONE : SCIポートを使用しない
  • SCI_AUTO : SCIを自動選択
  • SCI_USB0 : USB0 の仮想COMポートを使う
  • SCI_USB1 : USB1 の仮想COMポートを使う (未実装)
  • SCI_SCI0P2x : SCI0 (ポートP20,P21と兼用) を使う
  • SCI_SCI1JTAG : SCI1 (ポートPF0,PF2,JTAGと兼用) を使う
  • SCI_SCI2A : SCI2A (ポートP13,P12)を使う
  • SCI_SCI2B : SCI2B (ポートP50,P52)を使う
  • SCI_SCI6A : SCI6A (ポートP00,P01)を使う ※SAKURAでは使えない
  • SCI_SCI6B : SCI6B (ポートP32,P33)を使う
警告
SCI_AUTOを指定した場合、SCI0,SCI1,USB0から最初に何かを受信するまで制御を返しません。
戻り値
なし
覚え書き
通常のシリアルポートオープンの例
#include <rxduino.h>
void setup()
{
// SCI0,SCI1,USB仮想COMポートの3つのうちで、
// どこかのポートからデータを受信するまで待つ
Serial.begin(38400,SCI_AUTO);
}
void loop()
{
Serial.println("Hello RX world!"); // 文字列を表示
delay(1000); // 1秒待つ
// パソコン側のターミナルソフトで「Open」しているはずなので、
// 書き込みバッファがあふれないだろう
}
複数のシリアルポートをオープンする例
#include <rxduino.h>
void setup()
{
digitalWrite(PIN_LED0,1); // 起動したらLED0を点灯
Serial.begin(38400,SCI_AUTO); // PCとの通信用ポートを開く
digitalWrite(PIN_LED1,1); // COMポートを開いたらLED1を点灯
Serial.setDefault(); // printfをSerialに出力する
Serial1.begin(9600,SCI_SCI2B); // GR-SAKURAのXBeeポートをSerial1で開く
pinMode(PIN_P51 ,OUTPUT); // XBeeにリセットパルスを送る
digitalWrite(PIN_P51 ,0); // ※XBee WiFiはむやみにリセットしないこと!
delay(100);
}
void loop()
{
if(Serial.available()) // PCから受信した文字をXBeeに送る
{
char c = Serial.read();
Serial1.write(c);
}
if(Serial1.available()) // XBeeから受信した文字をPCに送る
{
char c = Serial1.read();
Serial.write(c);
}
}
void CSerial::end ( )

シリアル通信ポートのクローズ

引数
なし
戻り値
なし
void CSerial::setDefault ( )

このシリアルをデフォルトのシリアルとして設定し、printf等の出力先にする

printf()など、標準出力がSerialから出力されるようになります。

覚え書き
printf()は\nが来るまで内部でバッファしてしまうので、改行のない文字列を即座に出力するには、 setvbuf()も必要です。
引数
なし
戻り値
なし
#include <rxduino.h>
void setup()
{
Serial.begin(38400,SCI_AUTO); // PCとの通信用ポートを開く
Serial.setDefault(); // printfをSerialに出力する
setvbuf(stdout, (char *)NULL, _IONBF, 0); // printfの出力をバッファリングしないようにする
// (\nが来なくてもすぐに出力する)
}
void loop()
{
printf("%f",1.2345); //
printf("このファイルは %s です。",__FILE__); //
printf("今日の日付は %s です。",__DATE__); //
delay(100);
}
int CSerial::available ( )

シリアルポートから何バイトのデータが読み取れるかを返す

引数
なし
戻り値
シリアルバッファにあるデータのバイト数。0の場合はデータなし
int CSerial::read ( )

シリアルポートの受信バッファから1バイトのデータを読み出します

引数
なし
戻り値
先頭のデータ。データなしの場合は-1が返る
int CSerial::peek ( )

シリアルポートの受信バッファにある先頭のデータを読みます。バッファ中の読み込み位置は変更しないので、バッファを覗くだけです。CRLFの変換は行われません。

引数
なし
戻り値
先頭のデータ。データなしの場合は-1が返る
void CSerial::flush ( )

シリアルポートの送信バッファが空になるまで待ちます。受信バッファをどうするかは、Arduinoの仕様が変わっているので、検討中です。

引数
なし
戻り値
なし
size_t CSerial::write ( unsigned char  val)

この関数は実装していない

シリアルポートに1文字出力する

引数
val文字コード
戻り値
実際に出力した文字数
size_t CSerial::write ( const char *  str)

シリアルポートに文字列を出力する

引数
strヌル(\0)で終わる文字列
戻り値
実際に出力した文字数
size_t CSerial::write ( const String  str)

シリアルポートにString型を出力する

引数
strString型のオブジェクト
戻り値
実際に出力したバイト数
size_t CSerial::write ( const unsigned char *  buf,
int  len 
)

シリアルポートに指定した長さのデータ列を出力する

引数
buf出力データ
len出力データの長さ
戻り値
実際に出力したバイト数
size_t CSerial::print ( const char  str[])

シリアルポートに文字列を出力する

引数
strヌル(\0)で終わる文字列
戻り値
実際に出力したバイト数
size_t CSerial::print ( const String  str)

シリアルポートにString型を出力する

引数
strString型のオブジェクト
戻り値
実際に出力したバイト数
size_t CSerial::print ( char  c)

シリアルポートに文字を出力する

引数
c出力したい文字コード
戻り値
実際に出力したバイト数
size_t CSerial::print ( unsigned char  c,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力する

引数
c出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::print ( int  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::print ( unsigned int  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::print ( long  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::print ( unsigned long  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::print ( double  val,
int  fpdigit = 2 
)

シリアルポートに浮動小数点数を出力する

引数
val出力したい値
fpdigit桁数
戻り値
実際に出力したバイト数
size_t CSerial::println ( const char  str[])

シリアルポートに文字列を出力して改行コード(\n\r)を出力する

引数
strヌル(\0)で終わる文字列
戻り値
実際に出力した文字数
size_t CSerial::println ( const String  str)

シリアルポートにString型を出力して改行コード(\n\r)を出力する

引数
strヌル(\0)で終わる文字列
戻り値
実際に出力した文字数
size_t CSerial::println ( char  c)

シリアルポートに文字を出力して改行コード(\n\r)を出力する

引数
c出力したい文字コード
戻り値
実際に出力したバイト数
size_t CSerial::println ( unsigned char  c,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する

引数
c出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::println ( int  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::println ( unsigned int  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::println ( long  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::println ( unsigned long  val,
int  print_type = DEC 
)

シリアルポートに値(数字)を出力して改行コード(\n\r)を出力する

引数
val出力したい値
print_type基数
  • 2: 二進数
  • 8: 8進数
  • 10: 10進数 (デフォルト)
  • 16: 16進数
戻り値
実際に出力したバイト数
size_t CSerial::println ( double  val,
int  fpdigit = 2 
)

シリアルポートに浮動小数点数を出力して改行コード(\n\r)を出力する

引数
val出力したい値
fpdigit桁数
戻り値
実際に出力したバイト数
size_t CSerial::println ( void  )

シリアルポートに改行コードのみ出力して改行コード(\n\r)を出力する

引数
なし
戻り値
実際に出力したバイト数
sci_str* CSerial::get_handle ( )

このクラスに結びつけられている特電HALのシリアル構造体へのハンドルを得る

引数
なし

より低レベルなシリアル操作を行うときに使います

戻り値
シリアルクラスのハンドル