まず、これは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の問題ではありません(私は思いません)。
したがって、キーの特定の値が arduino に送信されると、値が変更されます。たとえば、数字の 1 と 2 を押すための変数キーに割り当てられる値は、それぞれ 49 と 50 です。ただし、それらがarduinoに送信されると、値は何らかの方法で異なります。1 は現在 57 歳、2 は現在 48 歳です。なぜこれが起こっているのかはわかりません。私は 4 と 5 を試しましたが、どちらも値がキー 2 のように 2 シフトダウンしています。
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);
}
今のところ、ライトのオンとオフを切り替えるだけです。より多くのキーを使用したいと考えており、値が一貫していると非常に便利です。とにかく、値が異なる理由について誰かが私を助けることができれば、それは素晴らしいことです. 私はプログラミングにまったく慣れていませんが、確かに専門家ではなく、高度なことにはあまり触れていません。
助けやアドバイスをありがとう。