处理读取串行错误
Processing Read Serial Error
arduino代码读取rfid
标签[RFIDreader为ID-12],与Tag1
和Tag2
比较,若相等则发送Serial Port 1 or 2,这个值是播放song1或者song2的处理读取的。
Arduino代码:
/*
Documentazione: http://www.logicaprogrammabile.it/arduino-leggere-tag-rfid-id-12/
*/
byte datarfid[16];
byte i = 0;
int LD1 = 8;
int LD2 = 6;
String tag ="";
void setup()
{
//init seriale a 9600 bps
pinMode(LD1, OUTPUT);
pinMode(LD2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(LD1, LOW);
digitalWrite(LD2, LOW);
//attendo la presenza di tutti e 16 byte provenienti
//dal lettore id-12
if(Serial.available() >= 16)
{
//leggo ogni byte e lo memorizo nell’array
//precedentemente definito
for(i = 0; i <= 15; i++)
{
datarfid[i] = Serial.read();
}
//ora ricavo i 10 byte che compongono il codice del tag
//e li concateno in un ogetto stringa
//da notare la conversione dei byte in char
for(i = 1; i <= 10; i++)
{
//concateno la stringa convertendo i byte in char
tag += (char)datarfid[i];
}
//ora verifico se il codice del tag corrisponde
//a quello memorizzato nel sistema
if(tag == "0107EB826F"){
/*
Serial.print("Song");
Serial.print(":");
*/
Serial.println(1);
digitalWrite(LD1, HIGH);
delay(500);
digitalWrite(LD1, LOW);
}
else if (tag == "0F0002F973"){
/*
Serial.print("Song");
Serial.print(:");
*/
Serial.println(2);
digitalWrite(LD1, HIGH);
delay(500);
digitalWrite(LD1, LOW);
}
else
{
Serial.print(0);
digitalWrite(LD2, HIGH);
delay(500);
digitalWrite(LD2, LOW);
}
tag="";
}
}
处理代码:
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;
Minim minim;
Serial myPort;
String Tag1;
String Tag2;
String inString;
int lf = 10;
//this is the object that plays your file
AudioPlayer player;
AudioPlayer player2;
void setup()
{
size(300, 300);
//initialize minim
minim = new Minim(this);
player=minim.loadFile("Song1.mp3");
player2=minim.loadFile("Song2.mp3");
// List all the available serial ports:
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil(lf);
Tag1="1";
Tag2="2";
}
void draw()
{
background(0);
text("Ricevuto:" +inString, 10, 50);
if (inString!=null){
if (inString==Tag1)
{
text("Song 1",10,80);
player.play();
}
if (inString==Tag2)
{
text("Song 2",10,100);
player2.play();
}
}
}
void serialEvent(Serial p) {
inString = (myPort.readString());
}
void mousePressed()
{
//it's weird but you have to rewind a file to play it
player.rewind();
player.play();
}
当我尝试在 if 条件下将 inString
与另一个字符串进行比较时,它不会这样做,也不会将 inString
复制到另一个字符串
处理文档说 you cannot compare strings using the ==
operator, although you can do it with arduino。
例如,您应该将 if (inString==Tag1)
替换为 if (inString.equals(Tag1) == true)
。
您快完成了,但在字符串比较方面有点偏差。
- 比较 Java/Processing 中的字符串。使用 use String 的 equals() method (or equalsIgnoreCase() )
更安全
- 当您从 Arduino 发送
Serial.println(2);
时,您发送的是数字 2
,而不是字符 '2'
(它们没有相同的值,请尝试 println(2 == '2');
。使用 println()
时,可能还需要使用 trim() 删除任何多余的空格(spaces/tabs/new line/carriage return/etc)
尝试在处理中使用类似这样的东西:
void serialEvent(Serial p) {
inString = trim(myPort.readString());
}
然后
if (inString.equals(Tag1))
{
text("Song 1",10,80);
player.play();
}
if (inString.equals(Tag2))
{
text("Song 2",10,100);
player2.play();
}
如果歌曲一遍又一遍地开始播放(因为在 Arduino 发送另一条消息之前播放歌曲的条件为真),您可能需要使用布尔变量来跟踪歌曲是否开始播放. AudioPlayer 已经以 isPlaying():
的形式提供了一些东西
if (inString.equals(Tag1))
{
text("Song 1",10,80);
if(!player.isPlaying()) player.play();
}
if (inString.equals(Tag2))
{
text("Song 2",10,100);
if(!player2.isPlaying()) player2.play();
}
arduino代码读取rfid
标签[RFIDreader为ID-12],与Tag1
和Tag2
比较,若相等则发送Serial Port 1 or 2,这个值是播放song1或者song2的处理读取的。
Arduino代码:
/*
Documentazione: http://www.logicaprogrammabile.it/arduino-leggere-tag-rfid-id-12/
*/
byte datarfid[16];
byte i = 0;
int LD1 = 8;
int LD2 = 6;
String tag ="";
void setup()
{
//init seriale a 9600 bps
pinMode(LD1, OUTPUT);
pinMode(LD2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(LD1, LOW);
digitalWrite(LD2, LOW);
//attendo la presenza di tutti e 16 byte provenienti
//dal lettore id-12
if(Serial.available() >= 16)
{
//leggo ogni byte e lo memorizo nell’array
//precedentemente definito
for(i = 0; i <= 15; i++)
{
datarfid[i] = Serial.read();
}
//ora ricavo i 10 byte che compongono il codice del tag
//e li concateno in un ogetto stringa
//da notare la conversione dei byte in char
for(i = 1; i <= 10; i++)
{
//concateno la stringa convertendo i byte in char
tag += (char)datarfid[i];
}
//ora verifico se il codice del tag corrisponde
//a quello memorizzato nel sistema
if(tag == "0107EB826F"){
/*
Serial.print("Song");
Serial.print(":");
*/
Serial.println(1);
digitalWrite(LD1, HIGH);
delay(500);
digitalWrite(LD1, LOW);
}
else if (tag == "0F0002F973"){
/*
Serial.print("Song");
Serial.print(:");
*/
Serial.println(2);
digitalWrite(LD1, HIGH);
delay(500);
digitalWrite(LD1, LOW);
}
else
{
Serial.print(0);
digitalWrite(LD2, HIGH);
delay(500);
digitalWrite(LD2, LOW);
}
tag="";
}
}
处理代码:
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;
Minim minim;
Serial myPort;
String Tag1;
String Tag2;
String inString;
int lf = 10;
//this is the object that plays your file
AudioPlayer player;
AudioPlayer player2;
void setup()
{
size(300, 300);
//initialize minim
minim = new Minim(this);
player=minim.loadFile("Song1.mp3");
player2=minim.loadFile("Song2.mp3");
// List all the available serial ports:
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil(lf);
Tag1="1";
Tag2="2";
}
void draw()
{
background(0);
text("Ricevuto:" +inString, 10, 50);
if (inString!=null){
if (inString==Tag1)
{
text("Song 1",10,80);
player.play();
}
if (inString==Tag2)
{
text("Song 2",10,100);
player2.play();
}
}
}
void serialEvent(Serial p) {
inString = (myPort.readString());
}
void mousePressed()
{
//it's weird but you have to rewind a file to play it
player.rewind();
player.play();
}
当我尝试在 if 条件下将 inString
与另一个字符串进行比较时,它不会这样做,也不会将 inString
复制到另一个字符串
处理文档说 you cannot compare strings using the ==
operator, although you can do it with arduino。
例如,您应该将 if (inString==Tag1)
替换为 if (inString.equals(Tag1) == true)
。
您快完成了,但在字符串比较方面有点偏差。
- 比较 Java/Processing 中的字符串。使用 use String 的 equals() method (or equalsIgnoreCase() ) 更安全
- 当您从 Arduino 发送
Serial.println(2);
时,您发送的是数字2
,而不是字符'2'
(它们没有相同的值,请尝试println(2 == '2');
。使用println()
时,可能还需要使用 trim() 删除任何多余的空格(spaces/tabs/new line/carriage return/etc)
尝试在处理中使用类似这样的东西:
void serialEvent(Serial p) {
inString = trim(myPort.readString());
}
然后
if (inString.equals(Tag1))
{
text("Song 1",10,80);
player.play();
}
if (inString.equals(Tag2))
{
text("Song 2",10,100);
player2.play();
}
如果歌曲一遍又一遍地开始播放(因为在 Arduino 发送另一条消息之前播放歌曲的条件为真),您可能需要使用布尔变量来跟踪歌曲是否开始播放. AudioPlayer 已经以 isPlaying():
的形式提供了一些东西if (inString.equals(Tag1))
{
text("Song 1",10,80);
if(!player.isPlaying()) player.play();
}
if (inString.equals(Tag2))
{
text("Song 2",10,100);
if(!player2.isPlaying()) player2.play();
}