아두이노 > 답변 : 다시 인터럽트 질문드립니다~~

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


▼ BASIC4MCU 후원업체 최신 정보 ▼

▲ BASIC4MCU 후원업체 최신 정보 ▲

BASIC4MCU | 아두이노 | 아두이노 | 답변 : 다시 인터럽트 질문드립니다~~

페이지 정보

작성자 master 작성일2018-10-09 07:17 조회36회 댓글0건

본문

	

 

// DateTime : 2018-10-09 오전 7:22:12
// by Ok-Hyun Park
#include <MD_TCS230.h>
#include <FreqCount.h>
#include <SoftwareSerial.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
#define interruptPin1 3
MD_TCS230 CS(S2_OUT,S3_OUT);
SoftwareSerial mySerial(10,11);
//
colorData rgb;
uint8_t modeOp='M',ctIndex,runState=0,readState=0;
char runflag=1,stopflag=0;
unsigned long time=0;
//
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);
}
//
char getChar(){ while(Serial.available()==0); return(toupper(Serial.read())); }
//
void clearInput(){ while(Serial.read()!=-1); }
//
void toggle(){
  runflag^=1;
  if(runflag)stopflag=1;
}
//
char *readASCII(uint8_t size){
  #define BUF_SIZE(9+1)
  static char s[BUF_SIZE]; uint8_t i=0char c;
  s[0]='\0'size--;
  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,readCountstatic 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_VALSerial.print(("색 맞추기")); break;
        case LEARN_VALSerial.print(ct[ctIndex].name); break;
        defaultSerial.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_VALcase 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 duint32_t v,minV=999999Luint8_t minI;
  for(uint8_t i=0i<ARRAY_SIZE(ct); i++){
    v=0;
    for(uint8_t j=0j<RGB_SIZEj++){ 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(){
  if(runflag){
    if(stopflag){ mp3_play(2); stopflag=0; }
    //
    switch(runState){
      case 0// 색의 RGB 값을 읽어들입니다
      readState=fsmReadValue(readState,READ_VAL);
      if(readState==0)runState++;
      break;
      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=0i<100i++){ delay(30); if(!runflag)break; }
        break;
      }
      defaultrunState=0;
    }
  }
}

 

이 코드로 돌려보세요

 

댓글 0

조회수 36

등록된 댓글이 없습니다.

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

아두이노 목록
제목 작성자 작성일 조회
315 아두이노 master님 도와주세요! 새글첨부파일 누멍쓰 18-10-21 12
답변 답변글 답변 : 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 12
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카 적외선센서 추가 질문 해도될까요? ㅠㅠ 댓글[6] 새글 master 10:40 4
301 아두이노 앱인벤터 스크린마다 블루투스 댓글[1] intoo07 18-10-19 18
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017