GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
RL78/G13用ライブラリに対して、次版のV2.02にSoftwareSerialを入れようと考えています。FTDI USBシリアル変換モジュールを用いて4800, 9600, 57600, 115200bpsでの動作確認を行いました。ソースは以下の通りです。
GR-ADZUKIでは、USB通信用(pin0, pin1)、Wire(pin7, pin8)、モーター(pin9, pin10)でシリアルがつぶれてしまい、ESP8266やXBee等を使ったリモート制御がやりづらい状況でした。SoftwareSerialによって、これを解決したいという理由です。
なお、Arduino(AVR)ではピンチェンジ割り込みというほぼ全端子に外部割り込みが使える機能があるので、ArduinoではSoftwareSerialはほぼ全端子に使えますが、RL78/G13ではそんな機能がないため、シリアルの受信開始用に使用できるピンは外部割り込みがアサインされたpin2(INT0), pin3(INT1)だけとなります。送信はいずれのピンでも大丈夫です。
9月初旬にV-upを考えていますので、何かご意見、コメントありましたらよろしくお願いいたします。
pins_arduino.hも変更してます。
以下、サンプルです。
#include <Arduino.h>#include <SoftwareSerial.h>SoftwareSerial mySerial(2, 3); // RX, TXvoid setup() { // Open serial communications and wait for port to open: Serial.begin(115200); // set the data rate for the SoftwareSerial port mySerial.begin(115200);}void loop() { // run over and over#if 0 mySerial.println("Hello, world?"); delay(100);#else if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); }#endif}
> pins_arduino.hも変更してます。 > > pins_arduino.h
↓ が追加されてますが
const uint32_t PROGMEM port_to_output_PGM[] = { 0xFFF00, 0xFFF01, 0xFFF02, 0xFFF03, 0xFFF04, 0xFFF05, 0xFFF06, 0xFFF07, }; const uint32_t PROGMEM port_to_input_PGM[] = { 0xFFF00, 0xFFF01, 0xFFF02, 0xFFF03, 0xFFF04, 0xFFF05, 0xFFF06, 0xFFF07, };
↓で参照するのはおかしいのでは?
extern const uint16_t PROGMEM port_to_input_PGM[]; extern const uint16_t PROGMEM port_to_output_PGM[]; #define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) ) #define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
ビルドすると下記のエラーとなりました。
gr_common/cores/pins_arduino.h:407:24: error: conflicting types for 'port_to_output_PGM' const uint32_t PROGMEM port_to_output_PGM[] = { ^ In file included from gr_common/cores/wiring_private.h:39:0, from gr_common/cores/wiring_digital.c:31: gr_common/cores/Arduino.h:529:31: note: previous declaration of 'port_to_output_PGM' was here extern const uint16_t PROGMEM port_to_output_PGM[]; ^ In file included from gr_common/cores/Arduino.h:628:0, from gr_common/cores/wiring_private.h:39, from gr_common/cores/wiring_digital.c:31: gr_common/cores/pins_arduino.h:418:24: error: conflicting types for 'port_to_input_PGM' const uint32_t PROGMEM port_to_input_PGM[] = { ^ In file included from gr_common/cores/wiring_private.h:39:0, from gr_common/cores/wiring_digital.c:31: gr_common/cores/Arduino.h:528:31: note: previous declaration of 'port_to_input_PGM' was here extern const uint16_t PROGMEM port_to_input_PGM[]; ^ make: *** [makefile:116: gr_common/cores/wiring_digital.o] Error 1 make: *** Waiting for unfinished jobs....
pins_arduino.h の変更は行わずに ↓ の変更で良い気がしますが。
#define portOutputRegister(P) ( (volatile uint8_t *)( P0 + (P)) ) #define portInputRegister(P) ( (volatile uint8_t *)( P0 + (P)) )