[아두이노] 3x3x3 CUBE LED 패턴 놀이

IOT/아두이노|2019. 3. 25. 09:00

[아두이노] 3x3x3 CUBE LED 패턴 놀이 



3x3x3 CUBE LED로 한주를 그냥 보내 버렸네요. LED 제어에 가장 재밌는 부분이라서 설명해야 할 것이 산더미 인데 더이상 했다가는 너무 한 주제로 무리한 것 같아서 다음에 비슷한 주제 나오면 또 신나게 달려볼까 합니다. 주말이라서 오늘은 편하게 휴식하는 맘으로 지난시간에 완성한 함수를 이용해서 패턴만 만들어서 재밌게 표현하고 놀았습니다. 위에 링크된 공개된 회로도를 여러분들의 계정에 복사하셔서 패턴만 워드나 기타 문서 편집기에서 표로 만들어서 표현하고 싶은 패턴을 색칠하시고 패턴을 완성하시면 그걸 시뮬레이터로 테스트 해보세요. 그냥 오늘은 표로 책실하는 놀이나 하고 그 결과를 시뮬레이터로만 돌려 보면 휴식을 취합니다.

1. 3x3x3 CUBE LED 회로도 구성


  • 준비물 : Red, Blue, Green LED 각각 9개, 저항 220옴 3개, 아두이노우노
  • 내용 : 3x3x3 CUBE LED 형태를 표현하자.


완성 좀 더 그럴싸 하게 표현하려고 좀 노력했네요. 일자모양의 LED를 제어하니깐 느낌이 안 살고해서 큐브 모양을 한번 제대로 보여드리기 위해서 최대한 큐브모양에 가깝게 표현 했네요.

2. 패턴 만들기





위 표를 책칠한 위치의 자리를 잘 생각하셔서 2진수로 표현하고 그 것을 여기다 에 올리면 너무 길어질 것 같아서 10진수로 다시 표현했네요.

unsigned int layerPattern1[6] ={325,170,16,341,186,511}; //1층
unsigned int layerPattern2[6] ={7,56,448,73,146,292}; //2층
unsigned int layerPattern3[6] ={273,146,84,56,63,511}; //3층

세줄로 위 표를 색칠한 패턴을 완성했습니다.


3. 코드 수정


  • layerPattern1[],layerPattern2[],layerPattern2[] 이부분은 패턴이 저장된 배열변수로 베이스 소스에서 이부분만 수정

  • int m_pattern = 6; : 패턴수가 6개라서 6으로 수정

  • int m_delay[9] ={30,30,30,30,30,30}; //유지시간은 패턴 6개이고 30이라는 시간만큼 유지

끝! 지난시간의 소스에서 이부분만 수정하면 나머지 그대로 사용하시면 됩니다. 즉, 3x3x3 CUBE LED은 위 세개만 변경하시면 원하는 패턴을 다 만들 수 있습니다.


[완성 소스]

int layer[3] = {A0,A1,A2};
int room[9] = {2,3,4,5,6,7,8,9,10};
int m_layer = 3;  // 층 수
int m_room = 9; // 호실 수


//패턴 정수로 표현
unsigned int layerPattern1[6] ={325,170,16,341,186,511}; //1층
unsigned int layerPattern2[6] ={7,56,448,73,146,292}; //2층
unsigned int layerPattern3[6] ={273,146,84,56,63,511}; //3층

int m_pattern = 6; //패턴수
int m_delay[9] ={30,30,30,30,30,30}; //패턴유지시간

void setup()
{  
  for(int i=0;i<m_layer;i++){
    pinMode(layer[i], OUTPUT); // 층 선언
    digitalWrite(layer[i], HIGH);  // 각층 닫기
  }
  
  for(int i=0;i<m_room;i++){
    pinMode(room[i], OUTPUT); //호실 선언
  }
}
void loop()
{
  for(int i=0;i<m_pattern;i++){  //순차적으로 패턴수만큼 동작
    for(int j=0;j<m_delay[i];j++){  //m_delay 시간만큼 해당 패턴을 유지한다.
      LEDSetting(layer[0], layerPattern1[i]);  //1층 i번째 패턴        
      LEDSetting(layer[1], layerPattern2[i]);  //2층 i번째 패턴        
      LEDSetting(layer[2], layerPattern3[i]);  //3층 i번째 패턴        
    }  
  }   
}    
void LEDSetting(int layer, unsigned int state){
  digitalWrite(layer, LOW); //층 개방
  for(int i=0;i<9;i++){    
    digitalWrite(room[i],bitRead(state, i)); //호실 개방     
  }
  delay(5);
  for(int i=0;i<9;i++){     
    digitalWrite(room[i], LOW);   //호실 닫힘   
  }
  digitalWrite(layer, HIGH); //층 닫힘    
}

4. 결과


[ 가상시뮬레이터 결과 ]
가상시뮬레이터로 돌리니깐 느낌이 아직도 잘 안사네요. 실제 제작한분 있으면 거기에 이 소스를 대입하면 좀 화려할 듯 싶네요.



마무리


주말이라서 새로운 주제로 나가기 좀 그래서 휴식하는 맘으로 지난시간에 완성한 소스에서 재밌는 패턴을 만들어서 시뮬레이션하는걸로 끝냈습니다.

사실 주말에 Steem API가 땡겨서 맨땅에 해당 하면서 javascript로 데이터를 불러오는 것 까지는 성공했는데 함수들을 정확히 다 이해를 못해서 구글 검색을 통해 예제만 신나게 찾고 있네요. 함수 래퍼런스가 너무 부실해서 C언어 지식으로 대충 때려 맞추고 있네요. 라즈베리파이에 파이썬 3.5가 깔려서 Steem 라이브러리를 설치하고 정보 불러오는 것 까지도 성공했는데 파이썬으로 접근하는 함수나 명령문들이 아직은 자료가 부족해서 기본정보만 접근하는 것만 성공하고 때려치우고 javascript로 공부하느라 아두이노를 잠시 주말은 외도하고 간단히 패턴 놀이로 포스팅 합니다.


댓글()