Problema Sketch per Servo360°

Ciao, a tutti sto ultimando una progettino a cui mi sono dedicato durante l'ultima fase di questo lockdown... Ossia vorrei realizzare una mangiatoia automatica per i pesci del mio piccolo acquario quando sono fuori casa per le vacanze che si attivi ogni 12 ore...

Questo è il mio "equipaggiamento" :

  • Arduino uno R3
  • Servo 360° Kookye Micro Servo Motor EAEC100300

Dato che sono proprio alle prime armi con la scritture degli sketch ho fatto un po' di ricerche su internet, nel forum e ho visto un po' di video tutorial e alla fine sono riuscito a scrivere uno sketch, ma non avendo molte conoscenze in merito (e avendo saltato un po' di passi) mi sono scontrato con alcuni problemi che sono riuscito a risolvere solo in parte dopo averci battuto il grugno per un po' ma una cosa proprio non mi torna...

#include <Servo.h>

Servo servo1;

void setup()
{
Serial.begin(115200);
delay(1000);
}

void loop()
{
servo1.attach(9); //*abilita pin 9 per il servo
servo1.writeMicroseconds(2000); //*rotazione antioraria del servo
delay(3000); //*delay 3s
servo1.detach(); //*disabilita servo
delay(43200000); //*delay 43200000s = 12h 
}

Con questo sketch sono riuscito a far fare al servo una rotazione breve ma per quanto riguarda il tempo di attesa, che vorrei fosse di 12 ore tra un'attivazione e l'altra, non funziona...perchè il servo si attiva ogni 24 ore...
quello che non riesco a capire è per quale motivo ruota dopo il doppio del tempo visto che la conversione di 12 ore in millisecondi è 43200000 ??

Ho fatto qualche errore macroscopico nello sketch che non vedo ?? Potete darmi una mano ?

Grazie

>erik87: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

modificato :blush:
scusate per la svista.... ;D

perchè il servo si attiva ogni 24 ore...

In effetti il calcolo mi corrisponde, poiché 1 ora è composta da 60 minuti, 1 minuto è composto da 60 secondi e 1 secondo è composto da 1000 millesimi di secondo, per cui 60 x 60 x 1000 x 12 = 43200000.

Controlla di avere selezionato la board corretta e non una che viaggia ad una frequenza di clock diversa da 16MHz.

Grazie Maurotec
ho controllato nel programma e la board selezionata è quella giusta, ma per la frequenza di clock ?? da dove la vedo ??

Nel reference si legge questo :

Notes and Warnings

U & L formatters:

By default, an integer constant is treated as an int with the attendant limitations in values. 
To specify an integer constant with another data type, follow it with:

    a 'u' or 'U' to force the constant into an unsigned data format. Example: 33u

    a 'l' or 'L' to force the constant into a long data format. Example: 100000L

    a 'ul' or 'UL' to force the constant into an unsigned long constant. Example: 32767ul

quindi prova ad aggiunger un 'UL' dopo il numero. Certo, ti tocca aspettare 12 ore per vedere se funziona...

Ciao, Ale.

Altro metodo che potrebbe funzionare, e secondo me migliore perchè più autoesplicativo, potrebbe essere questo

//    sec.   min  ora   
delay(1000 * 60 * 60 * 12);

Se un domani vuoi modificare il tempo è anche più facile, senza stare a rifare il calcolo.

Ciao, Ale.

Ciao ilguargua , scusa se rispondo solo ora ma sono stato impegnato con il lavoro....grazie per i suggerimenti, infatti visto che inserendo come ritardo 43200000ms il servo gira ogni 24h come prova becera ho provato a dimezzare semplicemente il valore del delay ma così facendo gira ogni 6h >:( >:( >:( >:( >:( provo ad aggiungere UL dopo il numero

Proverò subito a modificare lo sketch aggiungendo UL dopo il numero come mi hai suggerito, ma dici che devo inserire UL anche se scrivo il valore del ritardo come mi hai scritto nel secondo post ?? Perchè come hai riscritto tu il valore del ritardo è molto comodo e semplice

Grazie.

Vi farò sapere , a presto...

No, se usi il secondo esempio non occorre usare UL, perchè le costanti che usi rientrano nel range degli int .

Ciao, Ale.