0

まず、これは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);
}

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

助けやアドバイスをありがとう。

4

1 に答える 1

0

これは、ビジュアルスタジオを介して送信しているものに関係しています。キープレスを ASCII 値に変換してから、その ASCII 値を文字列に変換し、その文字列をシリアル経由で送信します。arduino は、文字列ではなく数値を期待しています。

たとえば、1 キーを押すと、ビジュアル スタジオ コードはそれを ASCII 番号 49 に変換し、これを文字列 "49" に変換して Arduino が受信しますが、"49" を送信しているため、" 4" と "9" の場合、ご覧のとおり、Arduino は 57 に対応する 9 を読み取ります。

同様に、2 を押すと「50」に変換され、Arduino は取得していた値 48 に対応する「0」を読み取ります。

これを修正するには、数字を直接送信し、文字列に変換しないでください。

于 2013-08-06T20:55:01.013 に答える