2016년 5월 18일 수요일

google glass Camera Shutter 만들기 - 2편 (아두이노 구성)

부품이 갖춰 졌으니 후다닥 만들어 봤다.

이렇게 만들어 보니 요런 모양이 나왔다.
30분만에 뚝딱 만든 아두이노
뚜껑에 구멍을 내는 것이 좀 힘들었는데 인두로 살짝 녹인 다음에 샤프 촉으로 눌러서 뚫었다.

자 그럼 sketch 도 만들어 볼까?
버튼 하나로 해야 하니 long press 처리가 가능해야 하는데, 일단 검색을 해 보니 arduino.cc 에서  HoldButton 을 찾을 수 있었다. 기본 코드를 그대로 사용하고 HM-10 기능만 추가해 주면,

#include <SoftwareSerial.h>
SoftwareSerial bb(9, 8);
int inPin = 10;  // the pin number for input (for me a push button)
int current;         // Current state of the button
                     // (LOW is pressed b/c i'm using the pullup resistors)
long millis_held;    // How long the button was held (milliseconds)
long secs_held;      // How long the button was held (seconds)
long prev_secs_held; // How long the button was held in the previous check
byte previous = HIGH;
unsigned long firstTime; // how long since the button was first pressed

void setup() {
  Serial.begin(9600);         // Use serial for debugging
  bb.begin(9600);
  pinMode(inPin, INPUT_PULLUP);  // Turn on 20k pullup resistors to simplify switch input
  Serial.println("set up");
}
void loop() {
  current = digitalRead(inPin);
  // if the button state changes to pressed, remember the start time
  if (current == LOW && previous == HIGH && (millis() - firstTime) > 200) {
    firstTime = millis();
  }
  millis_held = (millis() - firstTime);
  secs_held = millis_held / 1000;
  // This if statement is a basic debouncing tool, the button must be pushed for at least
  // 100 milliseconds in a row for it to be considered as a push.
  if (millis_held > 50) {
    if (current == LOW && secs_held > prev_secs_held) {
      Serial.println("Click");
    }
    // check if the button was released since we last checked
    if (current == HIGH && previous == LOW) {
      // Button pressed for less than 1 second, one long LED blink
      if (secs_held <= 0) {
        bb.println("Photo");
      }
      // If the button was held for 3-6 seconds blink LED 10 times
      if (secs_held >= 1 && secs_held < 3) {
        bb.println("Recording");
      }
      // Button held for 1-3 seconds, print out some info
      if (secs_held >= 3) {
        Serial.print("It Works!!! Seconds held: ");
        Serial.print(secs_held);
        Serial.print("   Milliseconds held: ");
        Serial.println(millis_held);
      }
    }
  }
  previous = current;
  prev_secs_held = secs_held;
}
이런 코드가 나온다.
짧게 누르면 Photo 를 길게 누르면 Recording 을 HM-10 에 써 준다.

그럼 테스트를 해 볼까?

버튼 누를때 '딸깍! 딸까!' 하는 소리와 케이스가 손에 촥~ 감기는 것이, 아주 일품이다.
이제 남은 것은 glass app 을 만들어 주는 것인데, 내친김에 한번에 끝내 봐야 겠다.

댓글 없음: