0

이 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.이 같은 이동 제가 아두 이노에있는 코드가 있습니다 단지에 빛을 스위치 오프하는 것입니다 지금 현재로

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); 
} 

. 나는 더 많은 키들을 포함시키고 그 값들이 일관성있게 유지되기를 기대하면서 매우 편리 할 것입니다. 어쨌든, 누군가가 왜 값이 다른지 저를 도울 수 있다면 그것은 대단 할 것입니다. 나는 완전히 프로그래밍에 익숙하지 않지만, 나는 전문가가 아니며, 진보 된 것을 너무 많이받지 못했다.

도움이나 조언을 보내 주셔서 감사합니다.

답변

0

이것은 비주얼 스튜디오를 통해 보내는 것과 관련이 있습니다. 키 누르기를 ASCII 값으로 변환 한 다음 해당 ASCII 값을 문자열로 변환 한 다음 해당 문자열을 직렬로 보냅니다. arduino는 문자열이 아닌 숫자를 기다리고 있습니다.

예를 들어, 1 키를 누르면 시각적 스튜디오 코드가이를 ASCII 49로 변환 한 다음 Arduino가 수신하는 문자열 "49"로 변환합니다. 그러나 "49"를 전송하기 때문에 "4"와 "9"인 Arduino는 당신이 보았 듯이 57에 해당하는 9를 읽습니다.

마찬가지로 2를 누르면 "50"이되고 Arduino는 값 48에 해당하는 "0"을 읽습니다.

이 문제를 해결하려면 직접 번호를 보내고 문자열로 변환하지 마십시오.

+0

하지만 arduino로 보낼 수는 없지만 정수로 유지하면 좋습니다. 뭔가가 int를 문자열로 변환 할 수 없습니다. IO :: Ports : WriteLine을 사용하여 int 값을 보내려면 어떻게해야합니까? 나는 찾고 있었지만 어떤 예도 찾을 수 없다. – Ben

+0

다음과 같이 문자열을 보낼 수 있습니다. 1을 누르면 getch()는 숫자를 반환하지만 그 숫자를 문자열 "1"로 변환하고 "1"을 Arduino에 보냅니다. ASCII 값을 실제 누른 키로 매핑하는 몇 가지 기능이 있어야합니다. 또는 k == 49 인 경우 myString = "1" – user2461391