だから、私はこれを引き起こしているか分からないが、多分単純なものを見落としているかもしれない。私は、640 Hzでアナログ入力を読み取るように設計されたシンプルなプログラムを持っています。
int Ch0 = 0;
int count = 0;
unsigned long startTime;
unsigned long currentTime;
bool startedReading = false;
void setup() {
//set up pin(s)
pinMode(Ch0, INPUT);
//begin serial at 115200bps
Serial.begin(115200);
}
...
//if the current time exceeds the start time by one second, set the start time equal to current time, print the count, set count equal to zero
if (currentTime - startTime >= 1000) {
startTime = currentTime;
Serial.println("time");
count = 0;
}
//read input, delay some microseconds as a means of controlling sampling rate, bring count up by one
//should read somewhere along the lines of 640-ish Hz
analogRead(Ch0);
delayMicroseconds(1230);
Serial.println(count);
count++;
そして、これはすべてArduino IDEでうまく動作し、シリアルモニタをプルアップし、すべての番号が1〜640の数字で表示され、その後、良い一貫性で時間が表示されます。それでも、Visual Studioプログラムを開いて、次のコマンドを呼び出すと、
編集:全体のデータ受信イベントメソッドを追加
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
if (!this->reading) return;
else
{
try
{
//get incoming port and read
SerialPort^ sp = (SerialPort^)sender;
String^ sInData = sp->ReadLine();
//parse read data
double inData = double::Parse(sInData);
//write data to debugger for testing
Debug::WriteLine(inData);
//start populating the "in" array
AppendIn(inData);
}
catch (Exception^ e)
{
Debug::WriteLine(e->Message);
}
}
}
文字列「時間」を解析して1秒が経過したことを示すときに発生する明白なエラーを除いて、すべて正常に動作します。数字がデバッガに非常にゆっくりと供給されるという事実を除いては、でのように、それは約4〜5秒のカウント整数のすべての640読み込みを読み取るためにかかるし、それは私に時間をスローします。したがって、これはArduinoが実際に1秒が経過してからそれを送信することを計算していると結論づけますが、出力は本質的に同じです。唯一の違いは、メッセージがArduino IDEで読み込むのに正確に1秒かかりますVisual Studioでリアルタイムで4秒間読み取ります。
たぶんそれは私がVSのデータを読んでいる方法と関係がありますか?シリアル経由でデータが受信されたときに、そのメソッドをイベントとして毎回呼び出すことによって、ストリームを常に監視するように設定しました。データが全く失われていない、それはちょうど非常に遅いです...そしてVSでのみ。あなたが与えることができる任意のヘルプの事前に感謝が、私は少しの損失になっています。