関数 serialEvent のリファレンスが Arduino について十分に文書化されていないことを伝え始めます。 https://www.arduino.cc/en/Reference/SerialEvent
情報が不足しているため、この機能がどのように機能するかを誤解しています。私がArduino Mega 2560を持っているので、4つのシリアル入力/出力が付属しており、それらには独自のserialEventX関数があります(X = {'',1,2,3})。
ESP8266 モジュールとの通信に成功しました。ESP8266 モジュールは、クライアントが接続されると情報を送受信します。
serialEvent1 (RX1 と TX1 に接続されているため 1) を使用して、データが着信したときにのみ serialEvent1 を呼び出したいのですが、実際には Serial1.write(msg) を使用するたびに呼び出されるため、メッセージが送信されているときを意味します。
#define DEBUG_ESP8622 1
#include <esp8622.h>
#include <string.h>
#include "common.h"
#include <stdlib.h>
Wifi esp = Wifi(); //Here Serial1.begin(115200) happens
void setup() {
Serial.begin(9600); //First of all SERIAL for debugging
Serial.println("Starting");
while(!esp.sReachable()); //Works
Serial.println("ESP found");
while(!esp.sSetMode(1)); //Works
Serial.println("Mode set to Client");
while(!esp.sConnect(WIFISSID,WIFIPASSWORD)); //Works
Serial.println("Connected");
Serial.print("IP:");
Serial.println(esp.getIP());
while(!esp.sStartServer(80)); //Works
Serial.println("Server started");
}
void loop() {
if(Serial.available()>0){
int inByte=Serial.read();
/*HERE whenever I call Serial1.write(inByte)
serialEvent1 will be called at the end of the loop
but actually I don't want it to
*/
Serial1.write(inByte);
}
}
void serialEvent(){
return;
}
void serialEvent1(){
Serial.println("Write or Read event?");
while(Serial1.available()>0){
int inByte=Serial1.read();
//Serial.write(inByte);
}
//esp.onSerialEvent(); //Stores message and parses it, not relevant
return;
}
Arduino ライブラリが AVR libc ライブラリに基づいていることがわかったので、マイクロコントローラ内の RX1 および TX1 割り込みは、Arduino ライブラリを介して serialEvent1 の両方にバインドされていると思います。
ライブラリを使用して serialEvent1 から TX1 のみをバインド解除し、Arduino ライブラリ (Serial1.write()/read()) を引き続き使用することは可能ですか?
Makefile を使用して Mega にコードをアップロードする最も簡単な方法を使用します。これまでのところ、私のニーズに合っているため、コマンドラインからarduinoを使用することを選択しました.avrdudeとavr-gccは、コマンドラインからコンパイル/アップロードするためのより完全で優れた方法であることを知っています。間違っている場合は修正してください。
CC=arduino
upload: terminal.ino
$(CC) terminal.ino --upload
verify: terminal.ino
$(CC) terminal.ino --verify
を使い始めたら、代わりに avrdude と avr-gcc の使い方を学び始めるべきですか? (または、AVR ライブラリを使用しているという事実とは関係ないかもしれません)
最後に、上記の Makefile を USB ケーブルで使用しています。avrdude と avr-gcc を使用する場合、ICSP 経由ですか、それとも USB ケーブル経由で使用できますか? これはブートローダーを削除しますか?
どうもありがとう