计算机到Arduino mega通过串行更改值

时间:2013-08-06 18:20:55

标签: visual-c++ serialization arduino visual-studio-express arduino-ide

开始,这可能不是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.我不确定为什么会发生这种情况。我尝试了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);
}

截至目前,它只是打开和关闭灯。我希望涉及更多的键,并使值保持一致将非常方便。无论如何,如果有人可以帮助我,为什么价值观是不同的,这将是非常棒的。我并不是一个全新的编程人员,但我当然不是专家,也没有深入研究高级的东西。

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

这与您通过visual studio发送的内容有关。您正在将按键转换为其ASCII值,然后将该ASCII值转换为字符串,然后通过串行发送该字符串。 arduino期待一个数字,而不是字符串。

例如,如果按1键,您的visual studio代码会将其转换为ASCII码49,然后将其转换为Arduino收到的字符串“49” - 但由于您发送的是“49”,如你所见,Arduino是一个“4”和一个“9”,读数为9,相当于57。

同样,按2将其转换为“50”,Arduino读取“0”,对应于您获得的值48。

要解决此问题,请直接发送号码,不要将其转换为字符串。