開始,這可能不是arduino代碼或arduino的問題,但我想我會在這裏發佈,因爲我真的不知道什麼是錯的。計算機通過串行更改值Arduino兆豐
我正在從事這個項目只是爲了好玩,從鍵盤發送按鍵,通過計算機,並通過USB到我的arduino巨型。這裏沒有額外的硬件,只有電腦,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問題(我不認爲)。
所以當密鑰的確定值被髮送到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);
}
截至目前它僅僅是切換光開和關。我希望能夠涉及更多的按鍵,並保證值的一致性會非常方便。無論如何,如果任何人都可以幫助我,爲什麼價值是不同的,這將是真棒。我對編程並不是全新的,但我當然不是專家,也沒有太多進入先進的東西。
謝謝任何幫助或建議。
好的,這是有道理的,但是,當我把它作爲一個整數,但我不能將它發送到arduino。有些東西不能將int轉換爲字符串。如何使用IO :: Ports:WriteLine發送一個int值?我一直在尋找,但我找不到任何例子。 – Ben
你可以這樣發送一個字符串:當你按1時,getch()返回一個數字,但是把這個數字轉換成字符串「1」並且發送「1」給Arduino。應該有一些功能將ASCII值映射回按下的實際按鍵。或者如果k == 49 myString =「1」 – user2461391