#include <Servo.h>
// 버튼을 눌렀을 때 서보모터가 90도로 가고
// 1초에 LED를 하나씩 킴
// 5개의 LED가 다 켜졌으면 LED를 다 끄고 나서
// 서보모터를 다시 0도로 원위치
Servo serb; //서보 자체가 데이터타입임
void setup()
{
pinMode(12, INPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
serb.attach(2);
}
void loop()
{
int btn = digitalRead(12);
serb.write(0); // 서보모터 0도로 초기화
/*if (btn == 1 )
{ serb.write(90);
digitalWrite(10, 1);
delay(1000);
digitalWrite(9, 1);
delay(1000);
digitalWrite(8, 1);
delay(1000);
digitalWrite(7, 1);
delay(1000);
digitalWrite(6, 1);
delay(1000);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
serb.write(0);*/
if (btn ==1){
serb.write(90);
int y = 0;
delay(1000);
for (int i=10; i>5; i--){
digitalWrite(i, 1);
y+=1;
delay(1000);
}
if (y == 5){
for(int i = 10; i>5; i--)
{digitalWrite(i, 0);
}
serb.write(0);
}
}
}
delay 문을 통해서 LED를 순서대로 제어하는데, 이 때 코드의 최적화를 위해
여러개의 문장에 LED 제어신호를 주는대신 for 문과 if 문을 사용하여 묶어
가시성을 확보하였다.
#include <Servo.h>
// 버튼을 눌렀을 때 서보모터가 90도로 가고
// 1초에 LED를 하나씩 킴
// 5개의 LED가 다 켜졌으면 LED를 다 끄고 나서
// 서보모터를 다시 0도로 원위치
Servo serb; //서보 자체가 데이터타입임
void setup()
{
pinMode(A5, INPUT);
pinMode(5, OUTPUT);
pinMode(12, INPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
serb.attach(2);
Serial.begin(9600);
}
void loop()
{
int anadig = analogRead(A5);
int btn = digitalRead(12);
//serb.write(0); // 서보모터 0도로 초기화
/*if (btn == 1 )
{ serb.write(90);
digitalWrite(10, 1);
delay(1000);
digitalWrite(9, 1);
delay(1000);
digitalWrite(8, 1);
delay(1000);
digitalWrite(7, 1);
delay(1000);
digitalWrite(6, 1);
delay(1000);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
serb.write(0);*/
int anadig_subo= map(anadig, 0, 1023, 0, 180);
serb.write(anadig_subo);
if (btn ==1){
serb.write(90);
int y = 0;
tone(5, 8000, 100);
delay(1000);
for (int i=10; i>5; i--){
digitalWrite(i, 1);
y+=1;
delay(1000);
tone(5, i*200, 100);
}
if (y == 5){
for(int i = 10; i>5; i--)
{digitalWrite(i, 0);
}
serb.write(0);
tone(5, 6000, 100);
}
}
}
버튼을 누르면 피에조가 울림과 동시에, 서보모터 제어 그리고 LED제어
또한 분압기를 통해서 서브모터의 각도를 임의로 지정할 수 있도록 하였다.
#include <Servo.h>
// 버튼을 눌렀을 때 서보모터가 90도로 가고
// 1초에 LED를 하나씩 킴
// 5개의 LED가 다 켜졌으면 LED를 다 끄고 나서
// 서보모터를 다시 0도로 원위치
Servo serb; //서보 자체가 데이터타입임
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, INPUT);
pinMode(A5, INPUT);
pinMode(5, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
serb.attach(2);
Serial.begin(9600);
}
void loop()
{
int anadig = analogRead(A5);
int btn = digitalRead(12);
//serb.write(0); // 서보모터 0도로 초기화
/*if (btn == 1 )
{ serb.write(90);
digitalWrite(10, 1);
delay(1000);
digitalWrite(9, 1);
delay(1000);
digitalWrite(8, 1);
delay(1000);
digitalWrite(7, 1);
delay(1000);
digitalWrite(6, 1);
delay(1000);
digitalWrite(10, 0);
digitalWrite(9, 0);
digitalWrite(8, 0);
digitalWrite(7, 0);
digitalWrite(6, 0);
serb.write(0);*/
int anadig_subo= map(anadig, 0, 1023, 0, 180);
serb.write(anadig_subo);
digitalWrite(13,1);
delay(10);
digitalWrite(13,0);
int duo = pulseIn(12,1);
int duo_2 = duo / 58.2;
btn = duo_2;
if (btn < 100){
serb.write(90);
int y = 0;
tone(5, 8000, 100);
delay(1000);
for (int i=10; i>5; i--){
digitalWrite(i, 1);
y+=1;
delay(1000);
tone(5, i*200, 100);
}
if (y == 5){
for(int i = 10; i>5; i--)
{digitalWrite(i, 0);
}
serb.write(0);
tone(5, 6000, 100);
}
}
}
초음파 센서와 연계하여, 거리에 따른 경보음이 뜨도록 한다.