Le graffe delimitano una porzione di codice, ognuna può essere annidata dentro l'altra, cioè,
void loop() {
{
porzione 1
{
porzione 2 annidata
}
}
}
All'interno di una porzione di codice le variabili dichiarate al loro interno sono locali e quindi visibili solo al loro interno, vedi "Ambito di visibilità" o in inglese variable scope: link
Come detto chiamiamo per convenzione la porzione di codice delimitata da graffe con il nome "blocco di codice".
Un blocco di codice può essere o meno associato ad una istruzione (o comando), cioè l'istruzione if (condizione) ha ad esso associata una solo riga, diciamo che il blocco di codice associato implicitamente ad if non può essere più di una riga al cui termine c'è ";". Per estendere il blocco di codice della if lo esplicitiamo con le parentesi graffe. Questa è l'associazione di un blocco di codice ad una istruzione.
Una funzione ad esempio richiede per forza di cose un modo per esplicitare quale porzione di codice appartiene alla funzione, ecco che il blocco di codice viene usato per assegnare una porzione di codice ad un nome di funzione.
Se sai quello che stai facendo puoi anche usare blocchi di codice annidati e non associati, raramente ciò si fa.
io credevo che tra le tonde mettevi le condizioni per eseguire quello che avevi tra le graffe.
mmmh...
Tra le tonde puoi esplicitare la condizione, ma puoi elencare anche gli argomenti di una funzione, coma fai appunto in
void setColor(int redblue, int Uv, int bianco)
Riguardo al tuo progetto fai una sola animazione e postala. Se ci riesci metti l'animazione dentro il case 0. Sempre se ci riesci non usare while. for ed in generale istruzioni di ciclo. Quando l'animazione deve terminare assegna alla nightvariabile un valore diverso da zero.
Se ti servono i cicli usa una variabile per ogni ciclo e usa if e l'incremento come da esempio:
if (contatoreCiclo1 < 20)
contatoreCiclo1++;
contatoreCiclo1 verrà incrementata di uno fino al valore 19 (se parte da zero).
Puoi anche usare contatoreCiclo1 per terminare l'animazione, es:
if (contatoreCiclo1 == 19)
night = 1;
Nel realizzare l'animazione mantieni semplice il codice poiché potrebbe (è desiderabile) essere necessario scomporre il codice in più di uno switch case.
Se non usi for, while, do while e delay dentro il case puoi mettere fine prematura all'animazione spedendo da seriale un simbolo che una volta ricevuto da arduino mette tramite if (simbolo) night = 1;
Se te la senti dai una lettura e prova a sperimentare con il codice presente in questo thread
PS: c'è un piccolo errore in ciò che ho scritto, ma se OP sperimenta si accorge subito di ciò.
Ciao.