(2017/01/29,大年初二)
這個題目做了好久,第一次發現滾珠開關的使用沒有像之前Transformer下直接利用類比連接的方式,這可能會有問題!因此向MotoDuino的Dennis Chen求救,因此改為本題目的作法!另外,計數器的4位數7格顯示器在MotoBlockly只支援TM1637的晶片,這可向MotoDuino網站購買,也可到淘寶去找找~
說明:找一個咖啡杯,上面安裝兩個【按鍵】,一個可設定時間、另一個按鍵是【啟動鍵】,當按下啟動鍵後,會在4位數的7格顯示器上顯示搖動次數!
所需材料:
Arduino控制板 X 1
4位數七段顯示器模組 X 1 (注意:目前Motoblockly 只支援TM1637晶片驅動7段顯示器,淘寶購買)
按鍵 X 2 (腳位使用 input_PULLUP 的宣告)
無源蜂鳴器 X 1
傾斜開關 X1 (含10K電阻(棕黑橙金)一個)
小型麵包板 X 1
9V電池及電池扣 X 1 (離線工作用)
杜邦線
咖啡杯 X 1 (改裝成視力保健機)
硬體部分:
4位數七段顯示器模組 (CLK:D2、DATA:D3、VCC:5V、GND:GND)
按鍵 (一腳:D13(D12)、另一腳:GND)
無源蜂鳴器 (一腳:D7、另一腳:GND)
傾斜開關 (參考下方說明,主要接D5)
傾斜開關接線說明(參考資料:https://learn.adafruit.com/tilt-sensor/using-a-tilt-sensor)
軟體部分,進入Moto Blockly (檔案於附件)
轉成Arduino語言,其中下方的紅字部分,要記得手動修改!!
註:MotoBlockly的積木沒有宣告「輸入(pull-in)」的功能,所以到Arduino IDE下要再手動修改
#include <motoTM1637.h>
int setstarttime;
int checkstarttime;
int checkgo;
int counter;
long starttime;
long remaintime;
TM1637 tm1637led_2_3(2,3);
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(13, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(5, INPUT);
pinMode(7, OUTPUT);
setstarttime = 20;
checkstarttime = 0;
checkgo = 0;
counter = 0;
starttime = 0;
remaintime = setstarttime;
tm1637led_2_3.display(setstarttime);
}
void loop()
{
if (digitalRead(13) == 0 && checkstarttime == 0) {
setstarttime = setstarttime + 10;
tm1637led_2_3.display(setstarttime);
delay(500);
if (setstarttime > 180) {
setstarttime = 0;
}
}
if (digitalRead(12) == 0 && checkgo == 0) {
starttime = millis();
counter = 0;
checkstarttime = 1;
checkgo = 1;
tm1637led_2_3.display(counter);
}
remaintime = (millis() - starttime) / 1000;
if (remaintime <= setstarttime && checkgo == 1) {
if (digitalRead(5) == 0) {
delay(100);
if (digitalRead(5) == 1) {
counter = counter + 1;
tm1637led_2_3.display(counter);
}
}
}
if (remaintime > setstarttime && checkgo == 1) {
for (int count = 0; count < 3; count++) {
tone(7,255,300);
delay(500);
}
checkstarttime = 0;
checkgo = 0;
}
}
測試成功