본문 바로가기

Embedded/Arduino

LilyPad - Final

8-3 아기상어 + LED 4개

#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_G4  392
#define NOTE_A4  440

#define PIEZO_PIN 2

int ledArr[] = {11,10,9,3};
int ledSize = sizeof(ledArr)/sizeof(int);

//notes in the melody:
int melody[] = {
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,
  0,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,
  0,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,  
};

// note durations: 4 = quarter note, 8 = eighth note, etc
int noteDurations[] = {
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2,
  2, 
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2, 
  2, 
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2, 
};

void setup(){
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[i], OUTPUT);
  
  for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
    int noteDuration = 1000/noteDurations[thisNote];
    tone(PIEZO_PIN, melody[thisNote],noteDuration);
    ledON(melody[thisNote]);

    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    
    noTone(PIEZO_PIN); 
    ledOFF();
  }
}

void loop(){}
  
void ledON(int piezo_melody)
{ 
  if((piezo_melody == NOTE_E4) || (piezo_melody == NOTE_G4))
   digitalWrite(ledArr[0],HIGH);
  if(piezo_melody == NOTE_C4)
   digitalWrite(ledArr[1],HIGH);
  if((piezo_melody == NOTE_A4) || piezo_melody == NOTE_D4)
   digitalWrite(ledArr[2],HIGH);
  if(piezo_melody == NOTE_F4)
   digitalWrite(ledArr[3],HIGH);      
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
  }
}

 

8-2 아기상어 (소리만)

#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_G4  392
#define NOTE_A4  440

#define PIEZO_PIN 2

//notes in the melody:
int melody[] = {
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,
  0,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,
  0,
  NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
  NOTE_C4, NOTE_D4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4,  
};

// note durations: 4 = quarter note, 8 = eighth note, etc
int noteDurations[] = {
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2,
  2, 
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2, 
  2, 
  2, 2, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4,
  4, 4, 4, 4, 4, 8, 4, 8, 4, 4, 4, 2, 
};

void setup(){
  for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
    int noteDuration = 1000/noteDurations[thisNote];
    tone(PIEZO_PIN, melody[thisNote],noteDuration);

    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    
    noTone(PIEZO_PIN); 
  }
}

void loop(){}

 

8-1. 부저음계(학교종이 땡땡땡)에 맞춰 LED깜빡이기

#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_G4  392
#define NOTE_A4  440
 
#define PIEZO_PIN 2
 
int ledArr[] = {11,10,9,3};
int ledSize = sizeof(ledArr)/sizeof(int);
  
int melody[] = {
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, 
NOTE_G4, NOTE_G4, NOTE_E4,   
NOTE_G4, NOTE_G4, NOTE_E4, NOTE_E4,
NOTE_D4, 0,
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,
NOTE_G4, NOTE_G4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4,
NOTE_C4,0};
 
int noteDurations[] = {
1,1,1,1,
1,1,2,
1,1,1,1,
3,1,
1,1,1,1,
1,1,2,
1,1,1,1,
3,1};

void setup() {
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[i], OUTPUT);
  
  for (int thisNote = 0; thisNote < 26; thisNote++) {
    int noteDuration = 250 * noteDurations[thisNote];
    tone(PIEZO_PIN, melody[thisNote],noteDuration);
    ledON(melody[thisNote]);
      
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(PIEZO_PIN);
    ledOFF();
  }
}
void loop() {}
  
void ledON(int piezo_melody)
{ 
  if((piezo_melody == NOTE_C4) || (piezo_melody == NOTE_D4))
   digitalWrite(ledArr[0],HIGH);
  if(piezo_melody == NOTE_E4)
   digitalWrite(ledArr[1],HIGH);
  if(piezo_melody == NOTE_G4)
   digitalWrite(ledArr[2],HIGH);
  if(piezo_melody == NOTE_A4)
   digitalWrite(ledArr[3],HIGH);      
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
  }
}

 

