#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#include <SoftwareSerial.h>
#define PIN 2
#define PIN1 9
SoftwareSerial serial2(5,6 ); // rx-tx
int prog = 0;
String woda = "";
int tim = 60;
int bri = 240;
int tim1 = 60;
int w = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(16, PIN1, NEO_GRB + NEO_KHZ800);
void setup() {
pinMode(13,OUTPUT);
pinMode(4,INPUT);
pinMode(3,INPUT); // Zasilanie BT
digitalWrite(13,LOW);
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code
serial2.begin(9600);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
strip1.begin();
strip1.show();
}
void loop() {
odczyt();
if (w==1)
{
w = 0;
}
else if (w==0 && tim == 0)
{tim = 60;
bri = 240;
strip.setBrightness(bri);
strip1.setBrightness(bri);
}
if (prog == 1) { // Pierwszy program led zmiana koloru kada dioda pokolei
colorWipe(strip.Color(255, 0, 0), tim); // Red
colorWipe(strip.Color(255, 80, 0), tim); // Orange
colorWipe(strip.Color(180, 255, 0), tim); // o-Green
colorWipe(strip.Color(0, 255, 0), tim); // Green
colorWipe(strip.Color(0, 255, 50), tim); // Green-B
colorWipe(strip.Color(0, 120, 255), tim); // G-Blue
colorWipe(strip.Color(0, 0, 255), tim); // Blue
colorWipe(strip.Color(80, 0, 255), tim); // Blue - R
colorWipe(strip.Color(255, 0, 80), tim); // B-Red
}
else if (prog == 2) {
theaterChase(strip.Color(180, 140, 110), tim); // White
}
else if (prog == 3) {
theaterChase(strip.Color(200, 0, 0), tim); // Red
}
else if (prog == 4) {
theaterChase(strip.Color(0, 200, 0), tim); // green
}
else if (prog == 5) {
theaterChase(strip.Color(0, 0, 200), tim); // Blue
}
else if (prog == 6) {
rainbow(tim);
}
else if (prog == 7) {
rainbowCycle(tim);
}
else if (prog == 8) {
theaterChaseRainbow(tim);
}
else
{ sleep(tim+2500);
}
}
//XXXXXXXXXXXXXXXXXX OCZYT XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void odczyt() {
if (serial2.available() > 0) {
woda = serial2.readStringUntil('\n');
if (woda == "p1")
{prog = 1;
tim = 0;}
else if (woda == "p2")
{prog = 2 ; tim = 0;}
else if (woda == "p3")
{prog = 3 ;tim = 0;}
else if (woda == "p4")
{prog = 4; tim = 0;}
else if (woda == "p5")
{prog = 5 ;tim = 0;}
else if (woda == "p6")
{prog = 6; tim = 0;}
else if (woda == "p7")
{prog = 7 ;tim = 0;}
else if (woda == "p8")
{prog = 8; tim = 0;}
else if (woda == "p9")
{prog = 9; tim = 0;}
if (woda == "t-"){
if (tim <= 240){
tim = tim + 10;
serial2.print("czas");
serial2.println(tim);
w=1;
}
}
if (woda == "t+"){
if (tim > 20){
tim = tim - 10;
serial2.print("czas");
serial2.println(tim);
w=1;
}
}
if (woda == "b+"){
if (bri < 230){
bri = bri + 20;
serial2.print("brighnes");
serial2.println(bri);
}
strip.setBrightness(bri);
strip1.setBrightness(bri);
}
if (woda == "b-"){
if (bri > 5){
bri = bri - 20;
serial2.print("brighnes");
serial2.println(bri);
}
strip.setBrightness(bri);
strip1.setBrightness(bri);
}
}
}
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip1.setPixelColor(i/1.5, c); // przygotowane dla dwóch ringów
strip.setPixelColor(i, c);
if (tim> 10){
strip1.show();
strip.show();}
else if (tim<10){
for(int x = 0; x < 24; x++){
strip.setPixelColor(x, strip.Color(0, 0, 0)); ///////////wyczysc ustawione
strip1.setPixelColor(x, strip.Color(0, 0, 0));
}}
odczyt();
delay(tim);
}
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i + j) & 255)); // przygotowane dla dwóch ringów
strip1.setPixelColor(i/1.5, Wheel((i + j) & 255));
odczyt();
}
if (tim> 10){
strip1.show();
strip.show();}
delay(tim);
}
}
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
uint16_t i, j, n;
for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); // przygotowane dla dwóch ringów
strip1.setPixelColor((i/1.5), Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
if (tim> 10){
strip1.show();
strip.show();}
odczyt();
delay(tim);
}
}
//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
for (int q = 0; q < 3; q++) {
for (int i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, c); //turn every third pixel on
strip1.setPixelColor(i + q, c);
}
if (tim> 10){
strip1.show();
strip.show();}
odczyt();
delay(tim);
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i + q, 0); //turn every third pixel off
strip1.setPixelColor(i + q, 0); //turn every third pixel off
}
}
}
}
//XXXXXXXXXXXXXXXXXXXXXX chaseRainbow XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void theaterChaseRainbow(uint8_t wait) {
for (int j = 0; j < 256; j++) { // cycle all 256 colors in the wheel
for (int q = 0; q < 3; q++) {
for (int i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, Wheel( (i + j) % 255));//turn every third pixel on
}
for (int i = 0; i < strip1.numPixels(); i = i + 3){ // przygotowane dla dwóch ringów
strip1.setPixelColor(i + q, Wheel( (i + j) % 255));
}
if (tim> 10){
strip1.show();
strip.show();}
odczyt();
delay(tim);
for (int i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, 0);
strip1.setPixelColor(i + q, 0); //turn every third pixel off
}
}
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXX SLEEP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void sleep(uint16_t wait) {
for(int x = 0; x < 24; x++){
strip.setPixelColor(x, strip.Color(0, 0, 0)); ///////////wyczysc ustawione
strip1.setPixelColor(x, strip.Color(0, 0, 0));
}
for (int x = 0; x < 4; x++) {
strip.setPixelColor(x * 6, strip.Color(9, 4, 0)); // Wersja z 4 ledami
strip.setPixelColor((x * 6) - 6, strip.Color(2, 1, 0));
if (x == 0) {
strip.setPixelColor(18, strip.Color(2, 1, 0));
strip.setPixelColor(12, strip.Color(2, 1, 0));
strip.setPixelColor(6, strip.Color(2, 1, 0));
}
if (tim> 10){
strip.show();}
strip1.setPixelColor(x * 4, strip1.Color(9, 4, 0));
strip1.setPixelColor((x * 4) - 4, strip1.Color(2, 1, 0));
if (x == 0) {
strip1.setPixelColor(4, strip1.Color(2, 1, 0));
strip1.setPixelColor(8, strip1.Color(2, 1, 0));
strip1.setPixelColor(12, strip1.Color(2, 1, 0));
}
if (tim> 10){
strip1.show();}
odczyt();
if (tim == 0)
{tim=0;}
else if (tim>10)
tim=2500;
delay(tim );
}
/*
for (int x = 0; x < 20; x++) {
strip.setPixelColor(0, strip.Color(x + 1, 0, 0));
strip.show();
delay(wait);
}
for (int x = 20; x > 0; x--) {
strip.setPixelColor(0, strip.Color(x + 1, 0, 0));
strip.show();
delay(wait);
}
*/
}
Troszeczkę się spóźniłeś, ale projekt robi wielkie wrażenie. Leci 5 gwiazdek.
Zacząłem go robić dokładnie rok temu :P Więc myślę, że musiało to nabrać mocy urzędowej :P
Projekt super, w sam raz do zrobienia na następne święta. Mógłbyś pochwalić się kodem i apką ?
Przypominam piąty punkt regulaminu konkursu:
5. Opublikowany projekt musi być kompletny, tj. posiadać wszystkie części dokumentacji (np. schematy, kody źródłowe, projekty płytek drukowanych, …), które są potrzebne do zrealizowania projektu.
(no chyba, że nie zależy Ci na otrzymaniu 50% rabatu do Nettigo:)
Efekt fajny ale brak kodu apk i źródła dla Arduino dyskwalifikuje projekt na tym portalu.
Teraz jest super
Fajnie że zmieniłeś zdanie w temacie kodu źródłowego. Dałbym teraz 5 gwiazdek ale ocen chyba nie da się zmienić.
Niestety się nie da. Ale w sumie pomyślę o tym… :)