2012년 6월 26일 화요일

도트매트릭스(dot matrix) 제어 2

 
도트매트릭스(dot matrix) 제어 2
이전글 도트매트릭스(dot matrix) 제어 1: http://eskelt.tistory.com/30
도트매트릭스의 제어를 통해
센서의 입력을 받아 도트매트릭스에 표현해보자
도트매트릭스에 얼굴을 표현하고 마치 말하는 것같은 모습을... 
즉 sound센서의 입력을 받아 
센서값에 따른 얼굴모양이 바뀌도록하여
입을 움직이는 것 처럼 표현해보자.
기본적인 작동은 이전글을 참고하자.
일단 여러가지 얼굴모양을 만들어 배열하고
간단한 수식으로 센서값에 따라 얼굴모양을 선택할 수 있도록 한다.
스케치 소스
-----------------------------------------------------------------------------
/* 말하는 매트릭스*/
int clock = 2;  //74HC595의 클럭핀과 연결
int latch = 3;  //74HC595의 래치핀과 연결
int data = 4;  //74HC595의 데이터핀과 연결
int a;
int dataval[6][8]={
  {0x66,0x99,0x00,0x00,0x00,0x00,0x00,0x00},
  {0x66,0x99,0x00,0x00,0x18,0x00,0x00,0x00},
  {0x66,0x99,0x00,0x00,0x3c,0x24,0x18,0x00},
  {0x66,0x99,0x00,0x00,0x7e,0x42,0x3c,0x00},
  {0x66,0x99,0x00,0x00,0x3c,0x24,0x24,0x18},
  {0x66,0x99,0x00,0x00,0x7e,0x42,0x42,0x3c}};    //6개의 입모양이 다른 얼굴  
int scanval[8] ={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
void setup(){
  pinMode(clock, OUTPUT);
  pinMode(latch, OUTPUT);
  pinMode(data, OUTPUT);
  Serial.begin(9600);
}
void loop(){
  a = analogRead(A0)/150;   // 사운드 센서의 입력을 받아 값을 6단계로 표현하도록 계산
  if(a>5){a=5;}                    // 총 6개의 모습이므로 5를 넘지 않도록 함.
  for(int i=0; i<8; i++){
    digitalWrite(latch, LOW);   //래치를 내리고
    shiftOut(data,clock,LSBFIRST, scanval[i]); 
    shiftOut(data,clock,LSBFIRST, dataval[a][i]);         // 센서에서 계산된 a값을 통해 입모양 선택
    digitalWrite(latch, HIGH);   //래치를 올린다. 74HC595에서 데이터를  출력함
    delay(2);
    }
digitalWrite(latch, LOW);   
shiftOut(data,clock,MSBFIRST, 0x00); // 매트릭스를 끄는 시간을 줌
shiftOut(data,clock,MSBFIRST, 0x00); 
digitalWrite(latch, HIGH);
delay(3);
}
----------------------------------------------------------------------------------
작동영상
 
 
참조 : http://cafe.naver.com/arduinostory/6869  (카페 : 아두이노 스토리)

댓글 없음:

댓글 쓰기