8. 부저 음계에 맞춰 LED 깜빡이기

#define PIEZO_PIN 2
 
#define NOTE_C4  262
#define NOTE_G3  196
#define NOTE_A3  220
#define NOTE_B3  247
 
int ledArr[] = {11,10,9,3};
int ledSize = sizeof(ledArr)/sizeof(int);
  
int melody[] = {
  NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
 
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 8, 8, 4, 4, 4, 4, 4
};
  
void setup() {
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[i], OUTPUT);
  
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(PIEZO_PIN, melody[thisNote], noteDuration);
    ledON(melody[thisNote]);
 
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(PIEZO_PIN);
    ledOFF();
  }
}
  
void loop() {
  // no need to repeat the melody.
}
 
void ledON(int piezo_melody)
{ 
  if(piezo_melody == NOTE_C4)
   digitalWrite(ledArr[0],HIGH);
  if(piezo_melody == NOTE_G3)
   digitalWrite(ledArr[1],HIGH);
  if(piezo_melody == NOTE_A3)
   digitalWrite(ledArr[2],HIGH);
  if(piezo_melody == NOTE_B3)
   digitalWrite(ledArr[3],HIGH);      
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
  }
}

7. 포토센서값이 어두워지면 LED깜빡임 모드 변경

#define PIEZOPIN 2
 
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledCount = 0;
int rgbCount = 0;
int modeCount = 0;
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);

int flag = 0;
int THR = 100;

unsigned long previousTimeLed = millis();
long timeIntervalLed = 200;



void setup()
{
  for(int i=0; i<ledsize; i++)
    pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<rgbsize; i++){
    pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
  Serial.begin(9600);
}
 
void rgb_led(int n)
{
  if(rgbCount %2 == 1){
    if(n == 0){  // r+b = magenta
      digitalWrite(rgbArr[0],LOW);
      digitalWrite(rgbArr[1],HIGH);
      digitalWrite(rgbArr[2],LOW);
    }
    else if(n == 1){ //red
      digitalWrite(rgbArr[0],LOW);
      digitalWrite(rgbArr[1],HIGH);
      digitalWrite(rgbArr[2],HIGH);
    }
    else if(n == 2){ // blue
      digitalWrite(rgbArr[0],HIGH);
      digitalWrite(rgbArr[1],HIGH);
      digitalWrite(rgbArr[2],LOW);
    }
    else if(n == 3){ // green
      digitalWrite(rgbArr[0],HIGH);
      digitalWrite(rgbArr[1],LOW);
      digitalWrite(rgbArr[2],HIGH);
    }
    else if(n == 4){
      digitalWrite(rgbArr[0],LOW);
      digitalWrite(rgbArr[1],LOW);
      digitalWrite(rgbArr[2],LOW);
    }
  }
  else{
    digitalWrite(rgbArr[0],HIGH);
    digitalWrite(rgbArr[1],HIGH);
    digitalWrite(rgbArr[2],HIGH);
  }
  rgbCount ++;
}
 
void led_off()
{
  for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i], LOW);
}
 
void led_blink()
{
  if(ledCount%2 == 1){ 
    for(int i=0; i<ledsize; i++){
      digitalWrite(ledArr[i], HIGH);
    }
  }
  else{
    for(int i=0; i<ledsize; i++){
      digitalWrite(ledArr[i], LOW);
    }
  }
ledCount++;
}
 
void led_up2dn()
{
  int n = ledCount % (ledsize+1);
  if(n==0){
    for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i], LOW);
  }
  else{
    for(int i=0; i<ledsize; i++){
      if (i == (n-1))
        digitalWrite(ledArr[i], HIGH);
      else
        digitalWrite(ledArr[i], LOW);
    }
  }
  ledCount++;
}
 
