아두이노 코드
조명부
#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를 켭니다.
}
}



댓글
댓글 쓰기