/*ArduinoからVSRCへ変数を上書きするパケットを送るスケッチ *2021_11_25 *SoftwareSerial版 *Arduinoからの送信のみ。SoftwareSerialの制約上受信は不能。 *RobovieMaker2とVSRCが通信している状態とこのArduinoとVSRCが通信している状態が *同時に発生した場合、高確率でVSRCとRobovieMaker2がフリーズする現象が起きています。 *無理やり頑張れば使えますが、結構な確率でフリーズしますのでご了承ください。 *【注意】このテキストファイルはWeb閲覧用に文字コードをANSIにしています。 * 使用する際はこのページのスケッチを全コピーして新規スケッチに張り付ける形で使用してください。 */ #include //ソフトウェアシリアルライブラリのインクルード SoftwareSerial c_vsrc(23, 12); //RX(使用不可) , TX void setup() { pinMode(13, OUTPUT); //送信したことがわかるようにArduino本体LEDの準備 digitalWrite(13, LOW); //13番ピンをLOWに設定 } void loop() { digitalWrite(13, HIGH); //13番ピンをHIGHに設定 int a; //変数の宣言 vsrc(64, a); //VSRCの変数64にaを送信 a = a + 1; //aを1増やす digitalWrite(13, LOW); //13番ピンをLOWに設定 delay(1000); //1秒(1000ミリ秒)待つ } void vsrc(int target, int point) { if (target >= 63 && target <= 255) { if (point >= -32769 && point <= 32768) { int i; char ch_target[6]; sprintf(ch_target, "%6x", 0x200800 + target * 2); char ch_point[4]; sprintf(ch_point, "%04x", point); char packet[] = "w 200800 00 00\r\n"; for (i = 3; i <= 5; i++) { packet[i + 2] = ch_target[i]; } packet[9] = ch_point[2]; packet[10] = ch_point[3]; packet[12] = ch_point[0]; packet[13] = ch_point[1]; c_vsrc.begin(115200); c_vsrc.print(packet); c_vsrc.flush(); c_vsrc.end(); } } }