과제/아두이노
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의 핀 상태를 가져와 반전시켜 다시 출력
}
}