Liz
Liz

Reputation: 31

Serial connection of Processing and Arduino

I'm trying to make a serial connection from processing to arduino. The idea is that when I press "a", the speaker from Arduino will produce a sound and the same goes with another key pressed but with a different note. However, I'm a bit stuck with the codes. Can anyone let me know what is the problem of my codes?

Processing code:

import processing.serial.*;
Serial myPort; 
int val; // Data received from the serial port

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

void draw() {
}

 void keyPressed(){
   if (key == 'a'){
     myPort.write(1); 
   }
   if (key == 'd'){
     myPort.write(2); 
   }  
 }
 void keyReleased(){
   myPort.write(0);
 } 

Arduino code:

char val; // Data received from the serial port
int speakerPin = 8;

void setup() {
pinMode(speakerPin, OUTPUT);
Serial.begin(9600); 
}

void loop() {
while (Serial.available()) { 
val = Serial.read(); 
}
if (val == '1') {  
tone(speakerPin, 262, 200); 
} else if (val == '2'){
tone(speakerPin, 523, 200); 
}
delay(100); 
}

Many many thanks!

Upvotes: 0

Views: 288

Answers (1)

George Profenza
George Profenza

Reputation: 51837

You are so close!

The issue is on the Arduino side you're checking characters, however, on the Processing side you're sending the actual values, not the ASCII characters.

1 != '1' (49)
2 != '2' (50)

In Processing, simply use the char type single quote symbols:

myPort.write('1');

...

myPort.write('2'); 

(which is the same as myPort.write(49); for '1', myPort.write(50); for '2')

Alternatively you can change the way you're checking on Arduino side to not use chars to be consistent with how you're sending from Processing. e.g.

if (val == 1)

(instead of if (val == '1')).

Upvotes: 1

Related Questions