Hi all,
I want to build a interactive installation for a school project. I now only need the ledstring to work with my fans and sound impact sensor. Who knows how to combine these elements? Or what am i doing wrong?
I am using this for my first prototype:
1 - Arduino Mega
12 - 4 pin pwm fans: 92mm, 550-1800RPM, 0.16A / +12V DC, 85g
link to fan: http://www.arctic.ac/eu_en/arctic-f9-pwm-co.html
1 - push button
1 - sound impact sensor
1 - WS2801 Bullet ledstring
#include "FastLED.h"
#define NUM_LEDS 48
#define DATA_PIN 0
#define CLOCK_PIN 1
CRGB leds[NUM_LEDS];
//======PWM Pins=============
const byte fan1 = 2;
const byte fan2 = 3;
const byte fan3 = 4;
const byte fan4 = 5;
const byte fan5 = 6;
const byte fan6 = 7;
const byte fan7 = 8;
const byte fan8 = 9;
const byte fan9 = 10;
const byte fan10 = 11;
const byte fan11 = 12;
const byte fan12 = 13;
//======Button Input======
const byte buttonPin = 21;
byte buttonState = 0;
//======Sound Input=======
const byte soundPin = 20;
byte soundState = 0;
byte prevsoundState = 0;
void setup() {
delay(2000);
FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); //ledjes inladen
pinMode(soundPin,INPUT); //SIG Sound Impact Sensor
pinMode(buttonPin, INPUT_PULLUP); //SIG button pin
Serial.begin(9600); //monitor
delay(2000);
}
void loop() {
checkButton();
checkSound();
ledcolorGreen();
buttonPress();
soundInput();
}
//=======Button Check========
void checkButton() {
buttonState = digitalRead(buttonPin);
}
void buttonPress() {
if (buttonState == LOW){
Serial.println("Button On");
ledcolorRed();
animation3();
animation2();
animation2();
animation5();
animation6();
animation7();
animation1();
animation6();
animation5();
animation8();
animation8();
animation1();
animation3();
animation4();
animation5();
fansOFF();
}
else {
fansSoft();
}
}
//========Sound Check========
void checkSound() {
soundState = digitalRead(soundPin);
}
void soundInput() {
if (soundState == 1){
Serial.println("Sound On");
ledcolorRed();
animation6();
animation4();
animation5();
animation6();
}
else {
fansSoft();
}
}
//=======Led Control=======
void ledcolorGreen() {
leds[0] = CRGB::Green;
FastLED.show();
delay(20);
}
void ledcolorRed() {
leds[0] = CRGB::Red;
FastLED.show();
delay(20);
}
void ledRainbow() {
}
//=============Fan Control===========
void fansON() {
analogWrite(fan1, 255);
analogWrite(fan2, 255);
analogWrite(fan3, 255);
analogWrite(fan4, 255);
analogWrite(fan5, 255);
analogWrite(fan6, 255);
analogWrite(fan7, 255);
analogWrite(fan8, 255);
analogWrite(fan9, 255);
analogWrite(fan10, 255);
analogWrite(fan11, 255);
analogWrite(fan12, 255);
delay (5000);
}
void fansSoft() {
analogWrite(fan1, 40);
analogWrite(fan2, 40);
analogWrite(fan3, 40);
analogWrite(fan4, 40);
analogWrite(fan5, 40);
analogWrite(fan6, 40);
analogWrite(fan7, 40);
analogWrite(fan8, 40);
analogWrite(fan9, 40);
analogWrite(fan10, 40);
analogWrite(fan11, 40);
analogWrite(fan12, 40);
}
void fansOFF() {
analogWrite(fan1, 10);
analogWrite(fan2, 10);
analogWrite(fan3, 10);
analogWrite(fan4, 10);
analogWrite(fan5, 10);
analogWrite(fan6, 10);
analogWrite(fan7, 10);
analogWrite(fan8, 10);
analogWrite(fan9, 10);
analogWrite(fan10, 10);
analogWrite(fan11, 10);
analogWrite(fan12, 10);
}
//===========Animations==================
// animatie 1 midden blazen/zijkanten blazen
void animation1() {
analogWrite(fan1, 10);
analogWrite(fan2, 10);
analogWrite(fan3, 255);
analogWrite(fan4, 255);
analogWrite(fan5, 10);
analogWrite(fan6, 10);
analogWrite(fan7, 10);
analogWrite(fan8, 10);
analogWrite(fan9, 255);
analogWrite(fan10, 255);
analogWrite(fan11, 10);
analogWrite(fan12, 10);
delay(2000);
analogWrite(fan1, 255);
analogWrite(fan2, 10);
analogWrite(fan3, 10);
analogWrite(fan4, 10);
analogWrite(fan5, 10);
analogWrite(fan6, 255);
analogWrite(fan7, 255);
analogWrite(fan8, 10);
analogWrite(fan9, 10);
analogWrite(fan10, 10);
analogWrite(fan11, 10);
analogWrite(fan12, 255);
}
// animatie klein wave link-rechts/rechts-links
void animation2() {
analogWrite(fan1, 255);
analogWrite(fan7, 255);
delay(800);
analogWrite(fan2, 255);
analogWrite(fan8, 255);
analogWrite(fan1, 10);
analogWrite(fan7, 10);
delay(800);
analogWrite(fan3, 255);
analogWrite(fan9, 255);
analogWrite(fan2, 10);
analogWrite(fan8, 10);
delay(800);
analogWrite(fan4, 255);
analogWrite(fan10, 255);
analogWrite(fan3, 10);
analogWrite(fan9, 10);
delay(800);
analogWrite(fan5, 255);
analogWrite(fan11, 255);
analogWrite(fan4, 10);
analogWrite(fan10, 10);
delay(800);
analogWrite(fan6, 255);
analogWrite(fan12, 255);
analogWrite(fan5, 10);
analogWrite(fan11, 10);
delay(400);
//wave terug
analogWrite(fan6, 255);
analogWrite(fan12, 255);
delay(400);
analogWrite(fan5, 255);
analogWrite(fan11, 255);
analogWrite(fan6, 10);
analogWrite(fan12, 10);
delay(800);
analogWrite(fan4, 255);
analogWrite(fan10, 255);
analogWrite(fan5, 10);
analogWrite(fan11, 10);
delay(800);
analogWrite(fan3, 255);
analogWrite(fan9, 255);
analogWrite(fan4, 10);
analogWrite(fan10, 10);
delay(800);
analogWrite(fan2, 255);
analogWrite(fan8, 255);
analogWrite(fan3, 10);
analogWrite(fan9, 10);
delay(800);
analogWrite(fan1, 255);
analogWrite(fan7, 255);
analogWrite(fan2, 10);
analogWrite(fan8, 10);
delay(800);
analogWrite(fan1, 10);
analogWrite(fan7, 10);
delay(1000);
}
// animatie 3 - balletjes verspreiden in bak
void animation3() {
analogWrite(fan1, 255);
analogWrite(fan2, 255);
analogWrite(fan3, 255);
analogWrite(fan4, 255);
analogWrite(fan5, 255);
analogWrite(fan6, 255);
analogWrite(fan7, 255);
analogWrite(fan8, 255);
analogWrite(fan9, 255);
analogWrite(fan10, 255);
analogWrite(fan11, 255);
analogWrite(fan12, 255);
delay(2000);
analogWrite(fan1, 10);
analogWrite(fan2, 10);
analogWrite(fan3, 10);
analogWrite(fan4, 10);
analogWrite(fan5, 10);
analogWrite(fan6, 10);
analogWrite(fan7, 10);
analogWrite(fan8, 10);
analogWrite(fan9, 10);
analogWrite(fan10, 10);
analogWrite(fan11, 10);
analogWrite(fan12, 10);
delay(100);
}
// Alle voorste fans aan
void animation4() {
analogWrite(fan1, 255);
analogWrite(fan2, 255);
analogWrite(fan3, 255);
analogWrite(fan4, 255);
analogWrite(fan5, 255);
analogWrite(fan6, 255);
analogWrite(fan7, 10);
analogWrite(fan8, 10);
analogWrite(fan9, 10);
analogWrite(fan10, 10);
analogWrite(fan11, 10);
analogWrite(fan12, 10);
delay(2000);
}
// I left the rest of the animations because of to many words...
Every good tip is welcome! I have search a lot on internet. But with no results.
Kind regards,
Stijn