2017-11-28 5 views
3

Arduino에서 단추 스위치를 사용하여 Processing에서 시각적 표시를 트리거하려고합니다. 버튼을 눌렀는지 확인하기 위해 "높음"과 "낮음"을 사용했습니다.버튼 스위치 Arduino to Processing : 시리얼 출력이 null이 됨

그러나 내 코드는 단추 상태에 따라 "높음"또는 "낮음"대신에 항상 null을 제공합니다. 나는 이것이 매우 기초적이라고 생각하지만 나는 단지 길을 잃었습니다. 어떤 도움이나 의견을 주시면 감사하겠습니다!

다음은 각각 Arduino 및 Processing 코드입니다.

const int buttonPin = 2; 
const int LEDPin = 13; 

int buttonState = 0; 

void setup() { 
    pinMode(buttonPin, INPUT); 
    pinMode(LEDPin, OUTPUT); 
    Serial.begin(9600); 
} 

void loop() { 
    int analogValue = analogRead(A0)/4; 
    Serial.write(analogValue); 
    buttonState = digitalRead(buttonPin); 
    if (buttonState == HIGH) { 
    Serial.write(HIGH); 
    digitalWrite(LEDPin, HIGH); 
    } else { 
    Serial.write(LOW); 
    digitalWrite(LEDPin, LOW); 
    } 
    delay(100); 
} 

처리 코드 :

import processing.serial.*; 
Serial myPort; 
String val; 

void setup() { 
    size(400,400); 
    String portName = Serial.list()[1]; 
    myPort = new Serial(this, portName, 9600); 
} 

void draw() { 
    if (myPort.available() > 0) { 
    val = myPort.readStringUntil('\n'); 
    println(val); 
    if (val == "HIGH") { 
     background(127,0,0); 
    } 
    if (val == "LOW") { 
     background(144, 26, 251); 
    } 
    } 
} 
+2

'Serial.write (HIGH) '보내지 않습니다' 'H'','I''' 'G', 'H', ''\ n ''하지만 단지 '1'입니다. –

답변

2

write()

직렬 포트 이진 데이터를 출력합니다. 이 데이터는 1 바이트 또는 일련의 바이트로 전송됩니다.

Serial.write(str) 

STR

은 : 문자열은 Serial.write에 쓰기 HIGHLOW를 사용할 때,이 일련의 바이트로 전송됩니다 바이트


의 시리즈로 보낼 수 있습니다. 들어오는 바이트를 처리하도록 처리 부분을 편집하십시오. 것처럼 다음 :

import processing.serial.*; 
Serial myPort; 
String val; 
int len; //length of byte array 

void setup() { 
    size(400,400); 
    String portName = Serial.list()[1]; 
    myPort = new Serial(this, portName, 9600); 
} 

void draw() { 
    if ((len=myPort.available()) > 0) { 
    for(i=0;i<len;i++) 
     myByteArray=myPort.read(); 
    String val = String(myByteArray); 
    println(val); 
    if (val == "HIGH") { 
     background(127,0,0); 
    } 
    if (val == "LOW") { 
     background(144, 26, 251); 
    } 
    } 
} 
+0

잘못되었습니다. 'HIGH'와'LOW'는 단일 바이트 1과 0으로 보내질 것입니다. 또한 이것은 완전한 문자열을 읽는 믿을만한 방법은 아닙니다. –

+0

나는 그것을 읽었다. 그러나 HIGH와 LOW는 문자열이 아닙니다. –

1
아두 이노, HIGH에서

1 등 LOWare defined 0으로

Serial.write(HIGH);을 실행하고 Serial.write(LOW); 당신은 단지 하나의 바이트 1 또는 0

을 보내는 그러나에 따라함으로써 귀하의 처리 코드, 당신은 'H', 'I', 'G', 'H''\n' 문자를 보낼 Serial.write(HIGH);을 기대하고 있습니다.

Arduino 코드에서 Serial.write(HIGH);Serial.write(LOW);Serial.print("HIGH\n");Serial.print("LOW\n");으로 바꿔야합니다.

1

그냥 논리 값으로 정수에서 buttonState 변수 유형을 변경 한 다음 사용

if(buttonState) { 
     Serial.println("HIGH"); 
} 
else { 
     Serial.println("LOW"); 
}