질문게시판 > 안녕하세요, 인터페이스까지는 완료했습니다 !

TODAY753 TOTAL640,459
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 안녕하세요, 인터페이스까지는 완료했습니다 !

페이지 정보

작성자 푸링이 작성일2019-09-12 15:58 조회43회 댓글12건

본문

	

#include <SoftwareSerial.h>

SoftwareSerial btSerial(2,3);

//

#include <Stepper.h>

const int stepsPerRevolution=1024; // 1024는 90도를 의미

Stepper myStepper(stepsPerRevolution,11,9,10,8); // 회전각도와 연결할 핀 번호

//

#include <DHT.h>

#define DHTPIN 3 // DHT센서를 3번 핀에 연결

#define DHTTYPE DHT11

DHT dht(DHTPIN,DHTTYPE);

//

int gasPin=A0; // 가스 핀을 A0번에 연결

int fan=13,LED1=5, LED2=6, LED3=7;

//

float h=0, H=60,t,f,hic,hif;

int   GasValue,flag=0;

char  val,mode=1; // 초기값 자동모드

unsigned long dhttime;

//

void setup(){

  pinMode(fan,OUTPUT);

  pinMode(LED1,OUTPUT);

  pinMode(LED2,OUTPUT);

  pinMode(LED3,OUTPUT);

  dht.begin();

  myStepper.setSpeed(14); // 스텝모터의 회전속도

  Serial.begin(9600);

  btSerial.begin(9600);

  dhttime=millis();

}

//

void ss(){ Serial.print("GasValue="); Serial.println(GasValue); }

//

void loop(){

  if(btSerial.available()){

    val=btSerial.read(); //

  

    if(val=='4'){ mode=0; // 정회전

      if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); }

    }

    if(val=='5'){ mode=0; // 역회전

      if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); }

    }

    if(val=='2'){ mode=0; digitalWrite(fan,1); } // 수동모드 fan on

    if(val=='3'){ mode=0; digitalWrite(fan,0); } // 수동모드 fan off

    //

    if(val=='6'){digitalWrite(LED1, 1); } // 1번째 LED ON

    if(val=='7'){digitalWrite(LED1, 0); } // OFF

    if(val=='8'){digitalWrite(LED2, 1); } // 2번째 LED ON

    if(val=='9'){digitalWrite(LED2, 0); } // OFF

    if(val=='d'){digitalWrite(LED3, 1); } // 3번째 LED ON

    if(val=='e'){digitalWrite(LED3, 0); } // OFF

   //

    if(val=='a'){ H=''; } // 설정값 변경

 

   //

    if(val=='A'){ mode=1; } // AUTO 모드로 변경

  }

  

  //----------------------------------------------------------------------------

  if(mode){ // mode=1(자동모드)일 때만 동작

    GasValue=analogRead(gasPin); // 가스핀의 값을 읽기

     Serial.print("GasValue = "); Serial.println(GasValue);

      delay(3000);

    //

   if(GasValue >= 330){ //  가스 값이 350 이상일 경우, 시계방향 회전

      if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); ss(); }

    }

    if(GasValue < 300){ // 가스 값이 300 미만일 경우, 반시계방향 회전

      if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); ss(); }

    }

    //

    if(millis()-dhttime>=1500){ dhttime=millis();

      h=dht.readHumidity(); t=dht.readTemperature(); f=dht.readTemperature(true);

      if(isnan(h)||isnan(t)||isnan(f)){ Serial.println("Fail DHT!"); return; } // 온습도 읽기 실패

      hic=dht.computeHeatIndex(t,h,false);

      hif=dht.computeHeatIndex(f,h);

      //

      Serial.print("습도: "); Serial.print(h); Serial.print("% ");

      Serial.print("온도: "); Serial.print(t); Serial.println("도 ");

      //

      if(h>=H){ digitalWrite(fan,1); } // 자동모드 fan on

      else     { digitalWrite(fan,0); } // 자동모드 fan off

      //

      if(h>=60) {digitalWrite(LED1, 1); } // 습도가 60이상일 경우, 1번째 LED ON

        else {digitalWrite(LED1, 0); }

      if(h>=55 && h<60) {digitalWrite(LED2, 1); } // 습도가 58이상, 60미만일 경우, 2번째 LED ON

        else {digitalWrite(LED2, 0); }

      if(h<55) {digitalWrite(LED3, 1); } // 습도가 58미만일 경우, 3번째 LED ON

        else {digitalWrite(LED3, 0); }

    }

  }

}

 

