Есть ардуина и подключенный к ней датчик (какой, роли не играет) он подает данные на ардуино, а она соответственно на пк. Мне нужно написать код на с++ что бы выводили эти значения.
Нашел на просторах интернета данный код он запускается, но не выводит значения.
#include <windows.h>
#include <stdio.h>
void main()
{
HANDLE port = CreateFile(L"COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);
unsigned char dst[1024] = {0};
unsigned long size = sizeof(dst);
unsigned long recv;
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 5;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
if(SetCommTimeouts(port, &CommTimeOuts) == 0)
{
puts("Error of SetCommTimeouts");
}
if(port!= INVALID_HANDLE_VALUE)
{
int i;
for (i=1; i< 10; i++)
{
if(ReadFile(port,dst,size, &recv,0))
{
if(recv > 0) {
printf("Read %d bytes\n",recv);
printf("%s\n", dst);
}
}
printf("%i\r", i);
}
}
else
{
puts("Error of Handler - INVALID_HANDLE_VALUE");
}
}
И код на arduino
int sensorpin = A0;
void setup() {
Serial.begin(115200);
}
void loop() {
float sensorValue = analogRead(sensorpin);
byte data = Serial.read();
if (data == 's')
{
Serial.println(sensorValue);
delay(10);
}
}
Ранее писал это действие на питоне и все работало, а как на с++ это сделать не понимаю.
import time
import matplotlib.pyplot as plt
import serial
port = serial.Serial('COM4', 115200, timeout=0.5)
plt.ion()
while (True):
port.write(b's')
if (port.inWaiting()):
value = port.readline()
print(value)
number = float(value)
print(number)
time.sleep(1)
Переделал, все работает. Но какой-то странный баг или я не знаю что это. Но перед запуском кода на нужно сперва прослушать порты платы в Arduino IDE
Код на С++
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
HANDLE hSerial;
void ReadCOM()
{
DWORD iSize;
char sReceivedChar;
while (true)
{
ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);
if (iSize > 0)
cout << sReceivedChar;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR sPortName = L"COM3";
hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
while(1)
{
ReadCOM();
}
return 0;
}
Код на ардуино
int photocellPin = 0;
int photocellReading;
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
photocellReading = analogRead(photocellPin);
Serial.println(photocellReading);
delay(100);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Количество объектов класса MCP в векторе _rheos заранее неизвестноstd::vector использую впервые
Я попытался использовать ключевые слова из с++20 связанные с корутинами, но компилятор выдает ошибку
Создание std::shared_ptr через std::make_shared может быть полезным в следующем случае: