본문 바로가기

Embedded/Arduino

lilypad_v220713

좌측(A2,A3,A4) 깜빡이기 / 우측(11,10,9) FADE

#define UP 0
#define DOWN 1
 
int pwmArr[] = {11,10,9};
int blinkArr[]={A4,A3,A2};
 
int pwmSize = sizeof(pwmArr) / sizeof(pwmArr[0]);
int blinkSize = sizeof(blinkArr) / sizeof(blinkArr[0]);
const int minPWM = 0;
const int maxPWM = 255;
 
byte fadeDirection = UP;
int fadeValue = 0;
byte fadeIncrement = 5;
unsigned long previousFadeMillis;
unsigned long previousMillis;
 
int fadeInterval = 30;
 
int ledState = LOW;
int blinkInterval = 200;
 
void setup()
{
  for(int i=0; i<pwmSize; i++)
    pinMode(pwmArr[i], OUTPUT);
 
  for(int j=0; j<blinkSize; j++)
    pinMode(blinkArr[j], OUTPUT);
}
 
void doTheFade(int *pwmPin, unsigned long thisMillis) {
   if (thisMillis - previousFadeMillis >= fadeInterval) {
      if (fadeDirection == UP) {
         fadeValue = fadeValue + fadeIncrement;
         if (fadeValue >= maxPWM) {
            fadeValue = maxPWM;
            fadeDirection = DOWN;
         }
      } else {
         fadeValue = fadeValue - fadeIncrement;
         if (fadeValue <= minPWM) {
            fadeValue = minPWM;
            fadeDirection = UP;
         }
      }
      for(int i=0; i<pwmSize; i++)
        analogWrite(pwmArr[i], fadeValue);
      previousFadeMillis = thisMillis;
   }
}
 
void doTheBlink(int *blinkPin, unsigned long thisMillis)
{
  if (thisMillis - previousMillis >= blinkInterval) {
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    for(int i=0; i<blinkSize; i++)
      digitalWrite(blinkPin[i], ledState);
    previousMillis = thisMillis;
  }
}
 
void loop() {
  unsigned long currentMillis = millis();
  doTheFade(pwmArr, currentMillis);
  doTheBlink(blinkArr, currentMillis);
}

https://www.baldengineer.com/fading-led-analogwrite-millis-example.html

 

Fading LED: analogWrite millis() Example - Bald Engineer

Fading a LED with analogWrite. A quick explanation of how to add a fading LED to your Arduino code without using delay().

www.baldengineer.com

학교종이 땡땡땡 - 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[] = {9,10,11,A2,A3,A4};
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_A4)
   digitalWrite(ledArr[2],HIGH);
  if(piezo_melody == NOTE_G4){
   digitalWrite(ledArr[3],HIGH);      
   digitalWrite(ledArr[4],HIGH);      
   digitalWrite(ledArr[5],HIGH);
  }
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
  }
}

 

아기상어 + LED 깜빡이기

#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,A4,A3,A2};
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)
   digitalWrite(ledArr[0],HIGH);
  if(piezo_melody == NOTE_C4)
   digitalWrite(ledArr[1],HIGH);
  if(piezo_melody == NOTE_A4)
   digitalWrite(ledArr[2],HIGH);
  if(piezo_melody == NOTE_F4)
   digitalWrite(ledArr[3],HIGH);      
  if((piezo_melody == NOTE_G4))
   digitalWrite(ledArr[4],HIGH);      
  if(piezo_melody == NOTE_D4)
   digitalWrite(ledArr[5],HIGH);      
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
  }
}

 

LED 왼쪽에서 오른쪽으로 깜빡이기

const long interval = 200;  
int ledArr[] = {A4,A3,A2,11,10,9};
int ledSize = sizeof(ledArr)/sizeof(int);
 
unsigned long previousMillis = 0;
 
int sys_cnt = 0;
void setup()
{
  for(int i=0; i<ledSize; i++){
    pinMode(ledArr[i], OUTPUT);
  }
}
 
void loop() {
  unsigned long currentMillis = millis();
 
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    led_blink_each_LR();
  }
}
 
void led_blink_each_LR()
{
  sys_cnt = (sys_cnt%ledSize == 0) ? 0 : sys_cnt;
  for(int i=0; i<ledSize; i++){
    if(i == sys_cnt){
      digitalWrite(ledArr[i], HIGH);
    }
    else{
      digitalWrite(ledArr[i], LOW);
    }
  }
  sys_cnt++;  
}

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

Arduino v220718  (0) 2022.07.18
arduino v220714  (0) 2022.07.14
Arduino v220712  (0) 2022.07.12
lilyPad v220708 -2  (0) 2022.07.08
lilyPad v220708  (0) 2022.07.08