BASIC4MCU | 질문게시판 | 토글스위치와 블루투스를 동시에 이용하여 led한개를 제어하는 방법 질문
페이지 정보
작성자 화일 작성일2021-12-03 23:57 조회10,607회 댓글3건첨부파일
본문
토글 스위치를 켰을때 켜지거나 블루투스를 켰을때 켜지는 코드를 만들고 싶은데 자꾸 충돌이 일어나는지 토글 스위치는 작동 되는데
블루투스는 작동하질 않네요.. 어캐 해결하나요?
#include <SoftwareSerial.h>
int RED_PIN = 9;
int GREEN_PIN = 10;
int BLUE_PIN = 11;
int button = 8;
int RX=2;
int TX=3;
SoftwareSerial BTSerial(RX, TX);
int sw = 0;
int btsw = 0;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(button, INPUT_PULLUP);
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read());
}
if (Serial.available()) {
BTSerial.write(Serial.read());
}
//==============입력값 설정===============
if(digitalRead(button) == HIGH) {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}
else {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
if (BTSerial.available()) {
char cmd = (char)BTSerial.read();
if(cmd == '1') {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}
else if(cmd == '0') {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
}
//=====================================
}
댓글 3
조회수 10,607master님의 댓글
master 작성일
토글스위치 체크하는 시간은 초당 1000번이 넘습니다.(루프 타임은 수십us 정도일 듯)
블루투스는 사람이 입력하는 순간 딱 1회만 전송됩니다.
블루투스 조작이 이루어지고 난 후 수십us 후에 토글스위치를 체크해서 변경 해버리죠
master님의 댓글
master 작성일
if (BTSerial.available()) {
이 코드가 두군데 적혀있습니다.
하나로 몰아야합니다.
master님의 댓글
master 작성일
#include <SoftwareSerial.h>
int RX=2,TX=3;
SoftwareSerial BTSerial(RX,TX);
//
int RED_PIN=9,GREEN_PIN=10,BLUE_PIN=11;
int button=8;
//
int sw=0,btsw=0,cmd='a'; // 초기값 자동모드
//
void setup(){
pinMode(RED_PIN,OUTPUT); pinMode(GREEN_PIN,OUTPUT); pinMode(BLUE_PIN,OUTPUT);
pinMode(button,INPUT_PULLUP);
Serial.begin(9600);
BTSerial.begin(9600);
}
//
void loop(){
if(Serial.available()){ BTSerial.write(Serial.read()); }
//
if(BTSerial.available()){
cmd=(char)BTSerial.read();
Serial.write(cmd);
if(cmd=='1'){ digitalWrite(RED_PIN,0); digitalWrite(GREEN_PIN,0); digitalWrite(BLUE_PIN,0); } //수동모드
if(cmd=='0'){ digitalWrite(RED_PIN,1); digitalWrite(GREEN_PIN,1); digitalWrite(BLUE_PIN,1); } //수동모드
//if(cmd=='a'){} //자동모드
}
//-----------------------
if(cmd=='a'){ // 자동모드
if(digitalRead(button)){ digitalWrite(RED_PIN,0); digitalWrite(GREEN_PIN,0); digitalWrite(BLUE_PIN,0); }
else { digitalWrite(RED_PIN,1); digitalWrite(GREEN_PIN,1); digitalWrite(BLUE_PIN,1); }
}
}
//
'a'를 입력하면 자동모드가 되어서 토글스위치를 체크합니다.