기본 콘텐츠로 건너뛰기

제품인터랙션 light cube


아두이노 코드
조명부
#include <Encoder.h>
Encoder myEnc(3, 4);
long oldPosition  = -999;
// 13번핀에 빨간색 LED를 연결합니다.
int redPin = 9;
// 12번핀에 노란색 LED를 연결합니다.
int bluePin = 11;
// 11번핀에 초록색 LED를 연결합니다.

로터리엔코더모듈센서부

int greenPin = 10;
// 로터리 엔코더의 aPin을 4번핀에 연결합니다.
int aPin = 4;
// 로터리 엔코더의 bPIn을 3번핀에 연결합니다.
int bPin = 3;
// 로터리 엔코더의 푸시버튼을 2번핀에 연결합니다.
int buttonPin = 5;

// 현재 상태를 저장합니다.
int state = 0;
// 초록색이나 빨간색일 때 불이 들어오는 시간을 설정합니다.
int longPeriod = 100;
// 신호가 바뀔때의 시간을 설정합니다.
int shortPeriod = 10;
int targetCount = shortPeriod;
int count = 0;
void setup() {
  pinMode(aPin, INPUT);
  pinMode(bPin, INPUT);
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.println(INPUT_PULLUP);
  pinMode(redPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(greenPin, OUTPUT);
}
void loop() {
  count++;
  // 푸시버튼이 LOW일때
  if (digitalRead(buttonPin) == LOW) {
    // 모든 LED를 켭니다.
    setLights(LOW, LOW, HIGH);
  }
  else {
    int change = getEncoderTurn();


    //setLights(LOW, LOW, LOW);
    if (count > targetCount) {
      //현재상태를 저장합니다.
      //setState();
      count = 0;
    }

    
  }
  //delay(1);
}

int oldA = LOW;
int oldB = LOW;


int getEncoderTurn() {
  // -1,0,+1의 값중 하나를 반환합니다.

  int result = 0;
  int newA = digitalRead(aPin);
  int newB = digitalRead(bPin);
  //Serial.print("A,B: ");
  //Serial.print(newA);
  //Serial.print("\t");
  //Serial.println(newB);
  //delay(500);
  if (newA != oldA || newB != oldB) {
    // 바뀐 값이 있을 때
    if (oldA == LOW && newA == HIGH) {
      result = -(oldB * 2 - 1);
    }
  }
  oldA = newA;
  oldB = newB;

  return result;
}

int setState() {
  if (state == 0) {
    setLights(HIGH, LOW, LOW);
    targetCount = longPeriod;
    state = 1;
  }
  else if (state == 1) {
    setLights(HIGH, HIGH, LOW);
    targetCount = shortPeriod;
    state = 2;
  }
  else if (state == 2) {
    setLights(LOW, LOW, HIGH);
    targetCount = longPeriod;
    state = 3;
  }
  else if (state == 3) {
    setLights(LOW, HIGH, LOW);
    targetCount = shortPeriod;
    state = 0;
  }
}

void setLights(int red, int blue, int green) {
  digitalWrite(redPin, red);
  digitalWrite(bluePin, blue);
  digitalWrite(greenPin, green);
}

적외선 센서부
  int green = 11 ;
  int red = 12 ;
  int blue = 13 ;
  int Sensor = A0;
  int val ;
  void setup ()
  {
  pinMode (green, OUTPUT) ;
  pinMode (red, OUTPUT) ;
  pinMode (blue, OUTPUT) ;
  pinMode (Sensor, INPUT) ;
  }

  void loop ()
  {
  int val = analogRead (Sensor) ;

  if (val > 200) // 물체가 가까이 접근하면
  {
    digitalWrite (red, HIGH);
    digitalWrite (green, HIGH);
    digitalWrite (blue, HIGH);//LED를 끄고
  }
  else
  {
    digitalWrite (red, LOW);
    digitalWrite (green, LOW);
    digitalWrite (blue, LOW);//물체가 멀어지면 LED를 켭니다.
  }
  }

출력부(조명)

입력부(적외선거리감지센서)

입력부(로터리엔코더모듈)

댓글

이 블로그의 인기 게시물

3D Print_(11)_Light x Virgil Alavlo_Final Pannel

"off-white" X "on-black"

3D Print_(2)_전통문양과 디지털디자인의 미래에 대한 생각 PPT