과제/아두이노

2023년 1학기 3주차 과제(millis사용하기)

Developer성현 2023. 3. 24. 21:28

millis()함수에 대한 설명과 사용법을 작성한 링크 입니다.

https://han-studio.tistory.com/10

 

millis함수 사용하기

아두이노에는 시간과 관련된 함수가 여러 가지가 있습니다. 대표적으로 delay 와 delaymicroseconds가 있습니다. 이 두 함수는 지정된 시간 동안 코드를 멈추는 것입니다. 이 함수들은 어떠한 복잡한

han-studio.tistory.com

 

 

 

3_4

//================핀 매핑=============
byte pinMap_LED_1 = 4;
byte pinMap_LED_2 = 3;
byte pinMap_Button_1 = 2;
//===================================


unsigned long timer_1 = 0;
//ms 시간저장 변수

void setup() {
  // put your setup code here, to run once:

//=============핀 모드 설정============
  pinMode(pinMap_LED_1, OUTPUT);
  pinMode(pinMap_LED_2, OUTPUT);

  pinMode(pinMap_Button_1, INPUT);
//===================================

  timer_1 = millis();
  //아두이노가 부팅된 시점에서 현재 시간을 변수에담는다.
}

void loop() {
  // put your main code here, to run repeatedly:

  if(millis() - timer_1 >= 1000){
    //실시간으로 millis()로 시간을 측정해서timer_1와의 차를 구하고 1000보다
    //같거나 크다면 실행
    
    timer_1 = millis();
    //다시 현재까지의 시간을 timer_1에 담는다.
    
    digitalWrite(pinMap_LED_1, !digitalRead(pinMap_LED_1));
    //pinMap_LED_1의 핀 상태를 가져와 반전시켜 다시 출력
  }

  if(digitalRead(pinMap_Button_1) == true){
    digitalWrite(pinMap_LED_2, !digitalRead(pinMap_LED_2));
    //pinMap_LED_1의 핀 상태를 가져와 반전시켜 다시 출력
    
    delay(100);
    //LED의 깜빡임을 인지할 수 있도록 0.1초 기다린다.
  }

}

 

3_5

//================핀 매핑=============
byte pinMap_LED_1 = 4;
byte pinMap_LED_2 = 3;
byte pinMap_Button_1 = 2;
//===================================

unsigned long timer_1 = 0;
//ms 시간저장 변수

bool ButtonCheck = false;
//스위치의 입력 로직을 1번만 수행하도록 입력 상태를 저장하는 변수

void setup() {
  // put your setup code here, to run once:
  //=============핀 모드 설정============
  pinMode(pinMap_LED_1, OUTPUT);
  pinMode(pinMap_LED_2, OUTPUT);

  pinMode(pinMap_Button_1, INPUT);
  //===================================

  timer_1 = millis();
  //아두이노가 부팅된 시점에서 현재 시간을 변수에담는다.
}

void loop() {
  // put your main code here, to run repeatedly:

  if (millis() - timer_1 >= 1000) {
    //실시간으로 millis()로 시간을 측정해서timer_1와의 차를 구하고 1000보다
    //같거나 크다면 실행
    
    timer_1 = millis();
    //다시 현재까지의 시간을 timer_1에 담는다.
    
    digitalWrite(pinMap_LED_1, !digitalRead(pinMap_LED_1));
    //pinMap_LED_1의 핀 상태를 가져와 반전시켜 다시 출력
  }

  if (digitalRead(pinMap_Button_1) == true && ButtonCheck == false) {
    //스위치가 눌리고 동시에 ButtonCheck가 false 상태일때만 실행
    
    ButtonCheck = true;
    //ButtonCheck를 true 로 변경해서
    //스위치가 계속 눌린 상태라도 해당 로직을 실행하지 못하게 한다.
    
    digitalWrite(pinMap_LED_2, !digitalRead(pinMap_LED_2));
    //pinMap_LED_2의 핀 상태를 가져와 반전시켜 다시 출력
    
  } else if (digitalRead(pinMap_Button_1) == false) {
    //스위치가 눌리지 안을경우 ButtonCheck를 false로 변경
    ButtonCheck = false;
  }

}

 

 

 

3_6

//================핀 매핑=============
byte pinMap_LED_1 = 4;
byte pinMap_LED_2 = 3;
byte pinMap_LED_3 = 2;
//===================================

unsigned long timer_1 = 0;
unsigned long timer_2 = 0;
unsigned long timer_3 = 0;
//ms 시간저장 변수

bool ButtonCheck = false;
//스위치의 입력 로직을 1번만 수행하도록 입력 상태를 저장하는 변수

void setup() {
  // put your setup code here, to run once:
  //=============핀 모드 설정============
  pinMode(pinMap_LED_1, OUTPUT);
  pinMode(pinMap_LED_2, OUTPUT);
  pinMode(pinMap_LED_3, OUTPUT);
  //===================================

  timer_3 = timer_2 = timer_1 = millis();
  //아두이노가 부팅된 시점에서 현재 시간을 변수에담는다.
}

void loop() {
  // put your main code here, to run repeatedly:

  if (millis() - timer_1 >= 50) {
    //실시간으로 millis()로 시간을 측정해서timer_1와의 차를 구하고 1000보다
    //같거나 크다면 실행

    timer_1 = millis();
    //다시 현재까지의 시간을 timer_1에 담는다.

    digitalWrite(pinMap_LED_1, !digitalRead(pinMap_LED_1));
    //pinMap_LED_1의 핀 상태를 가져와 반전시켜 다시 출력

  }

  //위 로직과 동일
  if (millis() - timer_2 >= 1000) {
    timer_2 = millis();
    digitalWrite(pinMap_LED_2, !digitalRead(pinMap_LED_2));
  }

  if (millis() - timer_3 >= 100) {
    timer_3 = millis();
    digitalWrite(pinMap_LED_3, !digitalRead(pinMap_LED_3));
  }

}

 

3_7

byte pinMap_LED_1 = 2;
//핀 매핑

unsigned long timer_1 = 0;
//ms 시간저장 변수

int value = 0;
//가변저항 값을 담을변수

void setup() {
  // put your setup code here, to run once:
  pinMode(pinMap_LED_1, OUTPUT);
  //핀 모드 설정

  timer_1 = millis();
  //아두이노가 부팅된 시점에서 현재 시간을 변수에담는다.
}

void loop() {
  // put your main code here, to run repeatedly:

  value = map(analogRead(A0), 0, 1023, 500, 1500);
  //value에 아날로그0번 핀에 입력된 값 0~1023 사이 값을 500~1500
  //사이 값으로 맵핑 시킨다.

  if (millis() - timer_1 >= value) {
    //실시간으로 millis()로 시간을 측정해서timer_1와의 차를 구하고 value보다
    //같거나 크다면 실행

    timer_1 = millis();
    //다시 현재까지의 시간을 timer_1에 담는다.
    
    digitalWrite(pinMap_LED_1, !digitalRead(pinMap_LED_1));
    //pinMap_LED_1의 핀 상태를 가져와 반전시켜 다시 출력
  }
}