본문 바로가기

Embedded/Arduino

lilyPad v220708

#포토레지스터 + LED깜빡이기

#define THR 200
#define PIEZOPIN 2
#define LED_FADE 0
 
int ledArr[] = {11,10,9,3}; // 사용하는 LED번호
int ledSize = sizeof(ledArr)/ sizeof(ledArr[0]);
int ledCount = 0;
int flag = 0;
 
 
int modeCount = 0;
int fadeCount = 0;
int fadeDirection = 1;
 
unsigned long fade_previousMillis = 0;
unsigned long previousMillis = 0;
 
const long fade_interval = 20;           
const long interval = 150;
 
 
 
void setup()
{
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[i], OUTPUT);
 
  pinMode(PIEZOPIN, OUTPUT);
  pinMode(A5,INPUT);
  
  Serial.begin(9600);
}
 
void led_off()
{
  for(int i=0; i<ledSize; i++)
      digitalWrite(ledArr[i], LOW);
}
 
 
void led_blink(int count)
{
  if(count%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 count)
{
  int n = count % (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 count)
{
  int n = count % (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 count)
{
  int n = count % (ledSize+1);
  if (n == ledSize)
    led_off();
  else
    digitalWrite(ledArr[n], HIGH);
}
 
void led_weighted_dn2up(int count)
{
  int n = count % (ledSize+1);
  if (n == ledSize)
    led_off();
  else
    digitalWrite(ledArr[ledSize-1-n], HIGH); 
}
 
void led_fade()
{ 
  for(int i=0; i<ledSize; i++)
      analogWrite(ledArr[i], ledCount);
  
  if(ledCount == 255) 
    fadeDirection = -1;
  
  if(ledCount == 0) 
    fadeDirection = 1;
    
  ledCount += (5*fadeDirection);
  //Serial.println(ledCount);
}
 
void mode_selection(int mode)
{
  switch(mode%7){
    case 0:
      led_fade();
      break;
    case 1:
      led_blink(ledCount);
      ledCount++;
      break;
    case 2:
      led_up2dn(ledCount);
      ledCount++;
      break;
    case 3:
      led_dn2up(ledCount);
      ledCount++;
      break;
    case 4:
      led_weighted_up2dn(ledCount);
      ledCount++;
      break;
    case 5:
      led_weighted_dn2up(ledCount);
      ledCount++;
      break;
    default:
      led_off();
      break;
  }
}
 
 
void loop() {
  int inputValue = analogRead(A5);
  Serial.print(inputValue);
  Serial.print(" ");
  Serial.println(modeCount);
  if (inputValue < THR){
    if(flag == 0){
      flag = 1;
      modeCount++;
      ledCount = 0;
      led_off();
      delay(150);
    }
  }
  else{
    if(flag == 1){
      flag = 0;
    }
  }
  
  unsigned long currentMillis = millis();
  if (modeCount == 0){
    if (currentMillis - fade_previousMillis >= fade_interval){
      fade_previousMillis = currentMillis;
      mode_selection(modeCount);
    }
  }
  else{
    if (currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;
        mode_selection(modeCount);
    }
  }
  
}

#아기상어 + 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,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);
  }
}

#학교종이땡땡땡 + 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);
  }
}

# 4개의 LED BLINK 와 FADE 번갈아 진행

#define UP 0
#define DOWN 1
 
int ledArr[] = {10,3};
int blinkArr[]={11,9};
 
int ledSize = sizeof(ledArr) / sizeof(ledArr[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 = 20;
 
int ledState = LOW;
int blinkInterval = 1000;
 
void setup()
{
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[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<ledSize; i++)
        analogWrite(ledArr[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<ledSize; i++)
        digitalWrite(blinkPin[i], ledState);
    previousMillis = thisMillis;
  }
}
 
void loop() {
  unsigned long currentMillis = millis();
  doTheFade(ledArr, currentMillis);
  doTheBlink(blinkArr, currentMillis);
}

 

#4개의 LED 연속으로 번갈아 FADE

int ledArr[] = {11, 10, 9, 3};
int fadeTime = 20;
 
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);
int brightness = 0;
 
void setup()
{
  for(int i=0; i<ledSize; i++)
  	pinMode(ledArr[i], OUTPUT);
  Serial.begin(9600);
}
 
void fade_one(int pinNum, int fadeInterval)
{
    for (brightness = 0; brightness <= 255; brightness += 5) {
      analogWrite(pinNum, brightness);
      delay(fadeInterval); 
    }
    for (brightness = 255; brightness >= 0; brightness -= 5) {
      analogWrite(pinNum, brightness);
      delay(fadeInterval); 
    }
}
 
void fade_all(int *pins, int size, int fadeInterval)
{
    Serial.println( sizeof(pins));  
  
    for (brightness = 0; brightness <= 255; brightness += 5) {
      for(int i=0; i<size; i++){
      	analogWrite(pins[i], brightness);
      }
      delay(fadeInterval); 
    }
    for (brightness = 255; brightness >= 0; brightness -= 5) {
      for(int i=0; i<size; i++){
      	analogWrite(pins[i], brightness);
      }
      delay(fadeInterval); 
    }
}
 
void loop()
{
  fade_all(ledArr, ledSize, fadeTime);
  for(int i=0; i<ledSize; i++){
    fade_one(ledArr[i],fadeTime); 
  }
}

 

#시리얼 통신으로 제어하기

명령어  : 11 / 10 / 9 / 3 / on / off / up / dn / blink

int ledArr[] = {11,10,9,3};
const long interval = 100;
 
String str;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);
 
