Port monitor errorというエラー

実現したいこと

VisualStudioとArduinoをシリアル通信したい
VisualStudio側で入力した文字をArduino IDEのシリアルモニタに出力し、シリアル通信が実現できていることを確認したい

発生している問題・分からないこと

Arduino IDEのシリアルモニタに”Port monitor error: command 'open'failed:Serial port busy. Could not connect to COM3 serial port.”と出力される

エラーメッセージ

error

1”Port monitor error: command 'open'failed:Serial port busy. Could not connect to COM3 serial port.”

該当のソースコード

”visualstudio側” #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> void error(const char* msg) { perror(msg); exit(1); } int main() { HANDLE hComm; DCB dcbSerialParams = { 0 }; COMMTIMEOUTS timeouts = { 0 }; // シリアルポートの設定 const char* portName = "COM3"; // Arduinoが接続されているポートを指定 const int baudRate = 9600; // Arduinoとの通信速度を指定 // ポート名をワイド文字列に変換 wchar_t portNameWide[10]; mbstowcs(portNameWide, portName, strlen(portName) + 1); // シリアルポートを開く hComm = CreateFile(portNameWide, // ポート名 GENERIC_READ | GENERIC_WRITE, // 読み書き許可 0, // 共有モードなし NULL, // セキュリティ属性 OPEN_EXISTING, // 既存のポートを開く 0, // フラグと属性 NULL); // テンプレートファイル if (hComm == INVALID_HANDLE_VALUE) { error("Error opening serial port"); } // シリアルポートパラメータの設定 dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(hComm, &dcbSerialParams)) { error("Error getting state"); } dcbSerialParams.BaudRate = baudRate; // ボーレート dcbSerialParams.ByteSize = 8; // データビット数 dcbSerialParams.StopBits = ONESTOPBIT; // ストップビット dcbSerialParams.Parity = NOPARITY; // パリティなし if (!SetCommState(hComm, &dcbSerialParams)) { error("Error setting state"); } // タイムアウトの設定 timeouts.ReadIntervalTimeout = 50; timeouts.ReadTotalTimeoutConstant = 50; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 50; timeouts.WriteTotalTimeoutMultiplier = 10; if (!SetCommTimeouts(hComm, &timeouts)) { error("Error setting timeouts"); } // ユーザー入力の受け取りとデータの送信 char inputBuffer[256]; DWORD dwBytesWritten; printf("Enter text to send to Arduino (type 'exit' to quit):\n"); while (1) { // ユーザー入力を受け取る printf("> "); fgets(inputBuffer, sizeof(inputBuffer), stdin); // 入力が'exit'なら終了 if (strncmp(inputBuffer, "exit", 4) == 0) { break; } // 入力データをArduinoに送信 if (!WriteFile(hComm, inputBuffer, strlen(inputBuffer), &dwBytesWritten, NULL)) { error("Error writing to port"); } printf("Sent: %s", inputBuffer); // 送信内容を表示 } // シリアルポートを閉じる CloseHandle(hComm); return 0; } "Arduino IDE側" void setup() { Serial.begin(9600); // シリアル通信のボーレートを設定 while (!Serial) { ; // シリアルポートが開かれるのを待つ } } void loop() { if (Serial.available() > 0) { String received = Serial.readStringUntil('\n'); // シリアルポートからデータを読み取る Serial.print("Received: "); Serial.println(received); // データをシリアルモニタに表示 } }

試したこと・調べたこと

上記の詳細・結果

Arduino IDE を再起動する、他のプログラムを閉じる、デバイスマネージャーで COM ポートを確認する、シリアルポートをリセットするは行いましたが何も進捗はありませんでした

補足

特になし

コメントを投稿

0 コメント