BASIC4MCU | 질문게시판 | 아두이노 앱인벤터 오류
페이지 정보
작성자 공돌코딩 작성일2019-11-02 21:08 조회6,254회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=10517
본문
아두이노, 앱인벤터를 이용해서 아두이노에서 스마트폰으로 센서값을 받아오고, 또한 앱상에서 버튼을 누르면 해당 데이터 값을 아두이노로 보내는 작업를 하고있는데 아두이노에서 센서값을 받아오는부분은 문제없는데 스마트폰에서 아두이노로 값을 보내는 것이 아예 안됩니다..
코딩내에서 메인루프안에
if(btSerial.available()){
modecontrol = btSerial.read();} 부분에서 앱인벤터의 버튼값을 아예 수신하지 못합니다...해당 코드 및 앱인벤터 블록 첨부합니다.아두이노 메가로 작업중입니다.#include // I2C 통신 라이브러리#include // LCD 1602 I2C용 라이브러리#include // 온습도센서 모듈 라이브러리#include//아날로그 핀 설정//먼지, 온도, 조도, 강수#define tempoutpin A8#define tempinpin A9#define dustpin A10#define lightpin A11#define rainpin A12//디지털 핀 설정//리미트, 온습도, led, 모터, 불꽃, 부저, 먼지led, 가스#define firepin 2#define gaspin 3#define DHTPIN 22#define limitopin 25#define limitcpin 26#define dustLEDpin 29#define buzzerpin 30#define led_red_pin 34#define led_green_pin 35#define led_blue_pin 36#define motor_win_pin1 39#define motor_win_pin2 40#define motor_win_speed 7 //PWM핀 사용#define motor_bli_pin1 43#define motor_bli_pin2 44#define motor_bli_speed 6#define BT_TX 18#define BT_RX 19//모듈설정LiquidCrystal_I2C lcd(0x27,16,2); // LCD 접근주소: 0x3F or 0x27DHT dht(DHTPIN, DHT11); // 온습도센서 DHT타입 > DHT11SoftwareSerial btSerial(BT_RX, BT_TX);//함수정의void pinmodeset(); //핀모드 설정void temp(); //온도센서 함수void temp_humidity(); //온습도센서 함수void lcd_display(); //LCD 표시void check_serial(); //시리얼모니터void dust(); //먼지센서 함수void light(); //조도센서 함수void rain(); //강수센서void open_itr(); //인터럽트 오픈void window_open();void window_close();//센서값 변수 설정float tempout_ana =0; //온도out 아날로그float tempout_conv =0; //온도센서 변환 값float tempin_ana =0; //온도센서 아날로그 값float tempin_conv =0; //온도센서 변환 값int th_temp =0; //온습도센서 온도값int th_humi =0; //온습도센서 습도값float dust_ana =0; //먼지센서 아날로그값float dust_conv =0; //먼지센서 변환값String dust_disp; //먼지 dsp표시int rain_ana =0; //빗물 아날로그boolean fire_dig =0; //불꽃센서 디지털값boolean gas_dig =0; //가스센서 디지털값boolean limito_dig =0;boolean limitc_dig =0;int light_ana =0; //조도센서 아날로그값unsigned char sdata = 0; //센서링 데이터int count =0;int temp1 =0;unsigned char modecontrol = 0;void setup(){Serial.begin(9600); //시리얼btSerial.begin(9600);pinmodeset();lcd.init(); //LCD 초기화lcd.backlight(); //백라이트 켜기attachInterrupt(digitalPinToInterrupt(firepin), open_itr, FALLING); //불꽃인터럽트attachInterrupt(digitalPinToInterrupt(gaspin), open_itr, FALLING); //가스인터럽트}void pinmodeset(){pinMode(dustLEDpin, OUTPUT);pinMode(led_red_pin, OUTPUT);pinMode(led_green_pin, OUTPUT);pinMode(led_blue_pin, OUTPUT);pinMode(firepin, INPUT);pinMode(gaspin, INPUT);pinMode(limitopin, INPUT);pinMode(limitcpin, INPUT);pinMode(motor_win_pin1, OUTPUT);pinMode(motor_win_pin2, OUTPUT);//pinMode(motor_bli_pin1, OUTPUT);// pinMode(motor_bli_pin2, OUTPUT);//pinMode(buzzerpin, OUTPUT);}void loop(){if(btSerial.available()){modecontrol = btSerial.read();}temp();temp_humidity();dust();rain();light();count++;if(count==50){bt_Serial();lcd_display();check_serial();count=0;}if((modecontrol&0b0010)==0b0000){ //자동모드if(sdata>0) window_close();else if(sdata == 0) window_open();}else if((modecontrol&0b0010)==0b0010){if((modecontrol&0b0001)==0b0000){window_open();}else if((modecontrol&0b0001)==0b0001){window_close();}}}void temp(){tempout_ana = analogRead(tempoutpin); //온도 센싱tempin_ana = analogRead(tempinpin);tempout_conv = (5.0*tempout_ana*100)/1024; //입력값 > 변환tempin_conv = (5.0*tempin_ana*100)/1024;if((tempout_conv > 30.0)&&(tempin_conv < 24.0)){sdata |= 0b0001;}else{sdata &= 0b1110;}}void temp_humidity(){th_humi = dht.readHumidity(); //습도값 저장th_temp = dht.readTemperature(); //온도값 저장 (온습센서)}void dust(){digitalWrite(dustLEDpin, LOW); //Led ON(풀업)delayMicroseconds(280);dust_ana = analogRead(dustpin);delayMicroseconds(40);digitalWrite(dustLEDpin, HIGH); //Led OFFdelayMicroseconds(9680);dust_conv = (0.17*(dust_ana*(5.0/1024.0))-0.1)*1000; //농도를 ㎍/m³단위로 계산if(dust_conv > 300){digitalWrite(led_green_pin, LOW);digitalWrite(led_blue_pin, LOW);digitalWrite(led_red_pin, HIGH);dust_disp = "Bad";}else if(dust_conv < 100){digitalWrite(led_green_pin, LOW);digitalWrite(led_red_pin, LOW);digitalWrite(led_blue_pin, HIGH);dust_disp = "Good";}else{digitalWrite(led_red_pin, LOW);digitalWrite(led_blue_pin, LOW);digitalWrite(led_green_pin, HIGH);dust_disp = "Normal";}}void rain(){rain_ana = analogRead(rainpin);if(rain_ana<600){sdata |= 0b0010;}else{sdata &= 0b1101;}}void open_itr(){tone(buzzerpin,300,500);window_open();}void window_open(){limito_dig = digitalRead(limitopin); //눌리면(열리면)1, 안눌리면(닫히면)0if(limito_dig == false){digitalWrite(motor_win_pin1, HIGH);digitalWrite(motor_win_pin2, LOW); //방향설정analogWrite(motor_win_speed, 255); //속도조절 (0~255)}if(limito_dig == true){digitalWrite(motor_win_pin1, LOW);digitalWrite(motor_win_pin2, LOW);}}void window_close(){limitc_dig = digitalRead(limitcpin);if(limitc_dig == false){digitalWrite(motor_win_pin1, LOW);digitalWrite(motor_win_pin2, HIGH); //방향설정analogWrite(motor_win_speed, 255); //속도조절 (0~255)}else if(limitc_dig == true){digitalWrite(motor_win_pin1, LOW);digitalWrite(motor_win_pin2, LOW);}}void light(){light_ana = analogRead(lightpin);}void check_serial(){gas_dig = digitalRead(gaspin);fire_dig = digitalRead(firepin);limito_dig = digitalRead(limitopin);limitc_dig = digitalRead(limitcpin);Serial.print("gas, fire");Serial.print(gas_dig);Serial.print(fire_dig);Serial.print(",강우 ");Serial.print(rain_ana);Serial.print(",sdata ");Serial.print(sdata);Serial.print("리밋o ");Serial.print(limito_dig);Serial.print(", 리밋c ");Serial.print(limitc_dig);Serial.print(", 컨트롤모드: ");Serial.print(modecontrol);Serial.println(temp1);}void lcd_display(){lcd.setCursor(0,0);lcd.print("To");lcd.print(tempout_conv, 1);lcd.setCursor(8,0);lcd.print("Ti");lcd.print(tempin_conv, 1);lcd.setCursor(0,1);lcd.print("HUMI");lcd.print(th_humi);lcd.print("%");lcd.setCursor(8,1);lcd.print(dust_disp);//bad normal nice}void bt_Serial(){if(btSerial.available())btSerial.print("습도 :");btSerial.print(th_humi);btSerial.print(" %");btSerial.print(" 온도 :");btSerial.print(tempout_conv);btSerial.print(" C");}
댓글 1
조회수 6,254master님의 댓글
master 작성일
if(btSerial.available()){
modecontrol = btSerial.read();
Serial.println(modecontrol,HEX); // <--- 추가해서 어떤 값이 들어오는지 체크하세요
}