인터페이스는 고민을 많이 해보고 완성을 시켰습니다 !

 

원하는 숫자를 써넣어서 전송하면 전송이 되어 라벨값에 그대로 숫자가 잘 나오고있습니다.

 

딱 한가지만 알려주시면 이 프로젝트가 완성될 것같은데요..

 

앱인벤터쪽에서 블루투스로 메세지를 보내는 데, 여기서 a라는 값으로 보내어 H 라는 값으로 받아들이고 싶은데,

 

여기서 중요한 게 제가 원하는 숫자가 항상 달라질 수 있기 때문에 변수로 두어야 할 것 같은데, 이 점만 도와주실 수 있을까요.. 

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 12

조회수 43

master님의 댓글

master 작성일

a라는 값은 뭘 의미하죠?

master님의 댓글

master 작성일

알파벳은 대략 대문자 소문자 모두 f~z까지 남아있군요
다 쓸 필요는 없고
대문자 소문자 각각 10개씩만 사용해보죠
f = 0
g = 1
h = 2
i = 3
j = 4
k = 5
l = 6
m = 7
n = 8
o = 9
소문자는 1의자리, 대문자는 10의자리에 치환하세요
예를들면 Ff 를 전송하면 00 입니다.
Oo를 전송하면 99입니다.

master님의 댓글

master 작성일

보낼 때 습도값이 68이라면
int humi=68,t10,t1;
t10=humi/10; // 습도값 10의자리
t1=humi%10; // 습도값 1의자리
t10+='F'; // 10의자리는 대문자 'F'~'O' 범위임
t1+='f'; // 1의자리는 소문자 'f'~'o' 범위임
t10과 t1을 아두이노로 전송하면 됩니다.

master님의 댓글

master 작성일

if(val=='F'){ H%=10; } // 10의자리 0
if(val=='G'){ H%=10; H+=10; } // 10의자리 1
if(val=='H'){ H%=10; H+=20; } // 10의자리 2
.
.
if(val=='f'){ H=(H/10)*10 + 0; } // 1의자리 0
if(val=='g'){ H=(H/10)*10 + 1; } // 1의자리 1
if(val=='h'){ H=(H/10)*10 + 2; } // 1의자리 2
.
.

푸링이님의 댓글

푸링이 댓글의 댓글 작성일

아.. 정말 감사합니다. 많은 변수값을 받아들이려면 이렇게 모든 문자들을 이용하여 넣어줘야 했던거군요..

감사드리고 추석연휴 잘 보내시길 바랄게요 !!

master님의 댓글

master 작성일

테이블을 사용할 수도 있고
코드로 구현 한다고 해도 짧게 만들수가 있습니다.
if((val>='F')&&(val<='O')){ H%=10; H+=(val-'F')*10; } // 10의자리 경우
if((val>='f')&&(val<='o')){ H=(H/10)*10 + (val-'f'); } // 1의자리 경우

푸링이님의 댓글

푸링이 댓글의 댓글 작성일

아 더 자세한 답변 감사합니다.

invalid operands of types 'float' and 'int' to binary 'operator%'

혹 이런오류는 위에서 제가 정의를 해줬는데도 뜨는데 다른쪽의 문제일까요.?

master님의 댓글

master 댓글의 댓글 작성일

H 선언을 실수형으로 했나봅니다.
정수형으로 변경해보세요
정수형으로 변경하면 (멀쩡하던) 다른 부분에서 오류가 발생할 수도 있습니다.

푸링이님의 댓글

푸링이 댓글의 댓글 작성일