void led_dn2up()
{
  int n = ledCount % (ledsize+1);
  if(n==0){
    for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i], LOW);
  }
  else{
    for(int i=ledsize-1; i>=0; i--){
      if (i == (ledsize-n))
        digitalWrite(ledArr[i], HIGH);  
      else
        digitalWrite(ledArr[i], LOW);  
    }
  }
 ledCount++;
}
 
void led_weighted_up2dn()
{
  int n = ledCount % (ledsize+1);
  if (n == 0)
    led_off();
  else
    digitalWrite(ledArr[n-1], HIGH);
  ledCount++;
}
 
void led_weighted_dn2up()
{
  int n = ledCount % (ledsize+1);
  if (n == 0)
    led_off();
  else
    digitalWrite(ledArr[ledsize-n], HIGH); 
  ledCount++;
}

void led_mode(int case_num)
{
  case_num = case_num % 5;
  if(case_num == 0){
    led_blink();
  }
  else if(case_num ==1){
    led_up2dn();
  }
  else if(case_num ==2){
    led_dn2up();
  }
  else if(case_num ==3){
    led_weighted_up2dn();
  }
  else{
    led_weighted_dn2up();
  }
  rgb_led(case_num);
}
 
void printValues(int sensorValue)
{
  Serial.print("flag : "); 
  Serial.print(flag); 
  Serial.print("  modeCount : "); 
  Serial.print(modeCount); 
  Serial.print("  sensorValue : "); 
  Serial.println(sensorValue); 
}
 
void loop()
{
  unsigned long currentTime = millis();
  int inputValue = analogRead(A2);
  printValues(inputValue);
  if (inputValue <= THR) {           
    if (flag == 0){                    
      flag = 1;
      modeCount++;
      ledCount = 0;
      printValues(inputValue);
    }
  }
  else {                            
    if (flag == 1) {
      flag = 0;           
      printValues(inputValue);
    }
  }
  // task 1
  if(currentTime - previousTimeLed > delayTime) {
    previousTimeLed = currentTime;
    led_mode(modeCount);
  }
  delay(100);                         
}

 

6. LED와 RGB LED 번갈아 깜빡이기

#define PIEZOPIN 2
 
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)

int redPin = A5;
int bluePin = A4;
int greenPin = A3;

int ledCount = 0;
int rgbCount = 0;
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
}

void rgb_led()
{
  int n = rgbCount%6; 
  if(n == 0){  // off
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(n == 1){ //red
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(n == 2){ // blue
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,LOW);
  }
  else if(n == 3){ // green
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,HIGH);
  }
  else if(n == 4){
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,LOW);
  }
  else{
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  rgbCount++;
}

void led_off()
{
  for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i], LOW);
  
}
 
void led_blink(int n)
{
  if(n%2 == 0){ 
    for(int i=0; i<ledsize; i++){
      digitalWrite(ledArr[i], HIGH);
    }
  }
  else{
    for(int i=0; i<ledsize; i++){
      digitalWrite(ledArr[i], LOW);
    }
  }
}
 
void led_up2dn(int n)
{
  n = n % (ledsize+1);
  for(int i =0; i<ledsize; i++){
    if (i == n)
      digitalWrite(ledArr[i], HIGH);
    else
      digitalWrite(ledArr[i], LOW);
  }
}
 
void led_dn2up(int n)
{
  n = n % (ledsize+1);
  for(int i=ledsize-1; i>=0; i--){
    if (i == (ledsize-1-n))
      digitalWrite(ledArr[i], HIGH);  
    else
      digitalWrite(ledArr[i], LOW);  
  }
  	
}
 
void led_weighted_up2dn(int n)
{
  n = n % (ledsize+1);
  if (n == ledsize)
    led_off();
  else
  	digitalWrite(ledArr[n], HIGH);
}
 
void led_weighted_dn2up(int n)
{
  n = n % (ledsize+1);
  if (n == ledsize)
    led_off();
  else
  	digitalWrite(ledArr[ledsize-1-n], HIGH); 
}
 
