Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Arduino和Console的程序之间传递布尔值_C++_Arduino_Serial Port - Fatal编程技术网

C++ 如何在Arduino和Console的程序之间传递布尔值

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>

我希望在arduino和windows控制台上与两个程序进行布尔值的通信。我在C++中工作,在计算机端使用VisualStudio,在ARDUNO上使用标准的ARDUINO版本C++。我尝试过的所有搜索都让我使用了windows窗体和UI上的按钮。我希望这一切都是自动完成的,并让两个程序等待,直到另一个已经迭代。我尝试了一些串行端口示例,但由于某种原因,到目前为止没有一个能够正常工作。 这是我的控制台代码:

#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等待,但我完全不知道如何做到这一点,并将感谢任何帮助。如果有需要,我会详细说明。 先谢谢你