본문 바로가기

카테고리 없음

Arduino_v220715

PIEZO+LED#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 8
 
int ledArr[] = {3,5,6};
int ledSize = sizeof(ledArr)/sizeof(int);
int ledArr2[] = {11,10,9};
int ledSize2 = sizeof(ledArr2)/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);
    pinMode(ledArr2[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);
    digitalWrite(ledArr[1],HIGH);
    digitalWrite(ledArr2[1],HIGH); 
  }
  if(piezo_melody == NOTE_C4){
    digitalWrite(ledArr[1],HIGH);
    digitalWrite(ledArr2[2],HIGH); 
  }
  if((piezo_melody == NOTE_A4) || piezo_melody == NOTE_D4){
    digitalWrite(ledArr[2],HIGH);
    digitalWrite(ledArr2[2],HIGH); 
  }
  if(piezo_melody == NOTE_F4){
    digitalWrite(ledArr[0],HIGH);      
    digitalWrite(ledArr2[0],HIGH); 
  }
}
 
void ledOFF()
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i], LOW);
    digitalWrite(ledArr2[i], LOW);
  }
}

PIEZO + LED(학교종이 땡땡땡)

#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_G4  392
#define NOTE_A4  440
 
#define PIEZO_PIN 8
 
int ledArr[] = {3,12,11,10};
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);
  }
}

PHOTO RESISTER 테스트

밝기값에 따라 달라지는 LED색깔

#define RED 3
#define GREEN 5
#define BLUE 6

int Cols[3] = {RED, GREEN, BLUE};
int colSize = sizeof(Cols) / sizeof(Cols[0]);
int Colors[][3]={
  				 {0,0,0}, // OFF
  				 {1,0,0}, // RED
				 {0,1,0}, // GREEN
  				 {0,0,1}, // BLUE
  				 {1,1,1}, // white
                };
int numColors = sizeof(Colors)/sizeof(Colors[0][0])/3;

void setup()
{
  pinMode(A0, INPUT);
  for(int i=0; i<colSize; i++){
  	pinMode(Cols[i], OUTPUT);  
  }
  Serial.begin(9600);
}
void loop()
{
  int photoValue = analogRead(A0);
  Serial.println(photoValue);
  color_split(photoValue);  
}

void color_split(int step)
{
  int num;
  if(step <300){
    num = 0;
  }
  else if(step < 500){
    num = 3;
  }
  else if(step < 700){
    num = 2;
  }
  else if(step < 800){
    num = 1;
  }
  else{
    num = 4;
  }
    
  for(int i=0; i<3; i++)
    digitalWrite(Cols[i],Colors[num][i]);
}

 

어두워지면  LED켜지기

void setup()
{
  pinMode(A0, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  int photoValue = analogRead(A0);
  Serial.println(photoValue);
  if(photoValue < 300){
    digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
  } 
  else{
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
  } 
}

포토레지스터 값 모니터링

void setup()
{
  pinMode(A0, INPUT);
  Serial.begin(9600);
}
void loop()
{
  int photoValue = analogRead(A0);
  Serial.println(photoValue);
}

온도에 따른 RGB LED 색깔변화

#include <DHT11.h>
 
#define RED_LED 3
#define BLUE_LED 6
#define GREEN_LED 5
int pin=A0;
DHT11 dht11(pin); 
 
void setup()
{
   Serial.begin(9600);
   pinMode(RED_LED,OUTPUT);
   pinMode(BLUE_LED,OUTPUT);
   pinMode(GREEN_LED,OUTPUT);
}
 
void loop()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  {
    Serial.print("온도:");
    Serial.print(temp);
    if(temp < 28.0f){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,HIGH);
 
    }
    else if(temp>=28.0f && temp < 30.0f){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,HIGH);
      digitalWrite(BLUE_LED,LOW);
    }
    else if(temp >= 30.0f){
      digitalWrite(RED_LED,HIGH);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,LOW);
    }
    
    Serial.print("C 습도:");
    Serial.print(humi);
    Serial.println("%");
  }
  else
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
 
  }
  delay(2000); 
}

 

DHT11_library.zip
0.00MB

온도습도 모니터링

#include <DHT11.h>
int pin=A0;
DHT11 dht11(pin); 
void setup()
{
   Serial.begin(9600);
}
 
void loop()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  {
    Serial.print("온도:");
    Serial.print(temp);
    
    Serial.print("C 습도:");
    Serial.print(humi);
    Serial.println("%");
  }
  else
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
 
  }
  delay(2000); 
}

시리얼 통신 사용하기#2

int interval = 200;
int ledArr[] = {11,10,9};
int ledSize = sizeof(ledArr)/sizeof(int);
int led_mode=99;
unsigned long previousMillis = 0;
 
