극한의 아두이노 DIY생활 - NFC RC카11

in kr-dev 커뮤니티2 years ago

안녕하세요. 오늘도 고통받는 개발자 Jimae입니다.

자 오늘도 저번에 이어서 글을 이어나가 보도록 하겠습니다.

    case CHANGELED:     // LED 변경 및 보낼데이터 정하기
                   rcCarID = LEDDataChange(nfcNumber);  //NFC 값 14 = 1,15 = 2,16 = 3,17 = 4 의 값으로 나와서 저장

                   LEDSelect(rcCarID);  // LED 변경

                   answerData[0] = rcCarID;   // 보낼데이터 ID값 저장
                   answerData[1] = 0xAA;      // 특수코드
                   answerData[2] = COMPLETE;  // 확인명령어 

                   programStep = COMPLETEANSWER;  // 컨트롤러로 데이터 보내는 구역으로 전환
                  
                   break;

NFC를 읽어 RC카의 번호를 매기고 LED를 변경합니다.

unsigned char LEDDataChange(unsigned char nfcNumber)    // LED 및 ID 데이터를 변경 14 = 1, 15 = 2, 16 = 3, 17 = 4
{
  unsigned char dataBuffer = 0;
  if(nfcNumber == 14) dataBuffer = 1;
  else if(nfcNumber == 15) dataBuffer = 2;
  else if(nfcNumber == 16) dataBuffer = 3;
  else if(nfcNumber == 17) dataBuffer = 4;
  else dataBuffer = 0;

  return dataBuffer;
}

void LEDSelect(unsigned char ledNumber)   // LED 변경
{
  switch(ledNumber)
  {
    case 1: 
           digitalWrite(LEDRED, LOW);        
           digitalWrite(LEDYELLOW, LOW);    
           digitalWrite(LEDGREEN, LOW);    
           digitalWrite(LEDBLUE, HIGH);    
           break;
    case 2:           
           digitalWrite(LEDRED, LOW);        
           digitalWrite(LEDYELLOW, LOW);    
           digitalWrite(LEDGREEN, HIGH);    
           digitalWrite(LEDBLUE, LOW);       
           break;
    case 3:
           digitalWrite(LEDRED, LOW);        
           digitalWrite(LEDYELLOW, HIGH);    
           digitalWrite(LEDGREEN, LOW);    
           digitalWrite(LEDBLUE, LOW);   
           break;
    case 4:
           digitalWrite(LEDRED, HIGH);        
           digitalWrite(LEDYELLOW, LOW);    
           digitalWrite(LEDGREEN, LOW);    
           digitalWrite(LEDBLUE, LOW);    
           break;
    default:
           digitalWrite(LEDRED, LOW);        
           digitalWrite(LEDYELLOW, LOW);    
           digitalWrite(LEDGREEN, LOW); 
           digitalWrite(LEDBLUE, LOW);    
           break;      
  }
}

NFC의 번호를 보고 LED를 바꾸기 위해 번호를 매기는 함수 LEDDataChange() 이며

여기서 선택한 LED 번호를 이용하여 실제 LED를 바꾸는 함수가 LEDSelect() 함수 입니다.

                   answerData[0] = rcCarID;   // 보낼데이터 ID값 저장
                   answerData[1] = 0xAA;      // 특수코드
                   answerData[2] = COMPLETE;  // 확인명령어 

그다음 블루투스로 응답해줄 데이터를 구성을 미리 해놓습니다.

    case COMPLETEANSWER:      //블루투스 쪽 응답 
                        for(num = 0; num < 3; num++)
                        {
                          BTSerial.write(answerData[num]);    // 데이터 3개 보낸다

                          answerData[num] = 0;        // 보낸 데이터 초기화

                          commandBugffer[num] = 0;    // 들어온 데이터 초기화
                        }

                        programStep = COMMANDREAD;    // 다시 처음으로 명령어를 읽기위해 돌아감
                        
                        break;

그 다음 블루투스를 통해 아까 구성한 명령어를 보냅니다.

그리고 기존에 사용했던 변수들을 모두 초기화 시키죠.

이렇게 RC카의 ID 방식을 NFC 스티커를 읽어서 지정하는 방법과 블루투스를 통해 응답하는 방법까지

시나리오가 끝났습니다.

이것은 처음부터 전원이 켜진상태에서 중앙의 4대가 나란히 있었을때 처음 동작하는 시나리오입니다.

그다음은 이제 움직이는 시나리오에 대해 설명하도록 하겠습니다.

다들 좋은 하루 되세요.

극한의 아두이노 DIY생활 - NFC RC카1
극한의 아두이노 DIY생활 - NFC RC카2
극한의 아두이노 DIY생활 - NFC RC카3
극한의 아두이노 DIY생활 - NFC RC카4
극한의 아두이노 DIY생활 - NFC RC카5
극한의 아두이노 DIY생활 - NFC RC카6
극한의 아두이노 DIY생활 - NFC RC카7
극한의 아두이노 DIY생활 - NFC RC카8
극한의 아두이노 DIY생활 - NFC RC카9
극한의 아두이노 DIY생활 - NFC RC카10

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.