Serial port PixyCam(CMUCam5)串行打印出奇怪的东西?
我试图从连接到Arduino的PixyCam获取颜色x和y坐标,一切正常,但当我打开串行端口时,它输出的数字和字母甚至不在代码中 它的作用示例: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 ~ ~
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);