void setup()
{
  for(int i=0; i<ledSize; i++){
    pinMode(ledArr[i], OUTPUT);
  }
  Serial.begin(9600);
}
 
int sys_cnt = 0; 
void loop() {
  unsigned long currentMillis = millis();
  if(Serial.available() > 0){
    String str = Serial.readStringUntil('\n');
    led_mode = str.toInt();
    Serial.print(led_mode);
  }
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
 
    mode_select(led_mode);
    sys_cnt++;
  }
}
 
void mode_select(int mode)
{
  switch(mode){
    case 0:
       led_blink();
       break;
    case 1:
       led_LtoR();
       break;
    case 2:
       led_RtoL();
       break;     
    case 3:
       led_weighted_LtoR();
       break;
    case 4:
       led_weighted_RtoL();
       break;
    default:
       led_off();
       break;
  }
}
 
 
void led_LtoR()
{
  int count = sys_cnt%ledSize;
  for(int i=0; i<ledSize; i++){
    if(i==count)
   		digitalWrite(ledArr[i], HIGH);
    else
    	digitalWrite(ledArr[i], LOW);
  }
  Serial.println(count);
}
 
void led_RtoL()
{
  int count = (ledSize-1)-(sys_cnt%ledSize);
  for(int i=0; i<ledSize; i++){
    if(i==count)
   		digitalWrite(ledArr[i], HIGH);
    else
    	digitalWrite(ledArr[i], LOW);
  }
  Serial.println(count);
}
 
void led_weighted_LtoR()
{
  int count = sys_cnt%(ledSize+1);
 
  if(count==ledSize)
    led_off();
  else
   	digitalWrite(ledArr[count], HIGH);
  Serial.println(count);
}
 
void led_weighted_RtoL()
{
  int count = ledSize - (sys_cnt%(ledSize+1));
 
  if(count==ledSize)
    led_off();
  else
   	digitalWrite(ledArr[count], HIGH);
  Serial.println(count);
}
 
void led_blink()
{
  if(sys_cnt%2 == 0)
    led_on();
  else
    led_off();
}
 
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);
}

 

시리얼 통신 사용하기

#define RED_LED 3
#define BLUE_LED 6
#define GREEN_LED 5
 
void setup()
{
   Serial.begin(9600);
   pinMode(RED_LED,OUTPUT);
   pinMode(BLUE_LED,OUTPUT);
   pinMode(GREEN_LED,OUTPUT);
}
 
void loop()
{
  if(Serial.available() > 0){
    String str = Serial.readStringUntil('\n');
    Serial.print(str);
    if(str == "RED" || str == "red"){
      digitalWrite(RED_LED,HIGH);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,LOW);
      Serial.println(" : RED LED 켜짐");
    }
    else if(str == "BLUE" || str == "blue"){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,HIGH);
      Serial.println(" : BLUE LED 켜짐");
    }
    else if(str == "GREEN" || str == "green"){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,HIGH);
      digitalWrite(BLUE_LED,LOW);
      Serial.println(" : Green LED 켜짐");
    }
    else if(str == "cyan" || str == "CYAN"){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,HIGH);
      digitalWrite(BLUE_LED,HIGH);
      Serial.println(" : CYAN LED 켜짐");
    }
    else if(str == "magenta" || str == "MAGENTA"){
      digitalWrite(RED_LED,HIGH);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,HIGH);
      Serial.println(" : MAGENTA LED 켜짐");
    }
    else if(str == "yellow" || str == "YELLOW"){
      digitalWrite(RED_LED,HIGH);
      digitalWrite(GREEN_LED,HIGH);
      digitalWrite(BLUE_LED,LOW);
      Serial.println(" : YELLOW LED 켜짐");
    }
    else if(str == "white" || str == "WHITE"){
      digitalWrite(RED_LED,HIGH);
      digitalWrite(GREEN_LED,HIGH);
      digitalWrite(BLUE_LED,HIGH);
      Serial.println(" : WHITE LED ON");
    }
    else if(str == "off" || str == "OFF"){
      digitalWrite(RED_LED,LOW);
      digitalWrite(GREEN_LED,LOW);
      digitalWrite(BLUE_LED,LOW);
      Serial.println(" : LED 꺼짐");
    }
    else{
      Serial.println(" : 입력한 명령어가 없습니다.");
    }
  }
}

 

RGB LED + 3LED FADE

#define UP 0
#define DOWN 1

const int minPWM = 0;
const int maxPWM = 255;
int pwmLED[] = {3,5,6,9,10,11};
int ledSize = sizeof(pwmLED)/sizeof(pwmLED[0]);

byte fadeDirection = UP;
int fadeValue = 0;
byte fadeIncrement = 5;
unsigned long previousFadeMillis;
int fadeInterval = 30;
int led_cnt = 0;


