arduino-PC間の通信を行いたいです。下記サイトを参考にしましたがArduino側で「windows.h:No such file or directory」と出ます。これの解決策を教えていただきたいです。
https://monitorgazer.blogspot.com/2013/06/carduinoled.html
実現したいこと
上記URLにあるようにC言語でArduinoとシリアル通信してLEDを制御したいです。
発生している問題・エラーメッセージ
Arduino:1.8.19 (Windows 10), ボード:"Seeeduino XIAO, Arduino, Off, USART"
Serial_sample.c:2:9: fatal error: windows.h: No such file or directory
#include<windows.h>
^~~~~~~~~~~
compilation terminated.
exit status 1
windows.h: No such file or directory
「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。
該当のソースコード
Arduino側のソースコード(Arduino言語)
const int LED = 10;
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(LED,OUTPUT);
digitalWrite(LED,LOW);
}
void loop() {
// send data only when you receive data: if (Serial.available() > 0) { incomingByte = Serial.read(); if(incomingByte == 1){ digitalWrite(LED,HIGH); } } delay(10);
}
PC側のソースコード(C言語)
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
HANDLE arduino;
bool Ret;
void main(void){
BYTE data = 1;
//1.ポートをオープン
arduino = CreateFile("COM7",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
//2014/01/22追記 これでつながらない場合には"\\.\COM7"とするとつながるかもしれません。
if(arduino == INVALID_HANDLE_VALUE){
printf("PORT COULD NOT OPEN\n");
system("PAUSE");
exit(0);
}
//2.送受信バッファ初期化
Ret = SetupComm(arduino,1024,1024);
if(!Ret){
printf("SET UP FAILED\n");
CloseHandle(arduino);
system("PAUSE");
exit(0);
}
Ret = PurgeComm(arduino,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
if(!Ret){
printf("CLEAR FAILED\n");
CloseHandle(arduino);
exit(0);
}
//3.基本通信条件の設定
DCB dcb;
GetCommState(arduino,&dcb);
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 9600;
dcb.fBinary = TRUE;
dcb.ByteSize = 8;
dcb.fParity =NOPARITY;
dcb.StopBits = ONESTOPBIT;
Ret = SetCommState(arduino,&dcb);
if(!Ret){
printf("SetCommState FAILED\n");
CloseHandle(arduino);
system("PAUSE");
exit(0);
}
//4.送信
DWORD dwSendSize;
DWORD dwErrorMask;
Ret = WriteFile(arduino,&data,sizeof(data),&dwSendSize,NULL);
if(!Ret){
printf("SEND FAILED\n");
CloseHandle(arduino);
system("PAUSE");
exit(0);
}
printf("FINISH\n");
CloseHandle(arduino);
system("PAUSE");
}
試したこと
普通に通信なしでArduinoのみでLEDを光らせることはできました。
ライブラリをインクルードするためにライブラリマネージャーでwindows.hを探しましたがありませんでした。
windows.hそのものは「C:\MinGW\include」に存在していました。
PC側のソースコードはVisual codeで書いております。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答3件
あなたの回答
tips
プレビュー