아두이노 > 답변 : 아두이노 외부 인터럽트 loop문과 연동

TODAY994 TOTAL273,941
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


▼ BASIC4MCU 후원업체 최신 정보 ▼

▲ BASIC4MCU 후원업체 최신 정보 ▲

BASIC4MCU | 아두이노 | 아두이노 | 답변 : 아두이노 외부 인터럽트 loop문과 연동

페이지 정보

작성자 master 작성일2018-10-03 00:07 조회46회 댓글0건

본문

	

 

// DateTime : 2018-10-03 오전 12:11:30
// by Ok-Hyun Park
//
#include <MD_TCS230.h>
#include <FreqCount.h>
#include <DFPlayer_Mini_Mp3.h>
#include "ColorMatch.h"
#define BLACK_CAL     0
#define WHITE_CAL     1
#define READ_VAL      2
#define LEARN_VAL     3
#define LEARN_MODE   'L'
#define MATCH_MODE   'M'
#define  S2_OUT       7
#define  S3_OUT       6
MD_TCS230 CS(S2_OUT,S3_OUT);
colorData rgb;
//
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);
//
#define interruptPin1 3
//
uint8_t modeOp='M',ctIndex;
unsigned long time=0;
char runflag=1;
//
void setup(){
  Serial.begin(115200);
  mySerial.begin(9600);
  CS.begin();
  if(modeOp==MATCH_MODE){ CS.setDarkCal(&sdBlack); CS.setWhiteCal(&sdWhite); }
  mp3_set_serial(mySerial); delay(1); mp3_set_volume(15);
  pinMode(interruptPin1,INPUT);
  digitalWrite(interruptPin1,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin1),toggle,FALLING); // CHANGE
}
//
char getChar(){ while(Serial.available()==0); return(toupper(Serial.read())); }
void clearInput(){ while(Serial.read()!=-1); }
//
void toggle(){ runflag^=1; }
//
char *readASCII(uint8_t size){
  #define BUF_SIZE(9+1)
    static char s[BUF_SIZE]; uint8_t i=0char c;
    s[0]=0size--;
    while((i<size)&&(size<BUF_SIZE)){
      c=getChar(); if(c=='\n')breaks[i++]=cs[i]=0;
    }
    clearInput();
    return(s);
  #undef BUF_SIZE
}
//
uint8_t fsmReadValue(uint8_t state,uint8_t valType){
  static uint8_t selChannel,readCount;
  static sensorData sd;
  switch(state){
    case 0:{ // 시작하기 위한 안내문을 보여줍니다:
      Serial.print(F("\n\n값을 읽는 중: "));
      switch(valType){
        case BLACK_CALSerial.print(("검정색 영점 조정")); break;
        case WHITE_CALSerial.print(("하얀색 영점 조정")); break;
        case READ_VAL:  Serial.print(("색 맞추기")); break;
        case LEARN_VALSerial.print(ct[ctIndex].name); break;
        default:        Serial.print(F("??")); break;
      }
      clearInput();
      if(valType==LEARN_VAL){ char *p; }
      elseSerial.print(("\n시작하려면 어떤 키든 눌러주세요...")); clearInput(); }
      state++;
      break;
    }
    case 1CS.read(); state++; break// 센서 값을 읽기 시작합니다
    case 2:{ // 값을 읽어 들일 때까지 기다립니다
      if(CS.available()){
        switch(valType){
          case BLACK_CALCS.getRaw(&sdBlack); CS.setDarkCal(&sdBlack);  break;
          case WHITE_CALCS.getRaw(&sdWhite); CS.setWhiteCal(&sdWhite); break;
          case READ_VAL:
          case LEARN_VAL:{
            CS.getRGB(&rgb);
            Serial.print(("\nRGB["));
            Serial.print(rgb.value[TCS230_RGB_R]); Serial.print((","));
            Serial.print(rgb.value[TCS230_RGB_G]); Serial.print((","));
            Serial.print(rgb.value[TCS230_RGB_B]); Serial.print(("]"));
            break;
          }
        }
        state++;
        break;
      }
    }
    defaultstate=0break// reset fsm
  }
  return(state);
}
//
uint8_t colorMatch(colorData *rgb){
  int32_t d,v,minV=999999L;
  uint8_t minI;
  for(uint8_t i=0;i<ARRAY_SIZE(ct);i++){
    v=0;
    for(uint8_t j=0;j<RGB_SIZE;j++){ d=ct[i].rgb.value[j]-rgb->value[j]; v+=(d*d); }
    if(v<minV){ minV=vminI=i; }
    if(v==0)break;
  }
  return(minI);
}
//
void loop(){
  static uint8_t runState=0,readState=0;
  if(runflag){
    switch(runState){
      case 0readState=fsmReadValue(readState,READ_VAL); if(readState==0)runState++; break// 색의 RGB 값을 읽어들입니다
      case 1:{ // 가까운 색을 찾아냅니다:
        uint8_t i=colorMatch(&rgb);
        Serial.print(("\n가장 가까운 색은 ")); Serial.print(ct[i].name); Serial.print(("입니다"));
        if     (!strcmp(ct[i].name,"빨간색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"주황색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"노란색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"초록색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"파란색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"남색"  )){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"보라색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"검정색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"하얀색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"분홍색")){ mp3_play(1); }
        runState++;
        for(int i=0;i<100;i++){ delay(30); if(!runflag)break; }
        break;
      }
      defaultrunState=0;
    }
  }
}

 

  attachInterrupt(digitalPinToInterrupt(interruptPin1),toggle,FALLING); // CHANGE
