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