首先,这可能不是 arduino 代码或 arduino 的问题,但我想我会在这里发帖,因为我真的不知道出了什么问题。
我在做这个项目只是为了好玩,从键盘发送击键,通过计算机,通过 USB 发送到我的 arduino mega。这里没有其他硬件,只有计算机、arduino 和 USB 电缆。
我正在使用 Microsoft Visual Studio Express 2012 编写代码来接收击键并将它们发送到 USB。这是我正在使用的代码:
#include "stdafx.h"
#include "conio.h"
using namespace System;
using namespace System::IO::Ports;
int main(array<System::String ^> ^args)
{
String^ portName;
String^ key;
int baudRate=9600;
Console::WriteLine("type in a port name and hit ENTER");
portName=Console::ReadLine();
//arduino settings
SerialPort^ arduino;
arduino = gcnew SerialPort(portName, baudRate);
//open port
try
{
arduino->Open();
while(1)
{
int k = getch();
key = k.ToString();
Console::WriteLine(key);
arduino->Write(key);
if (k == 32)
return 0;
}
}
catch (IO::IOException^ e )
{
Console::WriteLine(e->GetType()->Name+": Port is not ready");
}
}
此代码工作正常,并向 arduino 发送命令。我也不妨问这个问题,但是在 35 次击键后它只是停止发送击键,我不确定为什么,但这不是 arduino 问题(我不认为)。
因此,当 key 的特定值被发送到 arduino 时,它会发生变化。例如,分配给用于按下数字 1 和 2 的变量键的值分别为 49 和 50。但是,当它们被发送到 arduino 时,值会有所不同。1 现在是 57,2 现在是 48。我不确定为什么会这样。我尝试了 4 和 5,它们的值都像键 2 一样向下移动 2。这是我在 arduino 上的代码:
int ledPin = 13;
int key=0;
int c;
void setup()
{
pinMode(ledPin, OUTPUT); // pin will be used to for output
Serial.begin(9600); // same as in your c++ script
}
void loop()
{
if (Serial.available() > 0)
{
key = Serial.read(); // used to read incoming data
if (key == 57)
{
digitalWrite(ledPin, HIGH);
}
else if (key == 48)
{
digitalWrite(ledPin, LOW);
}
}
c = key;
Serial.println(c);
}
截至目前,它只是打开和关闭灯。我希望涉及更多的键,并且使值保持一致将非常方便。无论如何,如果有人可以帮助我解释为什么价值观不同,那就太棒了。我对编程并不完全陌生,但我当然不是专家,也没有深入了解高级的东西。
感谢您提供任何帮助或建议。