处理和Arduino的串行连接
我正在尝试建立从处理到Arduino的串行连接。这个想法是,当我按“ a”时,来自Arduino的扬声器会产生声音,而另一个键则带有不同的音符。但是,我对代码有些困扰。谁能让我知道我的代码问题是什么?
处理代码:
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代码:
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);
}
非常感谢!
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!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你太近了!
问题在于您正在检查字符的Arduino侧,但是,在处理方面,您要发送实际值,而不是ASCII字符。
在处理中,只需使用
char
键入单引号符号:...
(与
myport.write(49);
for'1',相同MyPort.Write(50);
'2')或者,您可以更改在Arduino侧检查的方式,以免使用Chars与您从处理中发送的方式保持一致。例如
(例如(Val =='1')而不是
)。
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.
In Processing, simply use the
char
type single quote symbols:...
(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.
(instead of
if (val == '1')
).