まず、これは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);
}
今のところ、ライトのオンとオフを切り替えるだけです。より多くのキーを使用したいと考えており、値が一貫していると非常に便利です。とにかく、値が異なる理由について誰かが私を助けることができれば、それは素晴らしいことです. 私はプログラミングにまったく慣れていませんが、確かに専門家ではなく、高度なことにはあまり触れていません。
助けやアドバイスをありがとう。