BASIC4MCU | 질문게시판 | 답변 : 아두이노 도트매트릭스와 적외선리모컨
페이지 정보
작성자 master 작성일2022-12-04 15:40 조회141회 댓글0건본문
#include <IRremote.h>
int RECV_PIN=A4;
IRrecv irrecv(RECV_PIN);
decode_results results;
//
int x_axis[]={A0,12,A2,13,5,A3,7,2};
int y_axis[]={9,8,4,A1,3,10,11,6};
//
byte nemo[8][8]={
{0,0,0,0,0,0,0,0},{0,1,1,1,1,1,1,0},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0},{0,1,1,1,1,1,1,0},{0,0,0,0,0,0,0,0},
};
byte morae[]={B00000000,B01111110,B00100100,B00011000,B00011000,B00100100,B01111110,B00000000};
byte won[] ={B00000000,B00111100,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000};
//
int mode=0;
//
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
for(int i=0;i<8;++i){
pinMode(y_axis[i],OUTPUT); digitalWrite(y_axis[i],HIGH);
pinMode(x_axis[i],OUTPUT);
}
}
//
void loop(){
if(irrecv.decode(&results)){
Serial.println(results.value,HEX);
switch(results.value){
case 0xFF30CF:mode=1; break;
case 0xFF18E7:mode=2; break;
case 0xFF7A85:mode=3; break;
}
irrecv.resume();
}
if(mode==1){ show(nemo[8][8],1000); }
if(mode==2){ show(morae,1000); }
if(mode==3){ show(won,1000); }
}
//
void show(byte *image,unsigned long duration){
unsigned long start=millis();
while(start+duration>millis()){
for(int x=0;x<8;++x){
digitalWrite(x_axis[x],HIGH);
for(int y=0;y<8;++y){
boolean pixel=bitRead(image[x],y);
if(pixel==1)digitalWrite(y_axis[y],LOW);
delayMicroseconds(300); digitalWrite(y_axis[y],HIGH);
}
digitalWrite(x_axis[x],LOW);
}
}
}
댓글 0
조회수 141등록된 댓글이 없습니다.