/* 100円ショップのアナログ時計のドライブテスト 3098bytes 2012.1.7 radiopench */ #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); unsigned long count=0; boolean flag=true; unsigned int setTime = 28; //コイルのドライブ時間 mS単位 標準は28mS unsigned int waitTime = 1000; // 待ち時間 mS void setup() { lcd.begin(16, 2); //LCDのサイズ設定 pinMode(13, OUTPUT); // Pin 13 has an LED connected on most Arduino boards: pinMode(9, OUTPUT); // conect coil thrugh 330Ω pinMode(10, OUTPUT); // coil return digitalWrite(9, LOW); // reset coil digitalWrite(10, LOW); // reset coil } void loop() { digitalWrite(13,HIGH); // LED flash count ++; lcd.setCursor(0, 0); dispHMS(count); // 液晶に表示 flag = ! flag; if (flag == true) { digitalWrite(9, HIGH); // coil drive foward delay(setTime); // wait digitalWrite(9, LOW); // coil drive end } else { digitalWrite(10, HIGH); // coil drive revers delay(setTime); // wait digitalWrite(10, LOW); // coil drive end } digitalWrite(13,LOW); // LED flash end delay(waitTime); // wait time } void dispHMS(unsigned long sec){ // 引数の値により、LCDにHH:MM.SS形式で書き込む unsigned long hh; unsigned long mm; unsigned long ss; unsigned long xx; hh = sec / 3600; // 時間 mm = (sec - hh * 3600) / 60; // 分 ss = (sec % 60); // 秒 xx = ss / 6; // 1/10分 if(hh < 10) lcd.print("0"); // 文字数調整(本当は文字列操作で2文字切り出すべき) lcd.print(hh); // 時 lcd.print(":"); if(mm < 10) lcd.print("0"); // 文字数調整 lcd.print(mm); // 分 lcd.print(":"); if(ss < 10) lcd.print("0"); // 文字数調整 lcd.print(ss); // 秒を表示 }