processing无法读取arduino数据
processing吧
全部回复
仅看楼主
level 3
最近在尝试用processing画出温度计湿度计然后根据温湿度传感器读取数据变化,但是遇到了问题,processing可以显示温湿度计但无法读取数据,arduino可以成功读取温湿度传感器数据,希望各位大神帮我看看代码哪里错误。
2016年12月05日 11点12分 1
level 3
int DHT11=8 ;
byte message[5];
void setup(){
Serial.begin(9600);
pinMode(DHT11,OUTPUT);
}
void loop(){
test();
Serial.print("humility");
Serial.print(message[0],DEC);
Serial.print('.');
Serial.print(message[1],DEC);
Serial.println('%');
Serial.print("temperature");
Serial.print(message[2],DEC);
Serial.print('.');
Serial.print(message[3],DEC);
Serial.println('C');
delay(500);
}
byte read_message(){
byte data;
for(int i=0;i<8;i++){
if(digitalRead(DHT11)==LOW)
{
while(digitalRead(DHT11)==LOW);
delayMicroseconds(30);
if(digitalRead(DHT11)==HIGH)data |=(1<<(7-i));
while(digitalRead(DHT11)==HIGH);
}
}
return data;
}
void test(){
digitalWrite(DHT11,LOW);
delay(30);
digitalWrite(DHT11,HIGH);
delayMicroseconds(40);
pinMode(DHT11,INPUT);
while(digitalRead(DHT11)==HIGH);
delayMicroseconds(80);
if(digitalRead(DHT11)==LOW);
delayMicroseconds(80);
for(int i=0;i<4;i++)
message[i]=read_message();
pinMode(DHT11,OUTPUT);
digitalWrite(DHT11,HIGH);
}
这是arduino代码
2016年12月05日 11点12分 2
level 3
class Temperature{
private int x;
private int y;
private int data;
private float warnTem=50;
Temperature(int x,int y){
this.x=x;
this.y=y;
}
void setWarnTem(float tem){
warnTem=tem;
}
void display(){
Shape();
}
void warning(){
if(data>warnTem)
fill(255,0,0);
else
fill(0,255,0);
ellipse(x+100,y,30,30);
}
void Shape(){
int x=100;
int y=100;
rectMode(CORNER);
rect(x,y-10,50,360,10,10,10,10);
fill(255,0,0);
ellipse(x+25,y
+3
50,80,80);
noStroke();
rect(x+1,y+300,49,30);
stroke(0);
fill(255);
for(int i=0;i<31;i++){
line(x-15,y+10*1,x-10,y+10*1);
if(i%5==0){
line(x-20,y+10*1,x-10,y+10*1);
fill(0);
text(50-i+"Celsius",x-45,y+10*i);
fill(255);
continue;
}
}
}
void update(String data){
this.data=Integer.parseInt(data);
noStroke();
fill(255);
if(this.data>20){
rect(x+1,y,49,300);
fill(255,0,0);
rect(x+1,y+300-this.data*10+200,49,this.data*10-200);
stroke(0,255,0);
line(x+1,y+300-warnTem*10+200,x+49,y+300-warnTem*10+200);
noStroke();
warning();
}
}
}
class Humidity{
private int x;
private int y;
private int data;
private float warnHum=50;
Humidity(int x,int y){
this.x=x;
this.y=y;
}
void setWarnHum(float hum){
warnHum=hum;
}
void warning(){
if(data>warnHum)
fill(255,0,0);
else
fill(0,255,0);
ellipse(x-50,y,30,30);
}
void display(){
Shape();
}
void Shape(){
int x=300;
int y=100;
rectMode(CORNER);
rect(x,y-10,50,360,10,10,10,10);
fill(50,50,255);
ellipse(x+25,y+350,80,80);
noStroke();
rect(x+1,y+300,49,30);
stroke(0);
fill(255);
for(int i=0;i<61;i++){
line(x+60,y+5*i,x+65,y+5*i);
if(i%10==0){
line(x+60,y+5*i,x+70,y+5*i);
fill(0);
text(90-i,x+85,y+5*i);
fill(255);
continue;
}
if(i%5==0){
line(x+60,y+5*i,x+68,y+5*i);
}
}
}
void update(String data){
this.data=Integer.parseInt(data);
noStroke();
fill(255);
if(this.data>30){
rect(x+1,y,49,300);
fill(50,50,255);
rect(x+1,y+300-this.data*5+150,49,this.data*5-150);
stroke(0,255,0);
line(x+1,y+300-warnHum*5+150,x+49,y+300-warnHum*5+150);
noStroke();
warning();
}
}
}
import processing.serial.*;
Serial port;
Temperature myTem=new Temperature(100,50);
Humidity myHum=new Humidity(400,500);
String data;
String [] str;
float resTem=50;
float resHum=90;
void setup(){
size(600,500);
smooth();
port=new Serial(this,"COM3",9600);
port.bufferUntil('\n');
myTem.display();
myHum.display();
}
void draw(){
myTem.setWarnTem(resTem);
myHum.setWarnHum(resHum);
}
void serialEvent(Serial port){
String message=port.readString();
data=message;
str=data.split(",");
myTem.update(str[1]);
myHum.update(str[0]);
println("tem:"+str[1]);
println("hum:"+str[0]);
}
void mouseClicked(){
if(mouseX>100&&mouseX<150)
if(mouseY>50&&mouseY<350){
resTem=map(mouseY,50,350,50,20);
stroke(0);
}
if(mouseX>400&&mouseX<450)
if(mouseY>50&&mouseY<350)
resHum=map(mouseY,50,350,90,30);
}
这是processing代码
2016年12月05日 11点12分 3
level 3
processing运行时出现这样的错误提示,希望各路大神帮帮我解决问题
2016年12月05日 11点12分 4
level 3
大神们都去哪了,帮帮我呀
2016年12月05日 12点12分 5
level 6
你看一下你的arduino连得是串口几,应该连得不是COM3,你程序里写的是VOM3
2016年12月06日 02点12分 6
嗯,我回去看看
2016年12月07日 06点12分
我看了一下arduino连的就是COM3,程序里VOM3在哪里我没看见。。。(´இ皿இ`)
2016年12月07日 06点12分
@中国好少年life 我打错了,是COM3[吐舌]
2016年12月07日 14点12分
level 6
串口processing串口捕获不对
2016年12月07日 03点12分 7
嗯,谢谢
2016年12月07日 06点12分
请问该怎么设置串口接收?
2018年01月07日 08点01分
level 2
void setup()
{
size(400, 120);
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
textSize(42); textAlign(LEFT);
}
我是这样写的,可以通过
2016年12月09日 13点12分 8
谢谢
2016年12月18日 17点12分
可以啊
2017年08月08日 01点08分
前面的部分与楼主的是一致吗?我们修改了一下午,还是无法读取数据。求帮忙,非常感谢!
2018年01月07日 08点01分
level 1
楼主代码查出哪错了吗?我也是同样的错误,找了好久还没答案。。
2017年07月17日 13点07分 9
level 1
同问
2018年01月07日 08点01分 10
1