인터럽트 종류 변경

 

        if     (!strcmp(ct[i].name,"빨간색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"주황색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"노란색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"초록색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"파란색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"남색"  )){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"보라색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"검정색")){ mp3_play(0); }
        else if(!strcmp(ct[i].name,"하얀색")){ mp3_play(1); }
        else if(!strcmp(ct[i].name,"분홍색")){ mp3_play(1); }
100ms 딜레이 제거

 

        for(int i=0;i<100;i++){ delay(30); if(!runflag)break; }
3000ms 딜레이를 for문으로 나눠서 실행하고
runflag=0 이면 딜레이 도중에 빠져나와서 응답시간을 빠르게 함

댓글 0

조회수 46

등록된 댓글이 없습니다.

아두이노HOME > 아두이노 > 전체 목록

아두이노 목록
제목 작성자 작성일 조회
315 아두이노 master님 도와주세요! 새글첨부파일 누멍쓰 18-10-21 13
답변 답변글 답변 : master님 도와주세요! 새글 master 18-10-21 11
313 아두이노 아두이노 드론에 카메라 기능을 추가하고싶어요 새글 호이히우 18-10-20 6
312 아두이노 밑에 두더지잡기 수정 부탁 드린것에 질문 있습니다. 새글 냉냉냥성냥 18-10-20 10
답변 답변글 답변 : 밑에 두더지잡기 수정 부탁 드린것에 질문 있습니다. 댓글[1] 새글 master 18-10-20 12
310 아두이노 아두이노 두더지 잡기 인데 문제가 있어서 수정좀 부탁 드립니다. 댓글[1] 냉냉냥성냥 18-10-20 15
답변 답변글 답변 : 아두이노 두더지 잡기 인데 문제가 있어서 수정좀 부탁 드립니다. master 18-10-20 8
답변 답변글 답변 : 아두이노 두더지 잡기 인데 문제가 있어서 수정좀 부탁 드립니다. 첨부파일 냉냉냥성냥 18-10-20 8
답변 답변글 답변 : 답변 : 아두이노 두더지 잡기 인데 문제가 있어서 수정좀 부탁 드립니다. 댓글[1] master 18-10-20 13
306 아두이노 작동 중인 팬모터를 블루투스와 연결된 앱으로 RPM 조절하는 코드를 추가해야하는데요. RobustWalKeR 18-10-19 11
답변 답변글 답변 : 작동 중인 팬모터를 블루투스와 연결된 앱으로 RPM 조절하는 코드를 추가해야하는데요. master 18-10-19 9
304 아두이노 master님 rc카 적외선센서 추가 질문 해도될까요? ㅠㅠ 윤재 18-10-19 13
답변 답변글 답변 : master님 rc카 적외선센서 추가 질문 해도될까요? ㅠㅠ 댓글[2] master 18-10-19 17
답변 답변글 답변 : 답변 : master님 rc카 적외선센서 추가 질문 해도될까요? ㅠㅠ 댓글[7] 새글 master 10:40 6
301 아두이노 앱인벤터 스크린마다 블루투스 댓글[1] intoo07 18-10-19 18
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017