안녕하세요, 추석 잘 보내고 계신지요.. H선언은 정수형으로 바꾸어 잘 해결했습니다.
그런데 궁금한 점이.. 마스터님이 설명해주신 코드로 잘 만들어보았는데, 작동이 안되더라구요..
저는 앱인벤터 쪽에서 9~100 이라는 범위를 두고 그 안의 숫자들만 입력창에 전송될 수 있게 만들었는데 마스터님의 코드를 적용시키려면 이 것을 문자를 전송하게 수정을 해야되는건가요?
두번 째는, 앱인벤터에서 아두이노로 블루투스를 통해 sendtext를 해야 넘어갈텐데 그 텍스트부분을 무슨 문자? 숫자? 로 넘겨야 저 코드가 정상적으로 돌아갈까요..
항상 감사드립니다..

master님의 댓글

master 댓글의 댓글 작성일

앱인벤터에서 아두이노로 데이터를 전송하는 예제를 웹검색으로 찾아서 공부해보세요

푸링이님의 댓글

푸링이 댓글의 댓글 작성일

그럼 아두이노쪽에서 데이터를 받는 형식이 Ff 이런 알파벳 방식으로 받아져야 되나요?
숫자로 전송하는게 아닌?

master님의 댓글

master 댓글의 댓글 작성일

맞습니다.
'F'
'f'
이렇게 두 바이트가 전송되어야하죠

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 677
공지 사이트 이용 안내댓글[9] master 17-10-29 7894
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07]댓글[1] 이미지첨부파일 master 18-01-23 2961
질문 atmega128a OCRA, B 질문이요 새글 초짜 05:33 6
질문 혹여나 습도값을 슬라이더로 바꿀 수 있을까요? 이미지새글첨부파일 푸링이 19-09-16 4
질문 아두이노 포크레인 중 스텝모터질문 새글 노은우 19-09-16 7
질문 아트메가댓글[2] 새글 전자어렵 19-09-16 14
질문 도와주세요 ㅠㅠ 새글 민서가또 19-09-16 11
질문 아두이노 if문 실행문제 이미지새글첨부파일 sun0100 19-09-16 9
질문 아트메가128댓글[2] 새글 전자어렵 19-09-15 11
답변 답변글 답변 : 아트메가128댓글[4] 새글 master 19-09-15 21
질문 아두이노 IR센서 코딩질문입니다댓글[2] 새글 rkskek 19-09-15 19
질문 아두이노 외부전원 질문드립니다!댓글[2] 새글 빵빵판 19-09-15 11
질문 Timer1_CTC 연습중인데요..댓글[4] 초짜 19-09-13 15
현재글 안녕하세요, 인터페이스까지는 완료했습니다 !댓글[12] 이미지첨부파일 푸링이 19-09-12 44
질문 아래 앱인벤터 글에 이어서..댓글[1] 이미지첨부파일 푸링이 19-09-11 18
질문 memcmpf 질문이요댓글[2] 초짜 19-09-10 29
질문 아두이노 네오픽셀 질문드립니다.댓글[1] 호기심왕 19-09-10 28
질문 앱인벤터를 통해 스텝모터를 습도조건에 따라 움직이게 하고싶습니다댓글[5] 푸링이 19-09-10 32
질문 atmega128 의 PWM 모드 질문이요댓글[6] 초짜 19-09-06 87
질문 아두이노 서보모터 제어문제입니다 ㅠ댓글[3] 첨부파일 졸업좀시켜줘요 19-09-05 98
질문 코딩질문이므니다..댓글[1] 첨부파일 베이식 19-09-04 60
질문 아두이노 Oscillator.h 라이브러리 다운 하는법댓글[1] bbhu 19-09-02 47
질문 atmega128a 질문이요댓글[1] 초짜 19-08-30 67
질문 아두이노 이전 고분해능 엔코더 질문에 추가 궁금점이 있습니다!댓글[1] 이미지첨부파일 모터무 19-08-30 33
질문 스크래치X로 아두이노 제어댓글[1] 이미지 승희엄마 19-08-29 55
질문 아두이노 세븐 세그먼트 제어 전전전전 19-08-29 51
답변 답변글 답변 : 아두이노 세븐 세그먼트 제어 master 19-08-29 51
질문 아두이노 모터제어댓글[1] 이미지 오토의반란 19-08-29 78
질문 atmega128을 배우고 싶은 고등학생입니다. 고딩 19-08-28 57
게시물 검색

2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기