Buongiorno a tutti. Grazie al vostro aiuto prima per i collegamenti e poi per lo sketch ed i collegamenti, sono riuscito a creare e far funzionare il mio primo progetto, le luci per il presepio. Progetto molto semplice, ma mi è servito per capire moltissimo grazie ai consigli di tutti. Ora, dopo il cappello noiosissimo, il problema:
quando spengo Arduino e poi lo riaccendo, se non pigio il tasto reset non riparte. Per il resto va tutto alla grande. Le informazioni base che posso darvi sono che Arduino è alimentato con un alimentatore a 9 Volt e le luci con uno da 12V, il codice
int Giallo = 6;
int Rosso = 7;
int Cometa = 9;
int Capanna = 8;
int Casa1 = 13;
int Casa2 = 12;
int Casa3 = 11;
int Casa4 = 10;
// define directions for LED fade
#define UP 0
#define DOWN 1
// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 255;
// State Variable for Fade Direction
byte fadeDirection = UP;
byte CometaDirection = UP;
byte CapannaDirection = UP;
byte Casa1Direction = UP;
byte Casa2Direction = UP;
byte Casa3Direction = UP;
byte Casa4Direction = UP;
// Global Fade Value
// but be bigger than byte and signed, for rollover
int fadeValue = 0;
int CometaValue = 0;
int CapannaValue = 0;
int Casa1Value = 0;
int Casa2Value = 0;
int Casa3Value = 0;
int Casa4Value = 0;
// How smooth to fade?
byte fadeIncrement = 5;
// millis() timing Variable, just for fading
unsigned long previousFadeMillis;
unsigned long prevFireMillis;
unsigned long CometaPrima;
unsigned long CapannaPrima;
unsigned long Casa1Prima;
unsigned long Casa2Prima;
unsigned long Casa3Prima;
unsigned long Casa4Prima;
void setup() {
// put pwmLED into known state (off)
analogWrite(Casa1, fadeValue);
analogWrite(Casa2, fadeValue);
analogWrite(Casa3, fadeValue);
analogWrite(Casa4, fadeValue);
analogWrite(Cometa, fadeValue);
analogWrite(Capanna, fadeValue);
analogWrite(Giallo, fadeValue);
analogWrite(Rosso, fadeValue);
}
void doTheFade(unsigned long thisMillis,int lamp,int fade_lamp) {
// is it time to update yet?
// if not, nothing happens
if (thisMillis - previousFadeMillis >= fade_lamp) {
// yup, it's time!
if (fadeDirection == UP) {
fadeValue = fadeValue + fadeIncrement;
if (fadeValue >= maxPWM) {
// At max, limit and change direction
fadeValue = maxPWM;
fadeDirection = DOWN;
}
} else {
//if we aren't going up, we're going down
fadeValue = fadeValue - fadeIncrement;
if (fadeValue <= minPWM) {
// At min, limit and change direction
fadeValue = minPWM;
fadeDirection = UP;
}
}
// Only need to update when it changes
analogWrite(lamp, fadeValue);
// reset millis for the next iteration (fade timer only)
previousFadeMillis = thisMillis;
}
}
/*
----------------------------- CASA 1 -------------------------
*/
void fade_casa1(unsigned long Casa1Ora,int Casa1Fade) {
// is it time to update yet?
// if not, nothing happens
if (Casa1Ora - Casa1Prima >= Casa1Fade) {
// yup, it's time!
if (Casa1Direction == UP) {
Casa1Value = Casa1Value + fadeIncrement;
if (Casa1Value >= maxPWM) {
// At max, limit and change direction
Casa1Value = maxPWM;
Casa1Direction = DOWN;
}
} else {
//if we aren't going up, we're going down
Casa1Value = Casa1Value - fadeIncrement;
if (Casa1Value <= minPWM) {
// At min, limit and change direction
Casa1Value = minPWM;
Casa1Direction = UP;
}
}
// Only need to update when it changes
analogWrite(Casa1, Casa1Value);
// reset millis for the next iteration (fade timer only)
Casa1Prima = Casa1Ora;
}
}
/*
----------------------------- COMETA -------------------------
*/
void fade_cometa(unsigned long CometaOra,int CometaFade) {
// is it time to update yet?
// if not, nothing happens
if (CometaOra - CometaPrima >= CometaFade) {
// yup, it's time!
if (CometaDirection == UP) {
CometaValue = CometaValue + fadeIncrement;
if (CometaValue >= maxPWM) {
// At max, limit and change direction
CometaValue = maxPWM;
CometaDirection = DOWN;
}
} else {
//if we aren't going up, we're going down
CometaValue = CometaValue - fadeIncrement;
if (CometaValue <= minPWM) {
// At min, limit and change direction
CometaValue = minPWM;
CometaDirection = UP;
}
}
// Only need to update when it changes
analogWrite(Cometa, CometaValue);
// reset millis for the next iteration (fade timer only)
CometaPrima = CometaOra;
}
}
/*
----------------------------- CAPANNA -------------------------
*/
void fade_capanna(unsigned long CapannaOra,int CapannaFade) {
// is it time to update yet?
// if not, nothing happens
if (CapannaOra - CapannaPrima >= CapannaFade) {
// yup, it's time!
if (CapannaDirection == UP) {
CapannaValue = CapannaValue + fadeIncrement;
if (CapannaValue >= maxPWM) {
// At max, limit and change direction
CapannaValue = maxPWM;
CapannaDirection = DOWN;
}
} else {
//if we aren't going up, we're going down
CapannaValue = CapannaValue - fadeIncrement;
if (CapannaValue <= minPWM) {
// At min, limit and change direction
CapannaValue = minPWM;
CapannaDirection = UP;
}
}
// Only need to update when it changes
analogWrite(Capanna, CapannaValue);
// reset millis for the next iteration (fade timer only)
CapannaPrima = CapannaOra;
}
}
void fire() {
unsigned long fireTime = 0;
if ( millis() - fireTime >= 0 )
{
analogWrite(Giallo, int(random(10,255)));
analogWrite(Rosso, int(random(50,255)));
fireTime = millis() + int(random(40,120));
}
}
void loop() {
// get the current time, for this time around loop
// all millis() timer checks will use this time stamp
unsigned long currentMillis = millis();
fade_casa1(currentMillis,50);
fade_casa2(currentMillis,50);
fade_casa3(currentMillis,80);
fade_casa4(currentMillis,80);
fade_capanna(currentMillis,50);
fade_cometa(currentMillis,50);
fire();
}
e lo schema molto semplificato
tenendo conto che le luci delle case non sono dei led ma le vecchie lampadine tramite un ULN2803A più o meno come le istruzioni che mi sono state date da un "santo" del Forum
se serve altro dite pure
ciao
Emanuele
P.S. ho tolto un po' di codice perchè erano troppi caratteri per il post

