[마이크로 프로세서] IR 통신

이현준·2020년 11월 26일
0
post-thumbnail

IR 통신 - RGB LED

회로

https://www.tinkercad.com/things/a2yGAWsDsCJ-ir-rgb-led/editel

소스코드

#include <IRremote.h>

const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
unsigned long lastValue = 0;

IRrecv irrecv(5);
decode_results results;


void setup()
{
  irrecv.enableIRIn();
  pinMode(RED_PIN,OUTPUT);
  pinMode(GREEN_PIN,OUTPUT);
  pinMode(BLUE_PIN,OUTPUT);
    
  Serial.begin(9600);
  
}

void loop()
{
  
  if(irrecv.decode(&results)){
    Serial.println(results.value, HEX);
    //계속 누르고 있을 때가 0xFFFFFFF이다.
    if(results.value==0xFFFFFFF){
      results.value==lastValue;
    }
    Serial.println(lastValue);
    if(results.value==0xFD30CF)
      printRGB(255, 100, 180);
    else if(results.value==0xFD08F7)
      printRGB(0, 255, 255);
    else if(results.value==0xFD8877)
      printRGB(0, 255, 0);
    else
      printRGB(0, 0, 0);
      
      
      delay(30);
      irrecv.resume(); //다음 값
  }
}

void printRGB(int red, int green, int blue){
  analogWrite(RED_PIN, red);
  analogWrite(GREEN_PIN, green);
  analogWrite(BLUE_PIN, blue);
}

IR 통신 - 서브 모터

회로

https://www.tinkercad.com/things/254frELzuMV-ir-/editel

소스 코드

#include <Servo.h>
#include <IRremote.h> 

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

Servo myservo;

void setup(){
  Serial.begin(9600); 
  irrecv.enableIRIn();   
}
void loop(){
    if (irrecv.decode(&results)) 
  {
    switch (results.value)
    {
      case 0xFD00FF:
  		myservo.attach(9);
        Serial.println("Start");
        break;
      case 0xFD609F:
		myservo.write(360);
		Serial.println("Clockwise");
        break;
      case 0xFD20DF:
		myservo.write(-360);
		Serial.println("Counter Clockwise");
        break; 
      default:
        Serial.print("Unrecognized code received: 0x");
        Serial.println(results.value, HEX);
        break;        
    }    
    irrecv.resume(); //다음값
  }
}

0개의 댓글