#include <IRremote.h>
#define irPin 2 //Pin odbiornika IR
IRrecv irrecv(irPin);
decode_results results;
//Część ustawien - edytuj to co w tej części oraz 2 linijke kodu
int D1Pin = 6; // Pin PWM do tranzystora taśmy jednokolorowej
int D2PinR = 9; // Pin PWM do tranzystora koloru czerwonego taśmy RGB
int D2PinG = 10;// Pin PWM do tranzystora koloru zielonego taśmy RGB
int D2PinB = 5; // Pin PWM do tranzystora koloru niebieskiego taśmy RGB
//Koniec części ustawień
int D1Status = HIGH;
int D1Jasnosc = 255;
int D2Status = HIGH;
int D2PinRA = 255;
int D2PinGA = 255;
int D2PinBA = 255;
int Mode = 0;
int M2K = 0;
int M2V = 0;
int M2D = 0;
int M1C = 0;
const int M4W = 50;
unsigned int M4S;
int M4L = 0;
int M4MAX = 0;<br>int M4CNT = 0;<br>int M4CNN = 0;
String lastkey = "";
String results2 = "";
//Funkcja do ustawiania koloru taśmy RGB
void rgb_set(char r, char g, char b) {
analogWrite(D2PinR, r);
analogWrite(D2PinG, g);
analogWrite(D2PinB, b);
}
//Funkcja do ustawiania janości taśmy jednokolorowej
void led_set(char m) {
analogWrite(D1Pin, m);
}
void setup()
{
Serial.begin(9600);
Serial.println("Starting...");
irrecv.enableIRIn(); // "Włączamy" odbiornik IR
pinMode(D1Pin, OUTPUT);
for(int x=0; x < 50; x++) { led_set(x); rgb_set(x,x,x); delay(25); }
for(int x=50; x < 100; x=x+2) { led_set(x); rgb_set(x,x,x); delay(25); }
for(int x=100; x < 150; x=x+5) { led_set(x); rgb_set(x,x,x); delay(25); }
for(int x=150; x < 255; x=x+10) { led_set(x); rgb_set(x,x,x); delay(25); } // Ta i 3 wcześniejsze linijki służą za w miare płynne rozjaśnianie taśm podczas włączania.
led_set(255); rgb_set(255,255,255);
attachInterrupt(0, ir_check, CHANGE); // Definiujemy przerwanie aby przy odbiorze czegoś z odbiornika IR się wykonywało
M4MAX=10;
Serial.println("Started !");
}
//Przerwanie obsługująca odbiornik IR
void ir_check()
{
if (irrecv.decode(&results)) {
if(results.value==0xFFFFFFFF) { results2=String(lastkey); } else { results2=String(results.value, HEX); } //Jeżeli przytrzymano przycisk, to uzywa ostatnio uzywanego przycisku.
Serial.print(results2);
if(results2=="f740bf") {
Serial.print(" - D1 ON/OFF");
D1Status = ~D1Status;
if(D1Status==HIGH)
{
for(int x=0; x < D1Jasnosc; x++) { analogWrite(D1Pin, x); delay(50); }
analogWrite(D1Pin, D1Jasnosc);
} else {
for(int x=D1Jasnosc; x >= 0; x--) { analogWrite(D1Pin, x); delay(50); }
analogWrite(D1Pin, 0);
}
} else if(results2=="f700ff") {
Serial.print(" - D1 LIGHT UP - ");
if(D1Status<=0) { for(int x=0; x < D1Jasnosc; x++) { analogWrite(D1Pin, x); delay(50); } analogWrite(D1Pin, D1Jasnosc); }
if(D1Jasnosc < 1) {D1Jasnosc = D1Jasnosc+1;}
else if(D1Jasnosc < 10) {D1Jasnosc = D1Jasnosc+5;}
else if(D1Jasnosc<40) {D1Jasnosc = D1Jasnosc+10;}
else if(D1Jasnosc<150) {D1Jasnosc = D1Jasnosc+20;}
Serial.print(D1Jasnosc);
analogWrite(D1Pin, D1Jasnosc);
D1Status=HIGH;
} else if(results2=="f7807f") { //f7807f zamieniamy na kod przycisku z własnego pilota
Serial.print(" - D1 LIGHT DOWN - ");
if(D1Status<=0) { for(int x=0; x < D1Jasnosc; x++) { analogWrite(D1Pin, x); delay(50); } analogWrite(D1Pin, D1Jasnosc); }
if(D1Jasnosc>150) {D1Jasnosc = D1Jasnosc-20;}
else if(D1Jasnosc>40) {D1Jasnosc = D1Jasnosc-10;}
else if(D1Jasnosc > 10) {D1Jasnosc = D1Jasnosc-5;}
else if(D1Jasnosc > 1) {D1Jasnosc = D1Jasnosc-1;}
Serial.print(D1Jasnosc);
analogWrite(D1Pin, D1Jasnosc);
D1Status=HIGH;
} else if(results2=="f7c03f") {
Serial.print(" - D2 ON/OFF");
D2Status = ~D2Status;
if(D2Status==HIGH)
{
for(int x=0; x < 255; x++) {
if(x<=D2PinRA) { analogWrite(D2PinR, x); }
if(x<=D2PinGA) { analogWrite(D2PinG, x); }
if(x<=D2PinBA) { analogWrite(D2PinB, x); }
delay(50);
}
analogWrite(D2PinR, D2PinRA);
} else {
int mx = D2PinRA;
if(mx<D2PinGA) { mx=D2PinGA; }
if(mx<D2PinBA) { mx=D2PinBA; }
for(int x=mx; x >= 0; x--) {
if(x<D2PinRA) { analogWrite(D2PinR, x); }
if(x<D2PinGA) { analogWrite(D2PinG, x); }
if(x<D2PinBA) { analogWrite(D2PinB, x); }
delay(50);
}
rgb_set(0,0,0);
}
} else if(results2=="f710ef") {
Serial.print(" - D2 RED");
D2PinRA=255; D2PinGA=0; D2PinBA=0;
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f7906f") {
Serial.print(" - D2 GREEN");
D2PinRA=0; D2PinGA=255; D2PinBA=0;
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f750af") {
Serial.print(" - D2 BLUE");
D2PinRA=0; D2PinGA=0; D2PinBA=255;
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f7e01f") {
Serial.print(" - D2 WHITE");
D2PinRA=255; D2PinGA=255; D2PinBA=255;
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f7d02f") {
Serial.print(" - D2 LIGHT UP");
if(D2PinBA < 255&&D2PinGA < 255&&D2PinBA < 255) {D2PinRA = D2PinRA+5; D2PinGA = D2PinGA+5; D2PinBA = D2PinBA+5;}
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f7f00f") {
Serial.print(" - D2 LIGHT DOWN");
if(D2PinBA > 0&&D2PinGA > 0&&D2PinBA > 0) {D2PinRA = D2PinRA-5; D2PinGA = D2PinGA-5; D2PinBA = D2PinBA-5;}
rgb_set(D2PinRA, D2PinGA, D2PinBA);
D2Status=HIGH;
} else if(results2=="f7e817") {
Serial.print(" - MODE");
switch(Mode)
{
case 0:
Mode=1;
break;
case 1:
Mode=2;
break;
case 2:
Mode=0;
break;
default:
Mode=0;
break;
}
D2Status=HIGH;
} else if(results2=="f7c837") {
Serial.print(" - MUSIC");
if(Mode>=0&&Mode<4) { Mode=4; } else if (Mode==4) { Mode=0; } else { Mode=0; }
D2Status=HIGH;
}
delay(250);
if(results2!="ffffffff") { lastkey = results2; } // Jeśli teraz był przytrzymany przycisk to jako ostatni przycisk używa jeszcze wcześniejszego.
Serial.println("");
irrecv.resume();
}
}
void loop()
{
if(D2Status<=0) { rgb_set(0, 0, 0); delay(50); return; } //Jeżeli status paska 2 (RGB) jest wylaczony to wylacza go i od nowa wykonuje loop();
if(Mode==1) // Jeśli tryb == 1 (światła policyjne)
{
switch(M1C) {
case 0:
D2PinRA=255; D2PinGA=0; D2PinBA=0;//Czerwony
M1C++;
break;
case 1:
D2PinRA=0; D2PinGA=0; D2PinBA=0;//Brak
M1C++;
break;
case 2:
D2PinRA=255; D2PinGA=0; D2PinBA=0;//Czerwony
M1C++;
break;
case 3:
D2PinRA=0; D2PinGA=0; D2PinBA=0;//Brak
M1C++;
break;
case 4:
D2PinRA=255; D2PinGA=255; D2PinBA=255;//Biały
M1C++;
break;
case 5:
D2PinRA=0; D2PinGA=0; D2PinBA=0;//Brak
M1C++;
break;
case 6:
D2PinRA=0; D2PinGA=0; D2PinBA=255;//Niebieski
M1C++;
break;
case 7:
D2PinRA=0; D2PinGA=0; D2PinBA=0;//Brak
M1C++;
break;
case 8:
D2PinRA=0; D2PinGA=0; D2PinBA=255;//Niebieski
M1C=0;
break;
default:
D2PinRA=255; D2PinGA=255; D2PinBA=255;//Biały (tylko gdyy wystapi blad).
M1C=0;
break;
}
rgb_set(D2PinRA, D2PinGA, D2PinBA);// Ustawia kolory ze sweitcha wyzej.
delay(100);//Odstep miedzy kazdym kolorem a brakiem koloru(0, 0, 0) i miedzy brakiem koloru a kolorem
} else if (Mode==2) { //Tryb drugi - stroboskop
D2PinRA=0; D2PinGA=0; D2PinBA=0; //Brak koloru (ciemno)
rgb_set(D2PinRA, D2PinGA, D2PinBA);
delay(50);
D2PinRA=255; D2PinGA=255; D2PinBA=255; //Biały
rgb_set(D2PinRA, D2PinGA, D2PinBA);
delay(50);
} else if (Mode==4) {
unsigned long startMillis= millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
M4CNN++;
while (millis() - startMillis < M4W)
{
M4S = analogRead(0);
if (M4S < 1024) { if (M4S > signalMax) { signalMax = M4S; } else if (M4S < signalMin) { signalMin = M4S; } }
}
peakToPeak = signalMax - signalMin;
if(M4MAX<peakToPeak) { M4MAX=peakToPeak*1.1; M4CNN=0; M4CNT=0; Serial.print("POZIOMOWANIE UP : "); Serial.println(M4MAX); }
if(peakToPeak<(M4MAX*0.6)) { M4CNT++; }
if(M4CNN>=20)
{
if(M4CNT>(M4CNN/2))
{
M4MAX=M4MAX*0.5; M4CNN=0; M4CNT=0;
if(M4MAX<20) { M4MAX=20; }
Serial.print("POZIOMOWANIE DN : "); Serial.println(M4MAX);
}
}
if(peakToPeak<=5) { D2PinRA=255; D2PinGA=255; D2PinBA=255;
} else {
if(peakToPeak>(M4MAX*0.95)) { D2PinRA=255; D2PinGA=0; D2PinBA=0; }
else if(peakToPeak>(M4MAX*0.9)) { D2PinRA=255; D2PinGA=0; D2PinBA=120; }
else if(peakToPeak>(M4MAX*0.8)) { D2PinRA=200; D2PinGA=0; D2PinBA=0; }
else if(peakToPeak>(M4MAX*0.7)) { D2PinRA=255; D2PinGA=0; D2PinBA=255; }
else if(peakToPeak>(M4MAX*0.6)) { D2PinRA=0; D2PinGA=50; D2PinBA=255; }
else if(peakToPeak>(M4MAX*0.5)) { D2PinRA=0; D2PinGA=150; D2PinBA=255; }
else if(peakToPeak>(M4MAX*0.4)) { D2PinRA=0; D2PinGA=255; D2PinBA=180; }
else if(peakToPeak>(M4MAX*0.3)) { D2PinRA=0; D2PinGA=255; D2PinBA=0; }
else if(peakToPeak>(M4MAX*0.2)) { D2PinRA=102; D2PinGA=255; D2PinBA=0; }
else if(peakToPeak>(M4MAX*0.1)) { D2PinRA=234; D2PinGA=255; D2PinBA=0; }
else { D2PinRA=255; D2PinGA=255; D2PinBA=255; }
}
rgb_set(D2PinRA, D2PinGA, D2PinBA);
} else {
if(D2Status==HIGH) { rgb_set(D2PinRA, D2PinGA, D2PinBA); } else { rgb_set(0, 0, 0); }
delay(50);
}
}
Pomysł fajny – kiedyś wiedziałem coś podobnego jako ‘ambient light’ do monitora, z tyłu były paski led i w zależności od tego co się dzieje na pulpicie windowsa ledy zmieniały kolor :)
Tylko coś dziwnie działa Ci ten tryb reakcji na muzykę – niby masz PWM, ale na filmiku widzę tylko i wyłącznie jak się włączają kolory czerwony i niebieski, żadnych przejściowych nie widzę. Ale to pewnie tylko kwestia dopracowania albo odczytu analogowego sygnału albo samego sterowania PWMem.
Poprawiłem teraz troche i jest lepiej, bo dodałem poziomowanie dźwieku, puścisz głośniej muzyke to się poziom zwiększa i więcej V potrzeba aby zaświecił się czerwony, puścisz cisze, poziom się obniża i mniej V potrzeba aby zaświecił się czerwony. Po za tym normalnie lepiej to wygląda niż na filmiku, może zaraz nagram jak to wygląda teraz. I jest tylko 10 kolorów, nie ustawiałem że w zależności od sygnału to wyliczalo kolor, tylko jak jest powyżej iluśtam to np. czerwony, troche ciszej to mniej czerwony (255 czerwonego i np. 100 niebeiskiego). Zaraz nagram i podeśle linka nowego.
Dobra, dodałem nowy filmik przedstawiający całe działanie sterownika :)
Fajne
Też pomyślałem że fajne, potem stwierdziłem że sobie takie cos zrobie, ale potem zobaczyłem że na arduini i taki chu* :D
Ja również ale jeśli ktoś chce to przedstawię alternatywę w postaci analogowej. ;) Jeśli uda mi się to dzisiaj zrobić to przedstawię na stronie, czy zwykły użytkownik może prezentować projekty? Jeśli ktoś chce bez Arduino niech pisze w komentarzy, pozdro 600 v. xxx32f9832h@gmail.com
7837684[
Czegokolwiek – piszemy razem :) (W czerwonej ramce)
Poprawione, dzięki :)
czekam aż user cube napisze że fritzing to nie schemat .
Za projekcik masz 5 :) Pozdrawiam
Chcę od jakiegoś czasu zrobić sobie lampkę rgb lecz napotkał mnie problem z tym, że uc jest na 5 v ,a diody na 12v. Tu dał mi pomysł ten post na użycie BUZ 11 ale po przeczytaniu zauważyłem błąd. W treści pisze ,że pierwsza nóżka do masy przez opornik ,a na rysunku jest ,że pierwsza nóżka do Andruino. Proszę o pomoc z podłączeniem BUZ ‘a.
Patrząc od przodu czyli metalowa cześć z tyłu jest, to pierwsza nózka od lewej – przez opornik 47k-100k do masy, oraz przez opornik 10R do arduino, środkowa nózka – środkowa do LEDów, a prawa do masy :)
Dziękuje za szybką odpowiedź.Pozdrawiam.
ugh, ten kod jest paskudny :V
ugh, ta ortografia jest paskudna :V
ugh, za piękny ten kod nie jest ale ciii…
ugh, pisałem jak umiałem, nie robię tego specjalnie, ugh.
Ps. O autokorekcie nie mów nic, nie mam polskiego windowsa >.< Więc wszystko mam podkreślone :) A propo kodu, to co Cię w nim tak boli ?
co do kodu to się zgodzę ale to arduino:( a ortografia jest nie ważna :), tak swoją drogą można by dodać szybką FT, lepiej by reagowało na poszczególne składowe.
szybka FT ? Yyy… sorry, nie wiem co to :/ Mógłbyś napisać jakoś bardziej opisowo czy coś :D To może skojarze :D
matrix14 Niewiem czy to to i czy mnei kojazysz jeszccze (Ddylon991) jezeli to ty wejdz na Ts :D ^^ Ah i fajny pomysl :)
Dzięki ;) Tak to ja :D Na korna ts ?
Tak :D bede o wieczorem na TS
Ddylon
Ja piernicze, skąd wy się bierzecie chłopaki? :D
no dokladnie! świetne pomysly!
pomysł – podłączyć lampki choinkowe/ledy, tak ze 4-5 zestawów i żeby zapalały się i gasły w rytm muzyki. Coś w tym stylu https://youtu.be/2ZH0eZ9KT1U
Ja jestem lama, ale może ktoś?
a czy może być arduino mega 2560 r3 zamiast tego co użyłeś ?
tak to wygląda:
http://arduinosolutions.com/environment/cache/images/0_0_productGfx_5a8dd67b23163fd4ea0d86626e6193e6.jpg
Witam
złożyłem na pająku ten układ, jako ze nie posiadałem czujnika podczerwieni a chciałem sprawdzić jak działa w trybie “mrugania w rytm muzyki” zmieniłem parametr z 19 linijki kogu na mode = 4, ale niestety rugają tylko 2 kolory 3 jest cały czas wyłączony.
czy kod jest poprawny czy jakoś inaczej trzeba ten tryb zainicjować??
pozdrawiam
Dodatkowo zauważyłem ze nie da sie ustawić 11 pinu pwm w tym programie. Dlaczego???
Tego sam nie wiem, ja chyba pomijałem pin 11 bo miałem problem z tym.
Mrugają w rytm muzyki ? Jeśli tak, to jest wszystko ok, bo program sam reguluje sobie dane i jak jest cichsza muzyka to jest bardziej wyczulone, spróbuj puścić cichą muzyke i nagle podgłoś na maximum.
Projekt bardzo ciekawy. Wiem że minęło już trochę czasu, ale może ktoś kombinował, jak przenieść całość na atmegę?
Witam. Wiem że robię wielki odkop, ale mam pytanie. Co zrobić jeżeli chcę podpiąć taśmę rgb, która ma 5m i pobór 36W ? Co należy zmienić w układzie?
Zasilanie nie z arduino tylko osobne