Serial port PixyCam(CMUCam5)串行打印出奇怪的东西?

Serial port PixyCam(CMUCam5)串行打印出奇怪的东西?,serial-port,arduino,Serial Port,Arduino,我试图从连接到Arduino的PixyCam获取颜色x和y坐标,一切正常,但当我打开串行端口时,它输出的数字和字母甚至不在代码中 它的作用示例: b(a right arrow) (tabbed over 2 times) 96 q(2 right arrows) (tabbed over once) 183 p(no arrows) (tabbed once) 52 (tabbed 2 times) 105 我的目标是让它做到: X y ~ ~

我试图从连接到Arduino的PixyCam获取颜色x和y坐标,一切正常,但当我打开串行端口时,它输出的数字和字母甚至不在代码中

它的作用示例:

b(a right arrow) (tabbed over 2 times) 96
q(2 right arrows) (tabbed over once) 183
p(no arrows) (tabbed once) 52 (tabbed 2 times) 105
我的目标是让它做到:

    X        y
    ~        ~
 B:182       5
 P:23        82
 O:62        140
这是我的密码

Pixy pixy;

void setup() 
{
  //Put your setup code here, to run once:
  Serial.begin(9600);
  Serial.print("Starting...\n");
  Serial.print("\t\n X \t Y");
  Serial.print("\t\n ~ \t ~\n");
  pixy.init();
}
void loop() 
{
  int blocks = pixy.getBlocks();
  if(pixy.getBlocks())
  {

    //For the color red
    if (pixy.blocks[0].signature == 1)
    {

      Serial.print("R:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Orange
       else if (pixy.blocks[0].signature == 2)
    {

      Serial.print("O:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Yellow
       else if (pixy.blocks[0].signature == 3)
    {

      Serial.print("Y:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Green
       else if (pixy.blocks[0].signature == 4)
    {

      Serial.print("G:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Cyan
       else if (pixy.blocks[0].signature == 5)
    {

      Serial.print("C:\t"+ pixy.blocks[0].x);
      Serial.print("\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Blue
       else if (pixy.blocks[0].signature == 6)
    {

      Serial.print("B:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

    //For the color Violet
       else if (pixy.blocks[0].signature == 7)
    {

      Serial.print("V:\t"+ pixy.blocks[0].x);
      Serial.print("\t\t");
      Serial.println(pixy.blocks[0].y);
      delay(500);
    }

  }

}

很抱歉,如果代码一般,我对Arduino的使用/编程还不熟悉。

请尝试拆分每一行:

Serial.print("R:\t"+ pixy.blocks[0].x);
Serial.print("O:\t"+ pixy.blocks[0].x);
Serial.print("Y:\t"+ pixy.blocks[0].x);
Serial.print("G:\t"+ pixy.blocks[0].x);
Serial.print("C:\t"+ pixy.blocks[0].x);
Serial.print("B:\t"+ pixy.blocks[0].x);
Serial.print("V:\t"+ pixy.blocks[0].x);
进入(例如):


我怀疑
pixy.blocks[0].x
正在返回一个整数。在C语言中,当您向字符串中添加整数时,它(可能与直觉相反)会计算字符串中的字符数。由于这将脱离
“R:\t”
字符串的末尾,因此会导致
Serial.print()
从Arduino内存输出随机字符。将调用一分为二可以正确打印整数部分。

实际上,我发现了问题所在。始终建议将文本添加到字符(char)数组中。然后打印包含文本的缓冲区(在示例代码中称为“buf”)。此外,添加了一个延迟(注释掉)帮助的平滑串行打印

char buf[32];     //Hold's 32 characters, or so I was told?
sprintf(buf,"Your data goes here %d",pixy.getBlock[0]);//Grabs block zero's data
//delay(500); <<< In milliseconds
Serial.print(buf);
charbuf[32]//Hold是32个字符,或者是别人告诉我的?
sprintf(buf,“您的数据放在这里%d”,pixy.getBlock[0])//抓取块零的数据

//延迟(500);我找到了解决办法,在一位朋友的帮助下,我回答了自己的问题。考虑到他是这样向我解释的,我希望我把一切都记对了。谢谢你的帮助!我知道我迟到了4年,但你怎么在PixyCam2上做到这一点?我得到一个退出状态为1的
Pixy2没有成员命名块
错误。
char buf[32];     //Hold's 32 characters, or so I was told?
sprintf(buf,"Your data goes here %d",pixy.getBlock[0]);//Grabs block zero's data
//delay(500); <<< In milliseconds
Serial.print(buf);