https://arduino.stackexchange.com/questions/17355/playing-melody-with-tone-without-using-delay
#노래 두곡 번갈아 재생
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
int piezoPin = 8; // 부저의 ⊕극을 오렌지 보드 8번에 연결
int tempo = 200; // duration 옵션 값 설정
int flag = 0;
int ledCount = 0;
void melody_1()
{
int notes[25] = { NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4,
NOTE_G4, NOTE_E4,NOTE_G4, NOTE_G4, NOTE_E4,
NOTE_E4, NOTE_D4, NOTE_G4,NOTE_G4, NOTE_A4,
NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_C4 };
for (int i = 0; i < 12; i++) {
tone (piezoPin, notes[ i ], tempo);
delay (300);
}
//delay(100); // 멜로디 중간에 짧게 멈추는 용도
for (int i = 12; i < 25; i++) {
tone (piezoPin, notes[ i ], tempo);
delay(300);
}
}
void melody_2()
{
int melody[] = {
NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C5,
NOTE_E5,NOTE_G5,NOTE_G5,NOTE_E5,NOTE_C5,
NOTE_G5,NOTE_G5,NOTE_E5,NOTE_G5,NOTE_G5,NOTE_E5,
NOTE_C5,NOTE_C5,NOTE_C5,
NOTE_G5,NOTE_G5,NOTE_E5,NOTE_C5,
NOTE_G5,NOTE_G5,NOTE_G5,
NOTE_G5,NOTE_G5,NOTE_E5,NOTE_C5,
NOTE_G5,NOTE_G5,NOTE_G5,
NOTE_G5,NOTE_G5,NOTE_E5,NOTE_C5,
NOTE_G5,NOTE_G5,NOTE_G5,NOTE_A5,NOTE_G5,
NOTE_C6,NOTE_G5,NOTE_C6,NOTE_G5,
NOTE_E5,NOTE_D5,NOTE_C5
};
int noteDurations[]={
4,8,8,4,4,
4,8,8,4,4,
8,8,4,8,8,4,
4,4,2,
4,4,4,4,
4,4,2,
4,4,4,4,
4,4,2,
4,4,4,4,
8,8,8,8,2,
4,4,4,4,
4,4,2
};
for (int i = 0; i < 49; i++) {
int Durations = 1000/noteDurations[i];
tone(piezoPin, melody[i], Durations);
int pauseBetweenNotes = Durations *1.3 ;
delay(pauseBetweenNotes);
noTone(piezoPin);
}
}
void setup() {
pinMode (piezoPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int checkButton = digitalRead(2);
if (checkButton == HIGH) {
if (flag == 0){
flag = 1;
ledCount = ledCount % 2;
if(ledCount == 0){
Serial.println("Melody #1");
melody_1();
}
if(ledCount == 1){
Serial.println("Melody #2");
melody_2();
}
ledCount++;
}
}
else {
if (flag == 1) {
flag = 0;
}
}
delay(100);
}
# PIEZO + 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 8
int ledArr[] = {12,11,10,9};
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);
}
}
# 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[] = {12,11,10,9};
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);
}
}
RGB LED 제어
#define THR 350
int modeCount = 0;
int flag = 0;
int ledCount = 0;
void setup()
{
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(3, OUTPUT);
pinMode(A0,INPUT);
Serial.begin(9600);
}
void mode_selection(int mode)
{
switch(mode%4){
case 0:
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);
ledCount++;
break;
case 1:
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(3,LOW);
ledCount++;
break;
case 2:
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(3,LOW);
ledCount++;
break;
case 3:
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(3,HIGH);
ledCount++;
break;
}
}
void loop() {
int inputValue = analogRead(A0);
Serial.print("Sensor : ");
Serial.print(inputValue);
Serial.print(" Mode : ");
Serial.println(modeCount);
if (inputValue < THR){
if(flag == 0){
flag = 1;
mode_selection(modeCount);
modeCount++;
ledCount = 0;
delay(150);
}
}
else if(inputValue > (THR+150)){
if(flag == 1){
flag = 0;
}
}
}
포토레지스터 값에 따라 LED켜기
void setup()
{
pinMode(A0, INPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int photoValue = analogRead(A0);
Serial.println(photoValue);
if(photoValue < 580){
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
}
else{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
}
# 포토레지스터(광센서) 동작하기
어두울때 값이 커짐
밝을때 값이 커짐
void setup()
{
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
int photoValue = analogRead(A0);
Serial.println(photoValue);
}
# RGB LED로 핑크 만들어보기
#define RED_LED 6
#define GREEN_LED 5
#define BLUE_LED 3
void setup()
{
Serial.begin(9600);
pinMode(RED_LED,OUTPUT);
pinMode(BLUE_LED,OUTPUT);
pinMode(GREEN_LED,OUTPUT);
}
void loop()
{
analogWrite(RED_LED,255);
analogWrite(GREEN_LED,105);
analogWrite(BLUE_LED,180);
}
#시리얼로 LED켜기
#define RED_LED 10
#define BLUE_LED 8
#define GREEN_LED 9
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 == "off" || str == "OFF"){
digitalWrite(RED_LED,LOW);
digitalWrite(GREEN_LED,LOW);
digitalWrite(BLUE_LED,LOW);
Serial.println(" : 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{
Serial.println(" : 입력한 명령어가 없습니다.");
}
}
}
온습도 센서 사용하기 - 2
#include <DHT11.h>
#define RED_LED 10
#define BLUE_LED 8
#define GREEN_LED 9
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 < 26.0f){
digitalWrite(RED_LED,LOW);
digitalWrite(GREEN_LED,LOW);
digitalWrite(BLUE_LED,HIGH);
}
else if(temp>26.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);
}
온습도 센서 사용하기
#include <DHT11.h>
int pin=A0;
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
void loop()
{
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0)
{
Serial.print("온도:");
Serial.print(temp);
if(temp < 26.0f){
digitalWrite(12,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
else if(temp>26.0f && temp < 30.0f){
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
else if(temp >= 30.0f){
digitalWrite(12,LOW);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
Serial.print("C 습도:");
Serial.print(humi);
Serial.println("%");
}
else
{
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(2000);
}
푸시버튼 사용하여 LED 켜기
VCC : 5V / GND : 5V옆 GND / OUT : 2번
int ledArr[] = {12,11,10,9,8};
int ledSize = sizeof(ledArr)/sizeof(ledArr[0]);
int delayTime = 200;
int count =0;
int buttonPin = 2;
int flag = 0;
void setup()
{
for(int i=0; i<ledSize; i++)
pinMode(ledArr[i],OUTPUT);
}
void led_on_LR()
{
count = count % ledSize;
for(int i=0; i<ledSize; i++){
if(i == count){
digitalWrite(ledArr[i],HIGH);
}
else{
digitalWrite(ledArr[i],LOW);
}
}
delay(delayTime);
count++;
}
void led_on_RL()
{
count = count % ledSize;
for(int i=0; i<ledSize; i++){
if(i == ledSize-1-count){
digitalWrite(ledArr[i],HIGH);
}
else{
digitalWrite(ledArr[i],LOW);
}
}
delay(delayTime);
count++;
}
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_off()
{
for(int i=0; i<ledSize; i++){
digitalWrite(ledArr[i],LOW);
}
}
void ledChange(int modeCount)
{
if(modeCount%4 == 0)
led_off();
else if(modeCount%4 == 1)
led_on_LR();
else if(modeCount%4 == 2)
led_on_RL();
else
led_blink();
}
int modeCount = 0;
void loop()
{
int inputValue = digitalRead(buttonPin);
if (inputValue == HIGH) {
if (flag == 0){
flag = 1;
count=0;
modeCount++;
}
}
else {
if (flag == 1) {
flag = 0;
}
}
ledChange(modeCount);
}
LED 제어하기
int ledArr[] = {12,11,10,9,8};
int ledSize = sizeof(ledArr)/sizeof(ledArr[0]);
int delayTime = 200;
int count =0;
void setup()
{
for(int i=0; i<ledSize; i++)
pinMode(ledArr[i],OUTPUT);
}
void led_on_LR()
{
count = count % ledSize;
for(int i=0; i<ledSize; i++){
if(i == count){
digitalWrite(ledArr[i],HIGH);
}
else{
digitalWrite(ledArr[i],LOW);
}
}
delay(delayTime);
count++;
}
void loop()
{
led_on_LR();
}
'Embedded > Arduino' 카테고리의 다른 글
lilyPad v220708 (0) | 2022.07.08 |
---|---|
lilyPad v220707 (0) | 2022.07.07 |
Arduino v220704 (0) | 2022.07.04 |
RC카+아두이노TEST (0) | 2022.06.18 |
lilyPad_v220429 (0) | 2022.04.29 |