void loop()
{
  
  for(int i=0; i<4; i++){
  	led_blink(ledCount);
    rgb_led();
  	delay(delayTime);
    ledCount++;
  }
  ledCount = 0;
  for(int i=0; i<ledsize+1; i++){
    led_up2dn(ledCount);
    rgb_led();
    delay(delayTime);
    ledCount ++;
  }
  
  for(int i=0; i<ledsize+1; i++){
    led_dn2up(ledCount);
    rgb_led();
    delay(delayTime);
    ledCount ++;
  }
  for(int i=0; i<ledsize+1; i++){
    led_weighted_up2dn(ledCount);
    rgb_led();
    delay(delayTime);
    ledCount ++;
  }
  for(int i=0; i<ledsize+1; i++){
    led_weighted_dn2up(ledCount);
    rgb_led();
    delay(delayTime);
    ledCount ++;
  }
}

 

5-1.  포토센서값에 따라 부저동작 : 노래2곡 번갈아 재생

#define NOTE_C7  2093
#define NOTE_D7  2349
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_G7  3136
#define NOTE_A7  3520
#define NOTE_B7  3951
 
#define PIEZOPIN 2

int THR = 100;

int flag = 0;
int ledCount = 0;
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
  Serial.begin(9600);
}

void melody_1()
{
  //음계 데이터 (24개)
  int melody[] = {NOTE_G7,NOTE_G7,NOTE_A7,NOTE_A7,NOTE_G7,
                  NOTE_G7,NOTE_E7,NOTE_G7,NOTE_G7,NOTE_E7,
                  NOTE_E7,NOTE_D7,NOTE_G7,NOTE_G7,NOTE_A7,
                  NOTE_A7,NOTE_G7,NOTE_G7,NOTE_E7,NOTE_G7,
                  NOTE_E7,NOTE_D7,NOTE_E7,NOTE_C7};
  //음의길이, 4:4분음표, 2:2분음표
  int noteDurations[] = {4,4,4,4,4,4,2,4,4,4,4,1,4,4,4,4,4,4,2,4,4,4,4,1};
 

  for (int thisNote = 0; thisNote < 24; thisNote++)
  {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(PIEZOPIN, melody[thisNote], noteDuration); //소리를 낸다.
    int pauseBetweenNotes = noteDuration * 1.30;      //delay 계산식
    delay(pauseBetweenNotes);                         //delay
    noTone(PIEZOPIN);                               //대상핀 출력 중단
  }
}


 
char notes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "; 
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
 
void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(PIEZOPIN, HIGH);
    delayMicroseconds(tone);
    digitalWrite(PIEZOPIN, LOW);
    delayMicroseconds(tone);
  }
}
 
void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}
 
void melody_2() {
  int length = 15;
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo);
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
    delay(tempo / 2); 
  }
}

 
void loop()
{
  int inputValue = analogRead(A2);
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  if(inputValue <= THR){
    melody_2();
  }
  else{
    noTone(PIEZOPIN);
    Serial.println("");
  }
  if (inputValue <= THR) {           
    if (flag == 0){                    
      flag = 1;
      ledCount++;
      ledCount = ledCount % 2;
      if(ledCount == 0){
        melody_1();
        Serial.println(" => Melody #1");

      }
      if(ledCount == 1){
        melody_2();
        Serial.println(" => Melody #1");
      }
    }
  }
  else {                            
    if (flag == 1) {
      flag = 0;           
    }
  }
  delay(100);                 
  
}

 

 

5.  포토센서값에 따라 부저동작

#define NOTE_C7  2093
#define NOTE_D7  2349
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_G7  3136
#define NOTE_A7  3520
#define NOTE_B7  3951
 
#define PIEZOPIN 2

int THR = 100;
 
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
  Serial.begin(9600);
}

