C++ 如何在Arduino和Console的程序之间传递布尔值
我希望在arduino和windows控制台上与两个程序进行布尔值的通信。我在C++中工作,在计算机端使用VisualStudio,在ARDUNO上使用标准的ARDUINO版本C++。我尝试过的所有搜索都让我使用了windows窗体和UI上的按钮。我希望这一切都是自动完成的,并让两个程序等待,直到另一个已经迭代。我尝试了一些串行端口示例,但由于某种原因,到目前为止没有一个能够正常工作。 这是我的控制台代码:C++ 如何在Arduino和Console的程序之间传递布尔值,c++,arduino,serial-port,C++,Arduino,Serial Port,我希望在arduino和windows控制台上与两个程序进行布尔值的通信。我在C++中工作,在计算机端使用VisualStudio,在ARDUNO上使用标准的ARDUINO版本C++。我尝试过的所有搜索都让我使用了windows窗体和UI上的按钮。我希望这一切都是自动完成的,并让两个程序等待,直到另一个已经迭代。我尝试了一些串行端口示例,但由于某种原因,到目前为止没有一个能够正常工作。 这是我的控制台代码: #include "stdafx.h" #include <stdio.h>
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <iostream>
using namespace std;
const int PIXEL_X = 1153;
const int PIXEL_Y = 636;
const int RED = 0;
const int BLUE = 50;
const int GREEN = 200;
const int TOLERANCE = 30;
int main(void) {
COLORREF color;
HDC hDC;
do {// Get the device context for the screen
Sleep(50);
hDC = GetDC(NULL);
// Retrieve the color at that position
color = GetPixel(hDC, PIXEL_X, PIXEL_Y);
// Release the device context again
ReleaseDC(GetDesktopWindow(), hDC);
printf("%i %i %i", GetRValue(color), GetGValue(color), GetBValue(color));
int flag = 0;
if (fabs(GetRValue(color) - RED) > TOLERANCE) {
flag += 1;
}
if (fabs(GetGValue(color) - GREEN) > TOLERANCE) {
flag += 1;
}
if (fabs(GetBValue(color) - BLUE) > TOLERANCE) {
flag += 1;
}
if (flag >= 2) {
return 0;
}
//TODO 1: Send Serial data to continue and wait for return statement
} while (true);
return 0;
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
const int PIXEL_X=1153;
常数int像素_Y=636;
常数int RED=0;
常数int蓝色=50;
常数int绿色=200;
常数int公差=30;
内部主(空){
COLORREF color;
HDC-HDC;
是否{//获取屏幕的设备上下文
睡眠(50);
hDC=GetDC(空);
//检索该位置的颜色
颜色=获取像素(hDC、像素X、像素Y);
//再次释放设备上下文
ReleaseDC(GetDesktopWindow(),hDC);
printf(“%i%i%i”、GetRValue(颜色)、GetGValue(颜色)、GetBValue(颜色));
int标志=0;
if(晶圆厂(GetRValue(颜色)-红色)>公差){
flag+=1;
}
if(晶圆厂(GetGValue(颜色)-绿色)>公差){
flag+=1;
}
if(晶圆厂(GetB值(颜色)-蓝色)>公差){
flag+=1;
}
如果(标志>=2){
返回0;
}
//TODO 1:发送串行数据以继续并等待return语句
}虽然(正确);
返回0;
}
编辑:这是我的arduino代码
#include <Servo.h>
Servo myServo;
Servo myServo2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myServo.attach(2);
myServo2.attach(3);
}
void A_button() {
myServo.write(125);
delay(1000);
myServo.write(97);
delay(250);
}
void L_button() {
myServo2.write(72);
delay(1000);
myServo2.write(90);
delay(250);
}
void loop() {
for(int i=0; i < 16; i++) {
A_button();
Serial.print("1 ");
delay(1500);
}
delay(3000);
// TODO 2: send Serial data
L_button();
Serial.print("0 ");
}
#包括
伺服myServo;
伺服myServo2;
无效设置(){
//将安装代码放在此处,以便运行一次:
Serial.begin(9600);
myServo.attach(2);
myServo2.附件(3);
}
作废按钮(){
myServo.write(125);
延迟(1000);
myServo.write(97);
延迟(250);
}
无效L_按钮(){
myServo2.write(72);
延迟(1000);
myServo2.write(90);
延迟(250);
}
void循环(){
对于(int i=0;i<16;i++){
A_按钮();
连续打印(“1”);
延迟(1500);
}
延迟(3000);
//TODO 2:发送串行数据
L_按钮();
连续打印(“0”);
}
编辑:谢谢你的回复。我希望控制台应用程序代码等到arduino代码转到TODO 2,然后控制台应用程序运行到TODO 1,并检查RGB值是否在其公差范围内。如果RGB值在ToLance范围内,那么我希望arduino代码继续迭代,直到TODO 2再次出现并重复。我没有任何C++代码用于串行通信,因为我尝试过的例子中没有一个编译过,而且我不能用Windows窗体。
我想让代码在TODO等待,但我完全不知道如何做到这一点,并将感谢任何帮助。如果有需要,我会详细说明。
先谢谢你