Robofun 機器人論壇
標題:
新手疑問:Arduino時間設定問題
[打印本頁]
作者:
ckuoping
時間:
2017-4-16 20:13
標題:
新手疑問:Arduino時間設定問題
各位大大好,今天小弟要做的是Arduino和processing的串連,是這樣的:
我在Arduino設定了兩個按鈕A和B,當按鈕A按下一次時,在processing端會一直停留在畫面1;
同理,當換按下按鈕B一次後,processing的畫面就會改變成畫面2。
今天我是以Serial.write的方式完成上述部分,亦即按了按鈕A後,arduino會傳送某個序列數字,而processing端收到那個數字後會呈現某個畫面。
但問題來了,今天我想做的效果是,當按鈕A和B都沒有被按下一段時間,processing會跳回我初始設定的開始畫面
在此我有點卡住,不帶知道要用哪個語法完成這個效果@@
再麻煩大大指點迷津!謝謝
作者:
超新手
時間:
2017-4-17 10:23
本帖最後由 超新手 於 2017-4-18 08:12 編輯
比較簡單的方法
int Cnt;
void loop() {
if(A被按下) {
畫面1;
Cnt = 30000;
}
if(B被按下) {
畫面2;
Cnt = 30000;
}
if(Cnt) {
if(--Cnt == 0) {
初始畫面;
}
}
作者:
ckuoping
時間:
2017-4-17 21:55
超新手 發表於 2017-4-17 10:23
比較簡單的方法
int Cnt;
void loop() {
你好!謝謝你的回覆!可是有幾點我不是很了解
第一,你範例中設定的cnt=40000的部分,是指秒數的意思嗎?
第二,有關於第三個if迴圈:
if(Cnt) {
if(--Cnt == 0) {
初始畫面;
}
}
這個部分我不是很了解他的意思和運作
另外,我當前的範例做法是如下:
Arduino部分:
int switchPin2 =2;
int switchPin3 =3;
void setup() {
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(switchPin2)==HIGH && digitalRead(switchPin3)==LOW)
{
Serial.write(2);
delay(1000);
}
else if(digitalRead(switchPin3)==HIGH && digitalRead(switchPin2)==LOW)
{
Serial.write(3);
delay(1000);
}
delay(100);
}
Processing部分:
import processing.serial.*;
Serial port;
PImage img2;
PImage img3;
int val=0;
void setup(){
size(400,400);
img2=loadImage("A.jpg");
img3=loadImage("B.jpg");
port= new Serial(this,"/dev/cu.usbmodem1451", 9600);
}
void draw(){
background(255);
if(0<port.available()){
val=port.read();
}
if(val==2){
image(img2,0,0);
}
if(val==3){
image(img3,0,0);
}
}
依照我目前的寫法的話,我不是很清楚若你的方式可以加註在我當前寫法的哪些地方?謝謝你!!!!>..<
作者:
超新手
時間:
2017-4-18 08:18
>>第一,你範例中設定的cnt=40000的部分,是指秒數的意思嗎?
不是, 直接用計數去做
時間要很準的話, 就要用 millis() 去做
>>第二,有關於第三個if迴圈:
如果 Cnt 不為 0(通常就是之前有按鍵被按下)
那麼每次就把 Cnt 減一
如果減到 cnt 為 0後, 就去做 初始畫面;
再改一下, 讓你看的懂
if(Cnt) {
Cnt = Cnt-1;
if(Cnt == 0) {
初始畫面;
}
}
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2