salve tutti, mi presento mi chiamo Francesco ho 52 anni, sono un neofita e da qualche anno che seguo questo format, sono appassionato alle prime armi con l’elettronica e Arduino, anche quest’anno volevo usare Arduino nel mio presepe come lo scorso anno solo che lo sketch andò benissimo e i collegamenti con i led mi persi un pò e rimandai, da qualche mese praticamente ad ottobre che sto cercando di riprogrammare lo sketch perché o perso i dati sul vecchio pc che si era spento definitamente e ho dovuto cominciare di nuovo ma nulla da fare mi sono imbattuto su un problema e non riuscivo risolverlo, cercavo nel web soluzioni ma nulla al mio caso, anche nel format non c’era nulla per quanto ho letto quello a qui ho bisogno anche per il tempo fuori ambito lavorativo che ho. Arrivo al dunque, ho sottoscritto lo sketch (che dopo in fondo metterò in copia),praticamente mi funziona tutto cioè ho un audio che dura 11 minuti e in base come prosegue l’audio si dovrebbero accendere dei led a tempo e proprio nel tc che non riesco a capire se già sto sbagliando a calcolare in minuti cosi come scritti nello sketch, perché ho inserito tutti i pin taskpin e non superiore hai 32000 secondi non si accendono segue lo sketch;
Buonasera e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Detto questo, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita
che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione e sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. ;)
Grazie per la vostra accoglienza, non volevo mancare nelle regole, non è che non le ho lette l’ho capita male, se vede mi sono presentato all’inizio prima della richiesta di aiuto, ma non è un problema anzi accetto le regole come giusto che ci siano provvedo subito
Si certo, ma quella presentazione è legata a questa discussione, che, in poco tempo, viene sommersa da altre discussioni e scompare ... invece quella che richiediamo noi, nell'apposita sezione, è sempre facilmente trovabile e ci permette di vedere quali esperienze hai in elettronica e programmazione cosicché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
/**
* accende le luci delle case
* simula un fuoco
*
* sole: pwm pin 5
* case: pin 2
* fuoco: pwm pin 3
* case: pin 7
* case: pin 8
* case: pin 13
* case: pwm pin
* case: pin 4
* case: pwm pin 6
* capanna: pwm pin 9
* angelo: pwm pin 12
* Madonna e giuseppe
* con mp3 player (dfminiplayer)
* collegato sui pin:
* 10 rx <- tx player
* 11 tx -> rx player
*/
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial sSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
int trid = 0;
#define MAXTRACKS 4
int tracks[] = { 1, 3, 5, 7 };
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
randomSeed(analogRead(A0));
Serial.begin(9600);
sSerial.begin(9600);
while (!sSerial) delay(1);
Serial.println(F("Presepe V2.0"));
if (!myDFPlayer.begin(sSerial)) {
Serial.println(F("Error"));
while (true)
;
}
Serial.println(F("ready!"));
myDFPlayer.volume(30);
delay(1000);
myDFPlayer.play(tracks[0]);
trid++;
}
unsigned long tc, t1, t2;
void loop() {
tc = millis();
if ((tc - t1) > 660435) {
//Serial.print("t1: ");
//Serial.println(t1);
t1 = millis();
}
if ((tc - t2) > 100) {
//accende betlemm
taskPin(4, tc - t1, 28000, 660435, HIGH);
//accende e spegne le case1
taskPin(2, tc - t1, 50000, 62000, HIGH);
taskPin(2, tc - t1, 62000, 420000, LOW);
taskPin(2, tc - t1, 420000, 660435, HIGH);
//accende e spegne le case2
taskPin(3, tc - t1, 66000, 73000, HIGH);
taskPin(3, tc - t1, 73000, 420000, LOW);
taskPin(3, tc - t1, 420000, 660435, HIGH);
//accende e spegne le case1
taskPin(9, tc - t1, 80000, 100000, HIGH);
taskPin(9, tc - t1, 100000, 420000, LOW);
taskPin(9, tc - t1, 420000, 660435, HIGH);
//accende e spegne le case1
taskPin(6, tc - t1, 100000, 118000, HIGH);
taskPin(6, tc - t1, 118000, 420000, LOW);
taskPin(6, tc - t1, 420000, 660435, HIGH);
//accende capanna
taskPin(7, tc - t1, 111000, 180000, HIGH);
taskPin(7, tc - t1, 180000, 417000, LOW);
taskPin(7, tc - t1, 417000, 660435, HIGH);
//accende Gesù
taskPin(12, tc - t1, 122000, 660435, HIGH);
//accende L'Angelo
taskPin(8, tc - t1, 182000, 660435, HIGH);
//accende la Madonna e Giuseppe
taskPin(13, tc - t1, 122000, 660435, HIGH);
//il fuoco
fuoco(5);
//musica
music();
//Serial.println(tc-t1);
t2 = millis();
}
}
void taskPwm(int pin, unsigned long t, unsigned long t1, unsigned long t2, int l1, int l2) {
if (t >= t1 && t < t2) {
int pwm = map(t - t1, 0, t2 - t1, l1, l2);
analogWrite(pin, pwm);
}
}
void taskPin(int pin, unsigned long t, unsigned long t1, unsigned long t2, int stato) {
if (t >= t1 && t < t2) {
digitalWrite(pin, stato);
}
}
void fuoco(int pin) {
analogWrite(pin, random(256));
}
void music() {
//suona una dopo l'altra le tracce presenti sulla sdcard
int st = myDFPlayer.readState();
//Serial.println(st);
//513 è in play
//512 ha finito
if ((st == 512)) {
//ha terminato
myDFPlayer.play(tracks[trid]);
Serial.print("track: ");
Serial.println(tracks[trid]);
trid++;
if (trid >= MAXTRACKS) trid = 0;
} else if (st == 513) {
//playing...
}
}
grazie a tutti voi mi avete portato fortuna ho ritrovato lo sketch originale e ho risolto di sopra ho messo il se può servire a qualcuno mi fa piacere se mi dite come caricare un video saro molto lieto di condividere il lavoro. vi seguo e vi do i migliori auguri a tutti.
... prima lo carichi su YouTube e poi metti il link in un post.
Guglielmo
32000 secondi?... Quelli sono millisecondi e c'è la limitazione della capacità delle variabili: se usi delle int, fino a 32767; se usi delle unsigned int, fino a 65535. Però è molto più semplice se fai la base dei tempi in secondi, mettendo per esempio
uint32_t tempoSecondi = millis()/1000;
all'inizio del loop e usando tempoSecondi al posto di millis().