BASIC4MCU | 질문게시판 | 아두이노 작동 오류 질문입니다
페이지 정보
작성자 dacapo 작성일2020-11-29 17:32 조회23,822회 댓글4건본문
4개의 발열패드를 각각 제어하는 코드입니다
자동(발열패드에 압력을 직접 가해 작동하는 것) 은 잘 되는데
수동(블루투스로 값을 받아 작동하는 것) 은 만약 1번 발열패드를 키기 위해 'u' 값을 넣으면 4개가 다 켜지고
끄기 위해 '6' 값을 넣으면 꺼지지 않습니다 off에 cnt 값을 0으로 놓으면 꺼지긴 하나 4개가 다 꺼집니다
코드엔 이상이 없는거 같은데 왜 작동이 제대로 안되는지 모르겠습니다
/* 압력센서 좌 우 2개 씩 사용하여 눌린쪽 만 히터 on , 온도 제어
**************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(17,16);
#define HeaterLF 12 //
#define HeaterLB 11 //
#define HeaterRF 10 //
#define HeaterRB 9 //
#define LED_LF 5 //
#define LED_LB 6 //
#define LED_RF 7 //
#define LED_RB 8 //
#define LED_1 4 //
#define LED_2 3 //
#define LED_3 2 //
int cnt = 0; // 수동 1 , 자동 0 선택
int VR_map = 0;
int pre_cnt = 700;
int pressureLF = 0;
int pressureLB = 0;
int pressureRF = 0;
int pressureRB = 0;
int TEM_sLF = 0;
int TEM_sLB = 0;
int TEM_sRF = 0;
int TEM_sRB = 0;
int lfon = 0; int lbon = 0; int rfon = 0; int rbon = 0;
int tem_cnt = 355 ; // 최대 355, 중간 379, 최저 417
int heter_pwm = 50;
int BL_pwm = 50;
void setup() {
Serial.begin(9600);
Serial2.begin(9600); // 블루투스
pinMode(HeaterLF, OUTPUT); pinMode(HeaterLB, OUTPUT);
pinMode(HeaterRF, OUTPUT); pinMode(HeaterRB, OUTPUT);
pinMode(LED_LF, OUTPUT); pinMode(LED_LB, OUTPUT);
pinMode(LED_RF, OUTPUT); pinMode(LED_RB, OUTPUT);
pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(A0, INPUT);pinMode(A1, INPUT); pinMode(A2, INPUT);
pinMode(A3, INPUT);pinMode(A4, INPUT); pinMode(A5, INPUT);
pinMode(A6, INPUT);pinMode(A7, INPUT); pinMode(A8, INPUT);
}
String str ="";
void loop() {
if (Serial2.available())
{
char cmd = (char)Serial2.read();
if(cmd == 'u') {
Serial.println("1 on---------");
cnt = 1; // 수동
LF_on();
delay(10);
} else if(cmd == 'l') {
Serial.println("2 on--------");
cnt = 1; // 수동
LB_on();
delay(10);
} else if(cmd == 'd') {
Serial.println("3 on--------");
cnt = 1; // 수동
RF_on();
delay(10);
}else if(cmd == 'r') {
Serial.println("4 on--------");
cnt = 1; // 수동
RB_on();
delay(10);
}else if(cmd == '6') {
Serial.println("1 off--------");
cnt = 1; // 수동
LF_off();
delay(10);
}else if(cmd == '7') {
Serial.println("2 off-------");
cnt = 1; // 수동
LB_off();
delay(10);
}else if(cmd == '8') {
Serial.println("3 off-------");
cnt = 1; // 수동
RF_off();
delay(10);
}else if(cmd == '9') {
Serial.println("4 off-------");
cnt = 1; // 수동
RB_off();
delay(10);
}else if(cmd == 's') {
Serial.println("auto-------");
cnt = 0; // 자동
delay(10);
}else if(cmd == '1') {
Serial.println("1 t BL_pwm = 50");
cnt = 1;
BL_pwm = 50;
tem_cnt = 417;
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
}else if(cmd == '2') {
Serial.println("2 BL_pwm = 130");
cnt = 1;
BL_pwm = 130;
tem_cnt = 380;
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
}else if(cmd == '3') {
Serial.println("3 BL_pwm = 250");
cnt = 1;
BL_pwm = 220;
tem_cnt = 355;
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
}
}
TEM_sLF = analogRead(A1);
TEM_sLB = analogRead(A3);
TEM_sRF = analogRead(A5);
TEM_sRB = analogRead(A7);
Serial.print("TEM_sLF : "); Serial.print(TEM_sLF );
Serial.print(" - TEM_sLB : "); Serial.print(TEM_sLB );
Serial.print(" - TEM_sRF : "); Serial.print(TEM_sRF );
Serial.print(" - TEM_sRB : "); Serial.println(TEM_sRB );
delay(100);
if(cnt == 1){
if ((lfon == 1)&& (TEM_sLF < tem_cnt)){
analogWrite(HeaterLF,0);
}else{
analogWrite(HeaterLF,BL_pwm);
}
if ((lbon == 1)&& (TEM_sLB < tem_cnt)){
analogWrite(HeaterLB,0);
}else{
analogWrite(HeaterLB,BL_pwm);
}
if ((rfon == 1)&& (TEM_sRF < tem_cnt)){
analogWrite(HeaterRF,0);
}else{
analogWrite(HeaterRF,BL_pwm);
}
if ((rbon == 1)&& (TEM_sRB < tem_cnt)){
analogWrite(HeaterRB,0);
}else{
analogWrite(HeaterRB,BL_pwm);
}
}
if(cnt == 0){
int vr = analogRead(A8);
VR_map = map(vr, 0,1023, 3,1);
Serial.print(" VR_map : "); Serial.println(VR_map );
temp_con();
pressureLF = analogRead(A0);
pressureLB = analogRead(A2);
pressureRF = analogRead(A4);
pressureRB = analogRead(A6);
delay(100);
Serial.print("pressureLF : "); Serial.print(pressureLF );
Serial.print(" - pressureLB : "); Serial.print(pressureLB );
Serial.print(" - pressureRF : "); Serial.print(pressureRF );
Serial.print(" - pressureRB : "); Serial.println(pressureRB );
Serial.println("*******************************************************************************");
delay(50);
if (pressureLF < pre_cnt ){ // 왼쪽 위 감지 되면 히터 작동
digitalWrite(LED_LF,HIGH);
if (TEM_sLF < tem_cnt){
analogWrite(HeaterLF,0);
}
else{
analogWrite(HeaterLF,heter_pwm);
delay(100);
}
}else{
digitalWrite(LED_LF,LOW);
analogWrite(HeaterLF,0);
delay(1000);
}
if (pressureLB < pre_cnt ){ // 왼쪽 위 감지 되면 히터 작동
digitalWrite(LED_LB,HIGH);
if (TEM_sLB < tem_cnt){
analogWrite(HeaterLB,0);
}
else{
analogWrite(HeaterLB,heter_pwm);
delay(100);
}
}else{
digitalWrite(LED_LB,LOW);
analogWrite(HeaterLB,0);
delay(1000);
}
if (pressureRF < pre_cnt ){ // 왼쪽 위 감지 되면 히터 작동
digitalWrite(LED_RF,HIGH);
if (TEM_sRF < tem_cnt){
analogWrite(HeaterRF,0);
}
else{
analogWrite(HeaterRF,heter_pwm);
delay(100);
}
}else{
digitalWrite(LED_RF,LOW);
analogWrite(HeaterRF,0);
delay(1000);
}
if (pressureRB < pre_cnt ){ // 왼쪽 위 감지 되면 히터 작동
digitalWrite(LED_RB,HIGH);
if (TEM_sRB < tem_cnt){
analogWrite(HeaterRB,0);
}
else{
analogWrite(HeaterRB,heter_pwm);
delay(100);
}
}else{
digitalWrite(LED_RB,LOW);
analogWrite(HeaterRB,0);
delay(1000);
}
}
}
void LF_on()
{
lfon = 1;
digitalWrite(LED_LF,HIGH);
analogWrite(HeaterLF,BL_pwm);
delay(100);
}
void LF_off()
{
digitalWrite(LED_LF,LOW);
analogWrite(HeaterLF,0);
delay(100);
}
void LB_on()
{
lbon = 1;
digitalWrite(LED_LB,HIGH);
analogWrite(HeaterLB,BL_pwm);
delay(100);
}
void LB_off()
{
digitalWrite(LED_LB,LOW);
analogWrite(HeaterLB,0);
delay(1000);
}
void RF_on()
{
rfon = 1;
digitalWrite(LED_RF,HIGH);
analogWrite(HeaterRF,BL_pwm); //heter_pwm
delay(100);
}
void RF_off()
{
digitalWrite(LED_RF,LOW);
analogWrite(HeaterRF,0);
delay(100);
}
void RB_on()
{
rbon = 1;
digitalWrite(LED_RB,HIGH);
analogWrite(HeaterRB,BL_pwm);
delay(100);
}
void RB_off()
{
digitalWrite(LED_RB,LOW);
analogWrite(HeaterRB,0);
delay(100);
}
void temp_con()
{
Serial.println("11111");
if (VR_map == 1){
heter_pwm = 50;
Serial.print("heter_pwm ; ");
Serial.println(heter_pwm);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
delay(100);
}
if (VR_map == 2){
heter_pwm = 130;
Serial.print("heter_pwm ; ");
Serial.println(heter_pwm);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
delay(100);
}
if (VR_map == 3){
heter_pwm =220;
Serial.print("heter_pwm ; ");
Serial.println(heter_pwm);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
delay(100);
}
}
댓글 4
조회수 23,822master님의 댓글
master 작성일
cnt = 1; // 수동
cnt = 0; // 자동
cnt로 자동/수동 구분하고 있나요?
그렇다면 루푸문에서 수동에 관한 코드는 제거되야 합니다.
if(cnt == 1){
if ((lfon == 1)&& (TEM_sLF < tem_cnt)){ analogWrite(HeaterLF,0); } else{ analogWrite(HeaterLF,BL_pwm); }
if ((lbon == 1)&& (TEM_sLB < tem_cnt)){ analogWrite(HeaterLB,0); } else{ analogWrite(HeaterLB,BL_pwm); }
if ((rfon == 1)&& (TEM_sRF < tem_cnt)){ analogWrite(HeaterRF,0); } else{ analogWrite(HeaterRF,BL_pwm); }
if ((rbon == 1)&& (TEM_sRB < tem_cnt)){ analogWrite(HeaterRB,0); } else{ analogWrite(HeaterRB,BL_pwm); }
}
dacapo님의 댓글
dacapo
정말 감사합니다 제가 원했던대로 작동이 됩니다
궁금한 점이 왜 수동에 관한 루프문이 삭제가 되어야 하는지 잘 모르겠습니다
master님의 댓글
master
수동은 블루투스로 제어하는 것인데
루프에서 불루투스와 상관없이 계속 제어를 하면 수동이 아니고 자동인 것이죠
dacapo님의 댓글
dacapo 작성일아 그런거였군요 정말 감사합니다 도움이 많이 되었습니다