ขณะนี้ฉันกำลังใช้โปรเจค # 14 ของหนังสือโครงการ Arduino
ฉันพยายามควบคุมร่างการประมวลผลบนแล็ปท็อปของฉันโดยใช้ Arduino สามารถทำได้โดยใช้โพเทนชิออมิเตอร์เพื่อควบคุมพื้นหลังของภาพ
รหัส Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
การประมวลผล:
//imports serial library
import processing.serial.*;
//setups the serial object
Serial myPort;
//creates an object for the image
PImage logo;
//variable to store background color
int bgcolor = 0;
void setup(){
colorMode(HSB,255);
logo = loadImage("http://arduino.cc/logo.png");
size(logo.width,logo.height);
println("Available serial ports");
println(Serial.list());
myPort = new Serial(this,Serial.list()[0],9600);
}
//equivalent of arduino's loop function
void draw(){
if(myPort.available() > 0)
{
bgcolor = myPort.read();
println(bgcolor);
}
background(bgcolor,255,255);
image(logo,0,0);
}
ตอนนี้ในขณะที่รหัสทำงานและสีพื้นหลังเปลี่ยนไปเมื่อฉันหมุนโพเทนชิออมิเตอร์มีความล่าช้าอย่างมากระหว่างการเปลี่ยนโพเทนชิออมิเตอร์และการดูสีเปลี่ยนพื้นหลังและค่าจากการเปลี่ยนแปลงของ Arduino / โพเทนชิมิเตอร์
สิ่งที่ฉันได้ลอง:
- การเปลี่ยนความเร็วของการสื่อสารแบบอนุกรม
ฉันสังเกตเห็นว่าเมื่อฉันลดความเร็วของการสื่อสารแบบอนุกรมเช่นประมาณ 100 ความล่าช้าระหว่างการเปลี่ยนโพเทนชิออมิเตอร์และการเห็นมันเปลี่ยนบนแล็ปท็อปของฉันลดลงเป็นประมาณ 1 วินาที อย่างไรก็ตามเมื่อฉันลดความเร็วของการสื่อสารแบบอนุกรมยิ่งขึ้นเช่นค่า 1 ความล่าช้าจะเพิ่มขึ้นอีกครั้ง
ในทางกลับกันที่ความเร็วมาตรฐาน 9600 การหน่วงเวลามีขนาดใหญ่ประมาณ 5 วินาทีต่อวินาทีก่อนที่การเปลี่ยนแปลงในโพเทนชิออมิเตอร์จะแสดงบนแล็ปท็อป / การประมวลผล
เหตุใดการลดความเร็วในการสื่อสาร (สูงสุดจนถึงบางจุด) จึงลดความล่าช้าของเวลาและการเพิ่มความล่าช้าก็เพิ่มขึ้น นอกจากนี้ยังมีฉันสามารถทำให้มันใกล้ทันทีหรือไม่
loop()
Arduino เป็นไปได้ค่อนข้างที่โปรแกรมการประมวลผลของคุณจะไม่ทำงานเร็วพอที่จะทำตาม ลองทำการหน่วงเวลาloop()
ในรหัส Arduino ของคุณเพื่อทำให้ช้าลงdelay(50)
เช่น