아두이노 프로그래밍

by 고학능 | 2018-06-17 18:17
3d 프린터 3d 프린팅 무드등 아두이노 앱인벤터2

아두이노 프로 마이크로를 사용했습니다.

작은 아두이노는 나노도 있는데 굳이 프로 마이크로를 사용한 이유는 

프로마이크로가 안드로이드 폰에서 사용하는 5핀을 사용하기 때문입니다. 안드로이드 폰 뿐만 아니라 여러 기기에서 사용되서 많은 사람들이 가지고 있습니다. 혹시나 선을 잃어버려도 쉽게 구할 수 있기 때문입니다.


참고로 아두이노 프로 마이크로는 아두이노 레오나르도 기반 보드입니다. 그래서 업로드할 때 프로 마이크로가 없스면 레오나르도를 선택하면 됩니다.



여기서 교육적 요소를 뽑자면 

1. 프로토콜 - 데이터를 주고 받을 땐 약속을 한다는 점.

2. 함수 만들기

3. 문자열

4. 각종 프로그래밍 구조 입니다.


네오픽셀과 블루투스 모듈을 사용하기에 네오픽셀 라이브러리, 소프트웨어시리얼 라이브러리(기본 내장)가 필요합니다.

특징은 다음과 같습니다.

1. 빨간색, 초록색, 파란색 조합으로 다양한 색을 만듭니다.

2. 8개 LED on/off를 각자 컨트롤합니다. 단 색은 동일합니다.

3. 블루투스로 명령을 받는데, 명령 받는 형태는 밝기를 포함한 명령어와 포함하지 않은 명령어 형태입니다.


4. 받은 문자 하나하나를 문자열로 모아줍니다.      ~         String += character

5. 모은 문자열을 1~8번 문자를 각각 변수에 저장합니다.      ~          String.charAt(0~7)

6. 각각 변수는 조건문을 붙여 각각 LED on/off 하도록 합니다.

7. 맨 마지막에 문자열이 8개가 되면 리셋을 합니다.  

// 고학능이 만들었습니다. 2018-05-22 완성
//  보드는 아두이노 프로 마이크로입니다.
//  네오픽셀 8개 LED 달린 모델을 사용하고
//  블루투스 모듈은 hc-06입니다.
//  케이스는 모델링 파일 첨부했으니 3D 프린터로 인쇄하시면 됩니다.
//  케이스에 아크릴은 넣는 구멍은 가로x세로 55x3입니다.
//  자세한 제작 방법은 makewith.co에 탑재할 예정입니다.
  

#include <Adafruit_NeoPixel.h>
#define PIN            10
#define NUMPIXELS      8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#include <SoftwareSerial.h>
SoftwareSerial bluetooth(16, 15);
char reading, charat1, charat2, charat3, charat4, charat5, charat6, charat7, charat8 ;
String Reading;
int Red, Green, Blue;

void setup() {
  // put your setup code here, to run once:
  pixels.begin(); // This initializes the NeoPixel library.
  Serial.begin(9600);
  bluetooth.begin(9600);
  pixels.setPixelColor(0, pixels.Color(100, 100, 100));
  pixels.setPixelColor(1, pixels.Color(100, 100, 100));
  pixels.setPixelColor(2, pixels.Color(100, 100, 100));
  pixels.setPixelColor(3, pixels.Color(100, 100, 100));
  pixels.setPixelColor(4, pixels.Color(100, 100, 100));
  pixels.setPixelColor(5, pixels.Color(100, 100, 100));
  pixels.setPixelColor(6, pixels.Color(100, 100, 100));
  pixels.setPixelColor(7, pixels.Color(100, 100, 100));
  pixels.show();
        
}

void loop() {
  receive();  // 문자열은 "[빈칸][R밝기][쉽표][G밝기][쉽표][B밝기][a/A][b/B][c/C][d/D][e/E][f/F][g/G][h/H]" 이런형식으로 보내야 함!!
              // 혹은 "[a/A][b/B][c/C][d/D][e/E][f/F][g/G][h/H]" 이런 형식으로 보내야 합니다.
  led_num();
  led_onoff();

  if(Reading.length() >= 8){
    Reading = "";
  }
  delay(1000);
}

void receive(){
  while(bluetooth.available()){
    reading = bluetooth.read();
    if(isWhitespace(reading)){
      Red = bluetooth.parseInt();
      Green = bluetooth.parseInt();
      Blue = bluetooth.parseInt();
   
    Serial.print(Red); Serial.print(" ");
    Serial.print(Green); Serial.print(" ");
    Serial.println(Blue);
    }else if(isAlpha(reading)){
      Reading += reading;
    }
  }   
}

void led_num(){
  charat1 = Reading.charAt(0);
  charat2 = Reading.charAt(1);
  charat3 = Reading.charAt(2);
  charat4 = Reading.charAt(3);
  charat5 = Reading.charAt(4);
  charat6 = Reading.charAt(5);
  charat7 = Reading.charAt(6);
  charat8 = Reading.charAt(7);  
}

void led_onoff(){
  if(charat1 == 'a'){
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));
  }else if(charat1 == 'A'){
    pixels.setPixelColor(0, pixels.Color(Red, Green, Blue));    
  }
  if(charat2 == 'b'){
    pixels.setPixelColor(1, pixels.Color(0, 0, 0));
  }else if(charat2 == 'B'){
    pixels.setPixelColor(1, pixels.Color(Red, Green, Blue));    
  }
  if(charat3 == 'c'){
    pixels.setPixelColor(2, pixels.Color(0, 0, 0));
  }else if(charat3 == 'C'){
    pixels.setPixelColor(2, pixels.Color(Red, Green, Blue));    
  }
  if(charat4 == 'd'){
    pixels.setPixelColor(3, pixels.Color(0, 0, 0));
  }else if(charat4 == 'D'){
    pixels.setPixelColor(3, pixels.Color(Red, Green, Blue));    
  }
  if(charat5 == 'e'){
    pixels.setPixelColor(4, pixels.Color(0, 0, 0));
  }else if(charat5 == 'E'){
    pixels.setPixelColor(4, pixels.Color(Red, Green, Blue));    
  }if(charat6 == 'f'){
    pixels.setPixelColor(5, pixels.Color(0, 0, 0));
  }else if(charat6 == 'F'){
    pixels.setPixelColor(5, pixels.Color(Red, Green, Blue));    
  }
  if(charat7 == 'g'){
    pixels.setPixelColor(6, pixels.Color(0, 0, 0));
  }else if(charat7 == 'G'){
    pixels.setPixelColor(6, pixels.Color(Red, Green, Blue));    
  }
  if(charat8 == 'h'){
    pixels.setPixelColor(7, pixels.Color(0, 0, 0));
  }else if(charat8 == 'H'){
    pixels.setPixelColor(7, pixels.Color(Red, Green, Blue));    
  }
  pixels.show();
}

댓글 0

MADE BY

고학능

3d모델링, 아두이노, 전기회로 구성