void setup() {
  for(int i=0; i<ledSize; i++){
    pinMode(pwmLED[i], OUTPUT);
   	analogWrite(pwmLED[i], fadeValue);
  }
  Serial.begin(9600);
  Serial.println(led_cnt);
}



void doTheFade(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;
           led_cnt = (led_cnt+1 == ledSize) ? 0 : led_cnt+1;
           Serial.println(led_cnt);
         }
      }
      analogWrite(pwmLED[led_cnt], fadeValue);
      previousFadeMillis = thisMillis;
   }
}


void loop() {
   unsigned long currentMillis = millis();
   doTheFade(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

RGB LED FADE

#define UP 0
#define DOWN 1

const int minPWM = 0;
const int maxPWM = 255;
int pwmLED[] = {3,5,6};
int ledSize = sizeof(pwmLED)/sizeof(pwmLED[0]);

byte fadeDirection = UP;
int fadeValue = 0;
byte fadeIncrement = 5;
unsigned long previousFadeMillis;
int fadeInterval = 30;
int led_cnt = 0;


void setup() {
  for(int i=0; i<ledSize; i++){
    pinMode(pwmLED[i], OUTPUT);
   	analogWrite(pwmLED[i], fadeValue);
  }
  Serial.begin(9600);
  Serial.println(led_cnt);
}



void doTheFade(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;
           led_cnt = (led_cnt+1 == ledSize) ? 0 : led_cnt+1;
           Serial.println(led_cnt);
         }
      }
      analogWrite(pwmLED[led_cnt], fadeValue);
      previousFadeMillis = thisMillis;
   }
}


void loop() {
   unsigned long currentMillis = millis();
   doTheFade(currentMillis);
}

 

RGB LED 컨트롤

#define RED 3
#define GREEN 5
#define BLUE 6

const long interval = 500;  
int ledArr[] = {RED,GREEN,BLUE};
int ledSize = sizeof(ledArr)/sizeof(int);

unsigned long previousMillis = 0;

int sys_cnt = 0;
int ledState[8][3] = {{LOW, LOW, LOW},
  {HIGH, LOW, LOW}, //1RED
  {LOW, HIGH, LOW}, //2GREEN
  {LOW, LOW, HIGH}, //3BLUE
  {HIGH, HIGH, LOW},//4RED+GREEN : YELLOW
  {HIGH, LOW, HIGH}, //5RED+BLUE : Magenta 
  {LOW, HIGH, HIGH}, //6GREEN+BLUE: Cyan
{HIGH, HIGH, HIGH}}; //7WHITE

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;
    sys_cnt = (sys_cnt%8 == 0) ? 0 : sys_cnt;
    
   
    for(int i=0; i<ledSize; i++){
      digitalWrite(ledArr[i], ledState[sys_cnt][i]);
    }
    
    sys_cnt++;
  }
}

3개의 LED 깜빡임-using millis

const long interval = 200;  
int ledArr[] = {13,12,11};
int ledSize = sizeof(ledArr)/sizeof(int);

unsigned long previousMillis = 0;

int sys_cnt = 0;
int ledState[] = {LOW, LOW, LOW};

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;
    sys_cnt = (sys_cnt%6 == 0) ? 0 : sys_cnt;
    
    if (sys_cnt == 0) {
      ledState[0] = HIGH;
      ledState[1] = LOW;
      ledState[2] = LOW;
    } 
    else if (sys_cnt == 1){
      ledState[0] = LOW;
      ledState[1] = HIGH;
      ledState[2] = LOW;
    }
    else if(sys_cnt == 2){
      ledState[0] = LOW;
      ledState[1] = LOW;
      ledState[2] = HIGH;
    }
    else if (sys_cnt == 3){
      ledState[0] = LOW;
      ledState[1] = HIGH;
      ledState[2] = LOW;
    }
    else if (sys_cnt == 4) {
      ledState[0] = HIGH;
      ledState[1] = LOW;
      ledState[2] = LOW;
    }
    else{
      ledState[0] = LOW;
      ledState[1] = LOW;
      ledState[2] = LOW;
    }
    
    for(int i=0; i<ledSize; i++)
    	digitalWrite(ledArr[i], ledState[i]);
    
    sys_cnt++;
  }
}

3개의 LED 한개씩 깜빡임-2(13->12->11)

int ledArr[] = {13,12,11};
int ledSize = sizeof(ledArr)/sizeof(int);

void setup()
{
  for(int i=0; i<ledSize; i++){
    pinMode(ledArr[i], OUTPUT);
  }
}

int sys_cnt = 0; 
void loop()
{
  sys_cnt = (sys_cnt%3 == 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++;
  delay(200);
}

 

3개의 LED 한개씩 깜빡임(13->12->11)

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}
 
void loop()
{
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  delay(200);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  delay(200); 
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  delay(200); 
}

 

3개 한꺼번에 깜빡임

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}