void melody_1()
{
  //음계 데이터 (24개)
  int melody[] = {NOTE_G7,NOTE_G7,NOTE_A7,NOTE_A7,NOTE_G7,
                  NOTE_G7,NOTE_E7,NOTE_G7,NOTE_G7,NOTE_E7,
                  NOTE_E7,NOTE_D7,NOTE_G7,NOTE_G7,NOTE_A7,
                  NOTE_A7,NOTE_G7,NOTE_G7,NOTE_E7,NOTE_G7,
                  NOTE_E7,NOTE_D7,NOTE_E7,NOTE_C7};
  //음의길이, 4:4분음표, 2:2분음표
  int noteDurations[] = {4,4,4,4,4,4,2,4,4,4,4,1,4,4,4,4,4,4,2,4,4,4,4,1};
 

  for (int thisNote = 0; thisNote < 24; thisNote++)
  {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(PIEZOPIN, melody[thisNote], noteDuration); //소리를 낸다.
    int pauseBetweenNotes = noteDuration * 1.30;      //delay 계산식
    delay(pauseBetweenNotes);                         //delay
    noTone(PIEZOPIN);                               //대상핀 출력 중단
  }
}

 
void loop()
{
  int inputValue = analogRead(A2);
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  if(inputValue <= THR){
    melody_1();
    Serial.println(" Melody ON");
  }
  else{
    noTone(PIEZOPIN);
    Serial.println("");
  }
}

 

4-1 포토센서값에 따라 RGB LED색상변경 - 고정값

//코드시작
int redPin = A5;
int bluePin = A4;
int greenPin = A3;

int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int ledsize = sizeof(ledArr)/ sizeof(int);


void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  
  pinMode(A2,INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  Serial.begin(9600);
}

void rgb_led(int level)
{
  if(level == 0){  // off
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 1){ //red
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 2){ // blue
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,LOW);
  }
  else if(level == 3){ // green
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 4){
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,HIGH);
  }
  else{
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,LOW);
  }
}

 
void loop()
{
  int inputValue = analogRead(A2);
  int level = map(inputValue, 0, 250, 0, 4);
  
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  Serial.print(" level : ");
  Serial.println(level);
  rgb_led(level);
}

4. Photo 센서값에 따라 RGB LED 색상 변경

//코드시작
int redPin = A5;
int bluePin = A4;
int greenPin = A3;

int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int ledsize = sizeof(ledArr)/ sizeof(int);
int sensor_min = 1023;
int sensor_max = 0;


void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  
  pinMode(A2,INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  Serial.begin(9600);
}

void rgb_led(int level)
{
  if(level == 0){  // off
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 1){ //red
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 2){ // blue
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,LOW);
  }
  else if(level == 3){ // green
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,HIGH);
  }
  else if(level == 4){
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,LOW);
  }
  else{
    digitalWrite(redPin,HIGH);
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,HIGH);
  }
}

 
void loop()
{
  int inputValue = analogRead(A2);
  sensor_min = inputValue < sensor_min ? inputValue : sensor_min;
  sensor_max = inputValue > sensor_max ? inputValue : sensor_max;
  
  int level = map(inputValue, sensor_min, sensor_max, 0, 4);
  
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  Serial.print(" level : ");
  Serial.println(level);
  rgb_led(level);
}

 

3. Photo센서 값 읽어오기

void setup()
{
  pinMode(A2,INPUT);
  Serial.begin(9600);
}
 
void loop()
{
  int inputValue = analogRead(A2);
  Serial.print("Sensor : ");
  Serial.println(inputValue);
}

3-1. 센서값이 설정값(THR = 100)보다 작으면 LED 4개가 켜짐

int THR = 100;              // 이부분 숫자 변경
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int ledsize = sizeof(ledArr)/ sizeof(int);

void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  pinMode(A2,INPUT);
  Serial.begin(9600);
}
 
