#조도센서 + LED깜빡이기
#define THR 200
#define PIEZOPIN 2
#define LED_FADE 0
int ledArr[] = {10,9,3,A4,A3,A2}; // 사용하는 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[] = {10,9,3,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깜빡이기
#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[] = {10,9,3,A4,A3,A2};
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);
digitalWrite(ledArr[4],HIGH);
digitalWrite(ledArr[5],HIGH);
}
}
void ledOFF()
{
for(int i=0; i<ledSize; i++){
digitalWrite(ledArr[i], LOW);
}
}
# 6개의 LED BLINK 와 FADE 번갈아 진행
#define UP 0
#define DOWN 1
int ledArr[] = {11,10,3};
int blinkArr[]={A4,A3,A2};
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);
}