unsigned long previousMillis = 0;
int modeSelect = 0;
int ledCount = 0;
 
#define LED_OFF 0
#define LED_ON 1
#define LED_UP 4
#define LED_DOWN 5
#define LED_BLINK 6
 
 
void setup()
{
  for(int i=0; i<ledSize; i++)
    pinMode(ledArr[i], OUTPUT);
  Serial.begin(9600); // 시리얼 통신 시작
}
 
void led_blink(int count)
{
  int n = count % 2;
  if(n==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_on()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i],HIGH);
  }
}
 
void led_off()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i],LOW);
  }
}
 
void led_up(int count)
{
  int i = ledSize - 1 - (count % ledSize);
  for(int n=0; n<ledSize; n++){
    if(n==i)
      digitalWrite(ledArr[n], HIGH);
    else
      digitalWrite(ledArr[n], LOW);
  }
}
void led_dn(int count)
{
  int i = count % ledSize;
  for(int n=ledSize-1; n>=0; n--){
    if(n==i)
      digitalWrite(ledArr[n], HIGH);
    else
      digitalWrite(ledArr[n], LOW);
  }
}
 
 
 
void mode_selector(int mode)
{
  switch(mode){
    case 10:
      digitalWrite(10,HIGH);
      break;
    case 9:
      digitalWrite(9,HIGH);
      break;
    case 3:
      digitalWrite(3,HIGH);
      break;
    case 11:
      digitalWrite(11,HIGH);
      break;
    case LED_BLINK:
      led_blink(ledCount);
      break;
    case LED_ON:
      led_on();
      break;
    case LED_OFF:
      led_off();
      break;
    case LED_UP:
      led_up(ledCount);
      break;
    case LED_DOWN:
      led_dn(ledCount);
      break;
  }
}
 
 
void loop()
{
  if(Serial.available() > 0){
    str = Serial.readStringUntil('\n');
    Serial.print(str);
    if(str == "10"){
      modeSelect = 10;
      Serial.println(" : 10번 켜짐");
    }
    else if(str == "9"){
      modeSelect = 9;
      Serial.println(" : 9번 켜짐");
    }
    else if(str == "3"){
      modeSelect = 3;
      Serial.println(" : 3번 켜짐");
    }
    else if(str == "11"){
      modeSelect = 11;
      Serial.println(" : 11번 켜짐");
    }
    else if(str == "blink" || str == "BLINK"){
      modeSelect = LED_BLINK;
      Serial.println(" : LED 깜빡임");
    }
    else if(str == "on" || str == "ON"){
      modeSelect = LED_ON;
      Serial.println(" : LED 켜짐");
    }
    else if(str == "off" || str == "OFF"){
      modeSelect = LED_OFF;
      Serial.println(" : LED 꺼짐");
    }
    else if(str == "up" || str == "UP"){
      modeSelect = LED_UP;
      mode_selector(LED_OFF);
      ledCount = 0;
      Serial.println(" : LED 위에서 아래로");
    }
    else if(str == "dn" || str == "DN" || 
            str == "down" || str == "DOWN"){
      modeSelect = LED_DOWN;
      mode_selector(LED_OFF);
      ledCount = 0;
      Serial.println(" : LED 아래에서 위로");
    }            
    else{
      Serial.println(" : zzz입력한 명령어가 없습니다.");
    }
  }
  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    mode_selector(modeSelect);
    ledCount++;
  }
}

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

Arduino v220712  (0) 2022.07.12
lilyPad v220708 -2  (0) 2022.07.08
lilyPad v220707  (0) 2022.07.07
Arduino_220706  (0) 2022.07.05
Arduino v220704  (0) 2022.07.04