void loop()
{
  int inputValue = analogRead(A2);
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  if(inputValue <= THR){
    for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i],HIGH);
    Serial.println(" SENSOR ON");
  }
  else{
    for(int i=0; i<ledsize; i++)
      digitalWrite(ledArr[i],LOW);
    Serial.println("");
  }
}

 

 

0. 전체 회로도

주황색 부분 2층으로 실이 서로 연결되지 않게....

 

1. LED 4개 Blink

#define PIEZOPIN 2

int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
}
 
void led_blink()
{
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], HIGH);
  }
  delay(delayTime);
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
  
}
 
void loop()
{
  led_blink();
}

 

2. LED 위에서 아래로 깜빡이기

 

#define PIEZOPIN 2

int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
}
 
void led_blink()
{
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], HIGH);
  }
  delay(delayTime);
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}

void led_up2dn()
{
  for(int i=0; i<ledsize; i++){
   digitalWrite(ledArr[i], HIGH);
   delay(delayTime);
   digitalWrite(ledArr[i], LOW);
   delay(delayTime);
  }
}
 
void led_dn2up()
{
  for(int i=ledsize-1; i>=0; i--){
   digitalWrite(ledArr[i], HIGH);
   delay(delayTime);
   digitalWrite(ledArr[i], LOW);
   delay(delayTime);
  }
}
 
void led_weighted_up2dn()
{
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], HIGH);
    delay(delayTime);
  }
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}
 
void led_weighted_dn2up()
{
  for(int i=ledsize; i>=0; i--){
    digitalWrite(ledArr[i], HIGH);
    delay(delayTime);
  }
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}
 
void loop()
{
  led_blink();
  led_up2dn();
}

 

3. LED 깜빡이기: 위에서 아래로 -> 아래에서위로 -> 누적해서 아래로 -> 누적해서 위로

#define PIEZOPIN 2

int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int rgbArr[] = {A5,A3,A4};  // R(A5) G(A3) B(A4)
int delayTime = 200;      // 깜빡임시간 지정(1초 =1000)
 
int ledsize = sizeof(ledArr)/ sizeof(int);
int rgbsize = sizeof(rgbArr)/ sizeof(int);
void setup()
{
  for(int i=0; i<ledsize; i++)
  	pinMode(ledArr[i], OUTPUT);
  for(int i=0; i<ledsize; i++){
  	pinMode(rgbArr[i], OUTPUT);
    digitalWrite(rgbArr[i], HIGH);
  }
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A2,INPUT);
}
 
void led_blink()
{
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], HIGH);
  }
  delay(delayTime);
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}

void led_up2dn()
{
  for(int i=0; i<ledsize; i++){
   digitalWrite(ledArr[i], HIGH);
   delay(delayTime);
   digitalWrite(ledArr[i], LOW);
   delay(delayTime);
  }
}
 
void led_dn2up()
{
  for(int i=ledsize-1; i>=0; i--){
   digitalWrite(ledArr[i], HIGH);
   delay(delayTime);
   digitalWrite(ledArr[i], LOW);
   delay(delayTime);
  }
}
 
void led_weighted_up2dn()
{
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], HIGH);
    delay(delayTime);
  }
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}
 
void led_weighted_dn2up()
{
  for(int i=ledsize; i>=0; i--){
    digitalWrite(ledArr[i], HIGH);
    delay(delayTime);
  }
  for(int i=0; i<ledsize; i++){
    digitalWrite(ledArr[i], LOW);
  }
  delay(delayTime);
}
 
void loop()
{
  led_blink();
  led_up2dn();
  led_dn2up();
  led_weighted_up2dn();
  led_weighted_dn2up();
}

 

'Embedded > Arduino' 카테고리의 다른 글

Arduino-v211018  (0) 2021.10.18
LilyPad - 0719  (0) 2021.07.19
LilyPad - Buzzer Test  (0) 2021.07.15
Arduino - PWM(v0714)  (0) 2021.07.14
Arduino - Button(v0714)  (0) 2021.07.14