ciao a tutti, ho un problema nel visualizzare i minuti con il neopixel ring
16x, ogni led integra un circuito che regola il colore(RGB) di ogni singolo led
e utilizza un solo pin di arduino per comandarli.
per visualizzare l'ora ho risolto con un switch/case per ogni singola ora, il
problema si presenta con i minuti visto che ogni led mi deve visualizzare
quando sono passati 3min e 45sec e fare accendere quello successivo quando
ne passano altri 3min e 45sec e così via.... non ho troppe idee a riguardo, speriamo
che riuscite a darmi una mano ma sicuramente sarà cosi XD vi posto il codice e una
che vi può chiarire le idee https://db.tt/EEWc5PBD
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6
byte prev_second=0;
int pin_ledSec = 15;
RTC_DS1307 rtc;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, PIN, NEO_GRB + NEO_KHZ800);
void setup () {
Wire.begin();
rtc.begin();
strip.begin();
strip.show();
}
void loop () {
DateTime now = rtc.now();
strip.setBrightness(128);
set_ora();
set_sec();
}
void set_ora(){
DateTime now = rtc.now();
switch(now.hour())
{
case 0:
strip.setPixelColor(15, 0, 0, 200); // il 15 è il num del pin , il resto sono i valori dell'RGB
strip.setPixelColor(0, 0, 0, 200);
strip.show();
break;
case 1:
strip.setPixelColor(14, 0, 0, 200);
strip.show();
break;
case 2:
strip.setPixelColor(13, 0, 0, 200);
strip.show();
break;
case 3:
strip.setPixelColor(12, 0, 0, 200);
strip.setPixelColor(11, 0, 0, 200);
strip.show();
break;
case 4:
strip.setPixelColor(10, 0, 0, 200);
strip.show();
break;
case 5:
strip.setPixelColor(9, 0, 0, 200);
strip.show();
break;
case 6:
strip.setPixelColor(8, 0, 0, 200);
strip.setPixelColor(7, 0, 0, 200);
strip.show();
break;
case 7:
strip.setPixelColor(6, 0, 0, 200);
strip.show();
break;
case 8:
strip.setPixelColor(5, 0, 0, 200);
strip.show();
break;
case 9:
strip.setPixelColor(4, 0, 0, 200);
strip.setPixelColor(3, 0, 0, 200);
strip.show();
break;
case 10:
strip.setPixelColor(2, 0, 0, 200);
strip.show();
break;
case 11:
strip.setPixelColor(1, 0, 0, 200);
strip.show();
break;
case 12:
strip.setPixelColor(15, 0, 0, 200);
strip.setPixelColor(0, 0, 0, 200);
strip.show();
break;
case 13:
strip.setPixelColor(14, 0, 0, 200);
strip.show();
break;
case 14:
strip.setPixelColor(13, 0, 0, 200);
strip.show();
break;
case 15:
strip.setPixelColor(12, 0, 0, 200);
strip.setPixelColor(11, 0, 0, 200);
strip.show();
break;
case 16:
strip.setPixelColor(10, 0, 0, 200);
strip.show();
break;
case 17:
strip.setPixelColor(9, 0, 0, 200);
strip.show();
break;
case 18:
strip.setPixelColor(8, 0, 0, 200);
strip.setPixelColor(7, 0, 0, 200);
strip.show();
break;
case 19:
strip.setPixelColor(6, 0, 0, 200);
strip.show();
break;
case 20:
strip.setPixelColor(5, 0, 0, 200);
strip.show();
break;
case 21:
strip.setPixelColor(4, 0, 0, 200);
strip.setPixelColor(3, 0, 0, 200);
strip.show();
break;
case 22:
strip.setPixelColor(2, 0, 0, 200);
strip.show();
break;
case 23:
strip.setPixelColor(1, 0, 0, 200);
strip.show();
break;
}
}
void set_sec(){
DateTime now = rtc.now();
if(pin_ledSec == -1){pin_ledSec =15;} // questo if serve per far riprendere il ciclo orario del led
if(now.second() != prev_second){
prev_second = now.second();
strip.setPixelColor(pin_ledSec, 0, 200, 0);
strip.show();
delay(999);
strip.setPixelColor(pin_ledSec, 0, 0, 0);
strip.show();
if(pin_ledSec < 16){pin_ledSec = pin_ledSec-1;}
}
}