본문 바로가기

IoT/Arduino

버튼과 서보모터, LED의 연계

#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);
    }
  }
  }

 

초음파 센서와 연계하여, 거리에 따른 경보음이 뜨도록 한다.

'IoT > Arduino' 카테고리의 다른 글

서보모터의 활용  (0) 2020.12.28
조도센서의 이용  (0) 2020.12.28
가변저항의 이용  (0) 2020.12.24