Arduino/esp8266
아두이노-UNO, 스위치, 카운트 운전 & 정지 테스트... 성미시리얼
● 운전 스위치 가 눌리면, 카운트값이 증가하고, 증가한 값을 송신합니다.
정지 스위치 를 누르면, 카운트 정지를 합니다.
extern volatile unsigned long
timer0_millis;
int swPin1=8;
// 스위치1 핀을 설정합니다, 운전
int swPin2=9;
// 스위치2 핀을 설정합니다, 정지
int t1 =0; // 0~10 카운트 변수입니다
int t10ms=0; // 10ms 카운트 변수입니다
bool run_fg=false;
// 운전 & 정지 플래그
bool
repeat=false; // 스위치
반복플래그
//----------------------------------------------------
void setup() {
// 초기설정 함수입니다
Serial.begin(9600);
// 9600 bps 로 설정합니다
pinMode(swPin1, INPUT);
// 운전 스위치를 입력핀으로 설정합니다
pinMode(swPin2, INPUT);
// 정지 스위치를 입력핀으로 설정합니다
pinMode(swPin1, INPUT_PULLUP);
// 운전 스위치핀에 풀업저항을 연결합니다
pinMode(swPin2, INPUT_PULLUP);
// 정지 스위치핀에 풀업저항을 연결합니다
}
//----------------------------------------------------
void loop() { // 매인루프 함수입니다
if (millis() >= 10) { //
10ms가 되었다면?
timer0_millis = 0; // millis 카운트를 초기화 합니다
if (run_fg==true) put_txd(); // 운전상태면?
chk_sw(); // 스위치검사 함수를 호출합니다
}
}
//----------------------------------------------------
void put_txd() { // per10ms, 시리얼 송신함수입니다
if (++t10ms >= 50) { // 500ms가 되었다면?
t10ms = 0;
// 10ms 카운트변수를 초기화를 수행합니다
Serial.print("t1: ");
// 문자를 송신합니다
Serial.println(t1); // 카운트값을 송신합니다
if (++t1 > 10) { // 10회 가 되었다면?
t1 =
0; // 10회 카운트변수를 초기화합니다
}
}
}
//----------------------------------------------------
void chk_sw() { // per10ms, 스위치상태를 검사합니다
byte
b1= digitalRead(swPin1); //스위치1 상태를 저장합니다
byte
b2= digitalRead(swPin2); //스위치2 상태를 저장합니다
if
(b1==HIGH && b2==HIGH) { //스위치가 눌리지 않았다면?
repeat = false; // 스위치반복 플래그 끄기(OFF)를 합니다
return; // 호출한 함수로 돌아값니다
}
if
(repeat==true) return; // 스위치눌림 반복중이면?
repeat = true; // 스위치반복 플래그 켜기(ON)를
합니다
if (b1==LOW)
run_fg=true; // 운전 스위치가 눌린상태면?else run_fg = false; // 정지 스위치가 눌린상태
}
} // 아두이노-UNO, Arduino, 카운트, 운전, 정지, 시리얼, 통신, 반복, 성미시리얼