[英]Image displaying using Arduino- Processing connection and ADXL345 sensor
我正在从事一个艺术项目,其中包括一个 ADXL345 传感器(加速度计)、Arduino Uno R3 板、Arduino IDE 2.0.3 和 Processing 4.1.2。 我希望每次从与 Arduino sketch 的串行通信接收到的传感器值时,Processing 都随机且连续地显示图像,go x>5, x<-5, y.5, y.-5, z>1 , z<-1。
更新:一位朋友帮助我编写了一些代码行,现在当我移动传感器时显示图像。
挑战:我现在想做的是一次运行处理草图,让包含图像的 windows 弹出、关闭、打开新的 windows 并显示我文件夹中的新随机图像。 为了让这个过程自行重复,所以我不必每次都手动运行草图。
这些是我在 Arudino 和 Processing 中使用的代码。
ARDUINO
void setup() {
// initialize serial communication at 9600 baud rate
Serial.begin(9600);
}
void loop() {
// send x, y, and z values over serial
int x = analogRead(A0);
int y = analogRead(A1);
int z = digitalRead(2);
Serial.print(x);
Serial.print(",");
Serial.print(y);
Serial.print(",");
Serial.println(z);
delay(1000);
}
& 加工
import processing.serial.*;
Serial mySerial;
PImage fragment;
int rand;
void setup() {
size(1000, 500);
rand = int(random(0,133));
takerandomimage("C:/Users/user/Documents/Processing/Trial_300123/frag_" + nf(rand, 3) + ".jpg");
String portName = Serial.list()[0];
mySerial = new Serial(this, portName, 9600);
println("Serial port connected: " + portName);
loop();
}
void takerandomimage(String fn) {
fragment = loadImage(fn);
println(fragment);
}
void draw() {
background(255); //clears the screen
if (fragment.width>0 && fragment.height > 0){ //check if image has been loaded
String data = mySerial.readStringUntil('\n');
if (data != null && data != "\n" && data != " " && data != "\r" && data != "\t") {
println("Data received: " + data);
String[] values = data.split(" ",0);
int counter = 0;
int x = 0;
int y = 0;
int z = 0;
for(String w :values){
System.out.println(w);
if (counter == 1)
x = int(w);
if ( counter == 4)
y = int(w);
if ( counter == 7)
z = int(w);
counter++;
}
println(x);
println(y);
println(z);
if (x < 0 || y > 0 || z > 0) {
takerandomimage("C:/Users/user/Documents/Processing/Trial_300123/frag_" + nf(rand, 3) + ".jpg");
image(fragment, 0,0);
delay(1000);
}
}
}
}
谢谢!!
您的代码(和问题)有很多正确的地方(+1):
null
你是如此接近!
有一个问题会导致解析失败:
String data = mySerial.readStringUntil('\n');
Serial.println(x);
而不是Serial.print(x)
) 我怀疑其目的是仅在最后一行使用println()
:
void setup() {
// initialize serial communication at 9600 baud rate
Serial.begin(9600);
}
void loop() {
// send x, y, and z values over serial
int x = analogRead(A0);
int y = analogRead(A1);
int z = digitalRead(2);
Serial.print(x);
Serial.print(",");
Serial.print(y);
Serial.print(",");
Serial.println(z);
delay(1000);
}
(上面应该在一行上打印 3 个由“,”分隔的值。仔细检查 z 是否应该是digitalRead(2)
(返回 1 或 0)在 Arduino 或analogRead(A2)
上的引脚 2 上读取(返回 0 到1023) 读取模拟引脚 A2。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.