fasi lunari

salve,
vorrei creare un codice per simulare le fasi lunari , escludendo l orario del sorgere e del tramontare della luna , vorrei almeno impostare la quantita di luce , praticamente un ciclo che porti la potenza da 1 a 10 ,consideramdo che le fai lunari durano 28 giorni ,
la soluzione che mi e venuta in mente è una caterba di if uno per ogni giorno , pero , e correggetemi se sbaglio,
la cosa si puo fare anche con un arry.. giusto?
grazie

Cioè: da 0 a 10 in ventotto passi
Oppure da 0 a 10 in quattordici passo e poi da 10 a zero
Con o senza decimali?

da 1 a 10 era un esempio considerando che va da 0 a 255 e dovendo simulare la luce lunare io direi da 0 a 127 poi questo valore dovro testarlo per trovare la configurazione migliore ,

Ma per comandare un pwm?

Ma non ho capito esattamente cosa dovrebbe fare il tutto.
Se la distanza dai passi fosse uguale e ci fosse un passo al giorno allora non servirebbero if o altro. Comunque descrivi meglio le esigienze con queste regole:
1)NON soltanto postando video o link a video, perché devi essere TU capace di spiegare COSA vuoi
2)NON parlare di COME (scarch o logica), ma solo di COSA vuoi fare
3)se hai limiti di tempo dilli SUBITO. Non importa quanto siano lunghi, tu dilli.
4)informa di TUTTO il progetto e metti il link a TUTTI gli eventuali componenti "strani" che usi.

ricomincio perche ho visto che ci sono altri modi per costruire il circuito che mi deve pilotare una striscia led.
semplicemente mi basta variare l uscita in pwm da 0 a 255 in un lasso di 28 giorni , pero bisogna che la striscia led ( simulando la luna si deve accendere e ad ogni accensione variare il valore praticamente iniziando da 0 al giorno 1 per arrivare a 255 al giorno 14 per poi calare fino a 0 al giorno 28.
l intensita della luce la imposto da un trimmer nel circuito che gestisce i 12 v che servono alla striscia led
cioè
giorno uno dalle esempio 20 alle 6 valore 0 , giorno 2 dalle 20 alle 6 valore 2 ecc......per poi tornare a zero al giorno 28
per gestire la fase di 28 giorni potrei impostare una variabile che gestisce il valore 0/255 aumentando il valore fino a quando la variabile vale 14 e poi farlo scendere fino a quando la variabile vale 28 , a 28 la variabile ( dopo aver modificato il valore) viene resettata e portata a zero
il ragionamento puo andare?
grazie per le risposte

Ma se hai un RTC e quindi conosci la data esatta, puoi usare questa funzione che ho trovato in rete (penso che sia corretta), quando ritorna zero indica luna nuova, 255 luna piena:

byte GetPhase(int nYear, int nMonth, int nDay) // calculate the current phase of the moon
{
  float phase;
  double AG, IP;
  long YY, MM, K1, K2, K3, JD;
  YY = nYear - floor((12 - nMonth) / 10);
  MM = nMonth + 9;
  if (MM >= 12)
    MM = MM - 12;
  K1 = floor(365.25 * (YY + 4712));
  K2 = floor(30.6 * MM + 0.5);
  K3 = floor(floor((YY / 100) + 49) * 0.75) - 38;
  JD = K1 + K2 + nDay + 59;
  if (JD > 2299160)
    JD = JD - K3;
  IP = MyNormalize((JD - 2451550.1) / 29.530588853);
  AG = IP * 29.53;
  phase = AG;
  if ( phase <= 14 )
  	return map(AG,0,14,0,255);
  else
  	return map(AG,14,29,255,0);
}

double MyNormalize(double v)
{
  v = v - floor(v);
  if (v < 0)
    v = v + 1;
  return v;
}

Inoltre ... deve solo "accendersi e spegnersi" secco, oppure anche aumentare e diminuire la luminosita' durante acensioni e spegnimenti, per simularla piu correttamente ?

Array di 28 elementi contenenti il comando pwm per ogni giorno, una variabile che una volta al giorno, a mezzanotte, si alza di 1, l'indice dell'array. Facile facile.
Per fare prima bisognerebbe sapere se possiamo calcolare la potenza pwm

Etemenanki:
Inoltre ... deve solo "accendersi e spegnersi" secco, oppure anche aumentare e diminuire la luminosita' durante acensioni e spegnimenti, per simularla piu correttamente ?

Eh si, così pare abbia detto, una luminosità che rappresenti la fase corrente. La funzione che gli ho indicato fa questo restituendo un valore tra 0 e 255, se hai visto.. :slight_smile:

Silente:
Array di 28 elementi contenenti il comando pwm per ogni giorno, una variabile che una volta al giorno, a mezzanotte, si alza di 1, l'indice dell'array. Facile facile.

Si ma ragazzi, la fase lunare non è mica esattamente di 28 giorni (ma neanche 29, sono 29 giorni, 12 ore, 44 minuti e 3 secondi), non si può mica fare così "semplice semplice"! :slight_smile:

Ma il codice che ho postato lo avete visto o no??? Secondo voi perché nella funzione si moltiplica per 29.53 (il valore decimale del numero di giorni della fase lunare)? Poi ho messo io la if() con i due map() ma insomma...

Sei un grande, ma lo sapevo già
Giusto per curiosità dove la hai trovata?

me la segno :smiley:

grazie per l aiuto ,
per la quanto riguarda luce

Etemenanki:
Inoltre ... deve solo "accendersi e spegnersi" secco, oppure anche aumentare e diminuire la luminosita' durante acensioni e spegnimenti, per simularla piu correttamente ?

si una fase di spegnimento ed accensione simula meglio la fase lunare ma per il momento mi accontenterei di fare un semplice on off

docdoc:
Ma se hai un RTC e quindi conosci la data esatta, puoi usare questa funzione che ho trovato in rete (penso che sia corretta), quando ritorna zero indica luna nuova, 255 luna piena:

byte GetPhase(int nYear, int nMonth, int nDay) // calculate the current phase of the moon

{
 float phase;
 double AG, IP;
 long YY, MM, K1, K2, K3, JD;
 YY = nYear - floor((12 - nMonth) / 10);
 MM = nMonth + 9;
 if (MM >= 12)
   MM = MM - 12;
 K1 = floor(365.25 * (YY + 4712));
 K2 = floor(30.6 * MM + 0.5);
 K3 = floor(floor((YY / 100) + 49) * 0.75) - 38;
 JD = K1 + K2 + nDay + 59;
 if (JD > 2299160)
   JD = JD - K3;
 IP = MyNormalize((JD - 2451550.1) / 29.530588853);
 AG = IP * 29.53;
 phase = AG;
 if ( phase <= 14 )
  return map(AG,0,14,0,255);
 else
  return map(AG,14,29,255,0);
}

double MyNormalize(double v)
{
 v = v - floor(v);
 if (v < 0)
   v = v + 1;
 return v;
}

si ho un rtc , la fase lunare e un altro pezzetto dell sistema che mi controllera l acquario , la parte giorno con alba e tramonto e gia pronta e testate , ora manca la parte notte ti ringrazio per la segnalazione , ma non riesco a capirci nulla :frowning: stamani guardo di studiarmelo un po , il copia incolla non mi piace.
vorrei anche imparare qualcossa, se non chiedo troppo potresti commentarlo? cosi ,magari, imparo qualcosa .
grazie dell aiuto e della pazienza

Forse ti serve leggere anche qui

//_____________________________________________________________________________________________________________________
//VARIABILI RTC
int long ore;
int long minuti ;
int long secondi ;
int long mese;
//___________________________________________________________________________________________________________________
  // VARIABILE POSIZIONE SERVO
int pos = 0;
//___________________________________________________________________________________________________________
//USCITE LUCI
#define luci_bianche 3
#define luci_rosse 5
#define luci_viola  6
#define accensionelcd 8

//______________________________________________________________________________________________________________________

// LIBRERIE RTC
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;
//_______________________________________________________________________________________________________________________
//LIBRERIA SERVO
#include <Servo.h>
//_______________________________________________________________________________________________________________________
//LIBRERIE TERMOMETRO 
#include <OneWire.h>
#include <DallasTemperature.h>
#define ACQUA_TEM 2 // assegna il valore 2 al nome ONE_WIRE_BUS
OneWire oneWire(ACQUA_TEM); // associa alla porta 2 (valore di ONE_WIRE_BUS) il
// canale dati dei sensori
DallasTemperature sensors(&oneWire); //trasferisce alle routine della libreria DallasTemperature
// il controllo delle funzioni OneWire
#include <DallasTemperature.h> // dichiarazione di utilizzo della libreria DallasTemperature.h


//_____________________________________________________________________________________________________________________________

Servo myservo;  // create servo obbiettivo
//__________________________________________________________________________
//SONDA PH
const int pinPo = A0;//PIN COLLEGAMENTO SONDA PH


//__________________________________________________________________________________________________
//-----------------lcd
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x20,16,2);  //dichiara il display "lcd" di tipo 16x2 all'indirizzo 0x20
int backlight = 10;

//--------------------------------------------------SETUP--------------------------------------------------------------------------------------

void setup() {
Serial.begin(9600);
//definisco pin luci
pinMode(luci_bianche, OUTPUT);
pinMode(luci_rosse, OUTPUT);
pinMode(luci_viola, OUTPUT);
pinMode(accensionelcd, INPUT);//definisco input il pin 8
backlight = 0;//spengo lcd
pinMode(accensionelcd, INPUT);
//definico  pin servo cibo
myservo.attach(9);

sensors.begin();
//____________________________________________________________________________________________________________________________
  DateTime now = rtc.now();

//Per comodità uso variabili e non direttamente ciò che restituisce il modulo RTC
int long  ore = now.hour();
int long minuti = now.minute();
int long secondi = now.second();
int long anno = now.year();
 int long mese = now.month();
//_________________________________________________________________________________________________________________________________
//setup termometro
// Start up the library
sensors.begin();
 
}
void loop()
{
lcd.setBacklight(1);// vorrei accendere lcd premendo un pulsane per non lasciarlo sempre acceso mi basta inserire un pin mode nel loop?
 DateTime now = rtc.now();
 myservo.write(pos); 
 if(accensionelcd, HIGH){//impostato cosi premento il pulsante collegato al pin 8 l cd si accende ?
  backlight = 10;
 }
 else{ backlight = 0;}
 
 int anni = now.year();
 int mesi = now.month();
 int giorni = now.day();
 int ore= now.hour();
 int minuti= now.minute();
 int secondi = now.second();
//timer 
lcd.setCursor(0, 0);
lcd.print(ore);
lcd.print(":");
lcd.print(minuti);
lcd.print(":");
lcd.print(secondi);
  delay(1000);
  lcd.setCursor(1, 0);
  lcd.print("temp:");
  lcd.print("ACQUA_TEM");
  lcd.print("ph");
  lcd.print("vyslednePH");

//____________________________________________________________STAGIONI__________________________________________________________
//__FUNZIONE LUCI PRIMAVERA

if( mese>=3 && mese<=5 )  
{ ACC_PRIMAVERA_LED_ROSSI();
ACC_PRIMAVERA_LED_VIOLA();
ACC_PRIMAVERA_LED_BIANCHI();
}

//____FUNZIONE LUCI ESTATE

if( mese>=6 && mese<=8 )
{ ACC_ESTATE_LED_ROSSI();
ACC_ESTATE_LED_VIOLA();
ACC_ESTATE_LED_BIANCHI();
}


//________FUNZIONE LUCI AUTUNNO


if( mese>=9 && mese<=11 )  
{ ACC_AUTUNNO_LED_ROSSI();
ACC_AUTUNNO_LED_VIOLA();
ACC_AUTUNNO_LED_BIANCHI();
}


//_FUNZIONE INVERNO


if( mese>=12 && mese<=2 )  
{ ACC_INVERNO_LED_ROSSI();
ACC_INVERNO_LED_VIOLA();
ACC_INVERNO_LED_BIANCHI();
}

////////////////////loop termometro
termometro();
///////////////////loop ph
ph(); 

}

//------------------------------LUCI----------------------------------------------

//______________PRIMAVERA_____________________________________________________________________



//FUNZIONE ORARI PRIMAVERA ACCENSIONE , SPEGNIMENTO LUCI ROSSE

void ACC_PRIMAVERA_LED_ROSSI() {

if ((ore == 7) && (minuti == 30)) { // se sono le 7,30 accendi luci ROSSE
  accensione_Led_rossi();
 
  }
  if((ore == 19) && (minuti == 30)){// se sono le 19,30 spegni luci ROSSE
 spegnimento_Led_rossi();
}

}

//______________________________________________FINE LUCI ROSSE  PRIMAVERA___________________________________
//----------------------------------------------------------------------------------------------------------------------------------------------------

//FUNZIONE ORARI PRIMAVERA ACCENSIONE , SPEGNIMENTO LUCI VIOLA 

void ACC_PRIMAVERA_LED_VIOLA() {

if ((ore == 7) && (minuti == 30)) { // se sono le 7,30 accendi luci VIOLA
  accensione_Led_viola();
 
  }
  if((ore == 19) && (minuti == 30)){// se sono le 19,30 spegni luci VIOLA
 spegnimento_Led_viola();
}

}

// _______________________________________________FINE LUCI VIOLA PRIMAVERA_____________________________________________
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
//___________________________________________________________________________________________________________________________

//FUNZIONE ORARI PRIMAVERA ACCENSIONE , SPEGNIMENTO LUCI  BIANCHE

void ACC_PRIMAVERA_LED_BIANCHI() {
 
 if ((ore == 7) && (minuti == 40)) { // se sono le 7,40 accendi luci BIANCHI
   accensione_Led_bianchi();
   cibo();
   }
   if((ore == 19) && (minuti == 20)){// se sono le 19,20spegni luci BIANCI
  spegnimento_Led_bianchi();
 }

}

//_________________________________________________FINE LUCI BIANCHE_____________________________________________________________
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//________FINE PRIMAVERA________________________________________________________________________________________________________

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//__________ESTATE_____________________________________________________________________________________________________________


//FUNZIONE ORARI ESTATE ACCENSIONE , SPEGNIMENTO LUCI  ROSSE


void ACC_ESTATE_LED_ROSSI() {

if ((ore == 6) && (minuti == 30)) { // se sono le 7,30 accendi luci ROSSE
  accensione_Led_rossi();
 
  }
  if((ore == 20) && (minuti == 30)){// se sono le 19,30 spegni luci ROSSE
 spegnimento_Led_rossi();
}

}
//____________________________________________________ FINE LUCI ROSSE ESTATE_____________________________________________________

//-------------------------------------------------------------------------------------------------------------------------------------



//FUNZIONE ORARI ESTATE ACCENSIONE , SPEGNIMENTO LUCI  VIOLA


void ACC_ESTATE_LED_VIOLA() {

if ((ore == 6) && (minuti == 30)) { 
  accensione_Led_viola();
 
  }
  if((ore == 20) && (minuti == 30)){
 spegnimento_Led_viola();
}

}
//_______________________________________________________FINE FUNZIONE VIOLA ESTATE__________________________________________________________
//----------------------------------------------------------------------------------------------------------------------------------------------

//FUNZIONE ESTATE ACCENSIONE , SPEGNIMENTO LUCI BIANCHE


void ACC_ESTATE_LED_BIANCHI() {

if ((ore == 6) && (minuti == 40)) { 
  accensione_Led_bianchi();
 
  }
  if((ore == 20) && (minuti == 20)){
 spegnimento_Led_bianchi();
}

}


//_______________________________________________________FINE FUNZIONE BIANCHE ESTATE_________________________________________________________

//________________________________________________________________FINE ESTATE_______________________________________________________________

//----------------------------------------------------------------------------------------------------------------------------------------------------------

//___________________FUNZIONE AUTUNNO______________________________________________________________________________________________________


//_________FUNZIONE AUTUNNO ACCENSIONE , SPEGNIMENTO LUCI ROSSE


void ACC_AUTUNNO_LED_ROSSI() {
 
 if ((ore == 7) && (minuti == 30)) { // se sono le 7,40 accendi luci ROSSE
   accensione_Led_rossi();
   cibo();
   }
   if((ore == 19) && (minuti == 30)){// se sono le 19,20spegni luci ROSSE
  spegnimento_Led_rossi();
 }

}

//FINE LUCI ROSSE 

//__________________________________________________________________________________

//__________FUNZIONE AUTUNNO ACCENSIONE , SPEGNIMENTO LUCI VIOLA


void ACC_AUTUNNO_LED_VIOLA() {
 
 if ((ore == 7) && (minuti == 30)) { // se sono le 7,40 accendi luci VIOLA
   accensione_Led_viola();
   cibo();
   }
   if((ore == 19) && (minuti == 30)){// se sono le 19,20spegni luci VIOLA
  spegnimento_Led_viola();
 }

}

// FINE FUNZIONE VIOLA____________________

//__________________________________________________________________________________________________

//____________FUNZIONE AUTUNNO ACCENSIONE , SPEGNIMENTO LUCI BIANCHE

void ACC_AUTUNNO_LED_BIANCHI() {
 
 if ((ore == 7) && (minuti == 40)) { // se sono le 7,40 accendi luci BIANCHI
   accensione_Led_bianchi();
   cibo();
   }
   if((ore == 19) && (minuti == 20)){// se sono le 19,20spegni luci BIANCI
  spegnimento_Led_bianchi();
 }

}

// FINE FUNZINE BIANCHE

//___________________FINE AUTUNNO_____________________________

//________________________________________________________________________________________________________________________________________

//___________________FUNZIONE INVERNO_____________________________________________________________________________________________________


//FUNZIONE INVERNO ACCENSIONE , SPEGNIMENTO LUCI ROSSE



void ACC_INVERNO_LED_ROSSI(){

if ((ore == 8) && (minuti == 30)) {
  accensione_Led_viola();
 
  }
  if((ore == 19) && (minuti == 30)){
 spegnimento_Led_viola();
}

}

//_______FINE LUCI ROSSE

//____________________________________________________________________________________________________________________
//FUNZIONE INVERNO ACCENSIONE , SPEGNIMENTO LUCI VIOLA


void ACC_INVERNO_LED_VIOLA(){

if ((ore == 8) && (minuti == 30)) {
  accensione_Led_viola();
 
  }
  if((ore == 19) && (minuti == 30)){
 spegnimento_Led_viola();
}

}

// FINE LUCI VIOLA

//________________________________________________________________________________________________________

//FUNZIONE INVERNO ACCENSIONE , SPEGNIMENTO LUCI BIANCHE


void ACC_INVERNO_LED_BIANCHI() {

if ((ore == 8) && (minuti == 30)) {
  accensione_Led_bianchi();
 
  }
  if((ore == 19) && (minuti == 30)){
 spegnimento_Led_bianchi();
}

}

// FINE FUNZIONE LUCI BIANCHE________________________________________

//___________________FINE INVERNO___________________________________

//_-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//___________________________FUNZIONE FADE_____________________________________--

// FUNZIONI FADE LUCI ROSSE_______________________________________________________________________________________________________________________________________________________________
// DA CALIBRARE

void  accensione_Led_rossi() {
 for (int fadeValue = 0 ; fadeValue <= 100; fadeValue += 1) {
   analogWrite(luci_rosse, fadeValue);

   delay(20);
 }
}

void spegnimento_Led_rossi() {
 for (int fadeValue = 100 ; fadeValue >= 0; fadeValue -= 1) {
   analogWrite(luci_rosse, fadeValue);
  
   delay(20);
 }
}
//////////////////////FINE FADE ROSSE
//______________________________________________________________________________________________________________________________

// FUNZIONI FADE LUCI VIOLA_______________________________________________________________________________________________________________________________________________________________
// DA CALIBRARE

void accensione_Led_viola() {
 for (int fadeValue = 0 ; fadeValue <= 100; fadeValue += 1) {
   analogWrite(luci_viola, fadeValue);
   
   delay(20);
 }
}

void spegnimento_Led_viola() {
 for (int fadeValue = 100 ; fadeValue >= 0; fadeValue -= 1) {
   
   analogWrite(luci_viola, fadeValue);
   delay(20);
 }
}
//////////////////////FINE FADE VIOLA
//__________________________________________________________________________________________________________

//__FUNZIONE FADE  LUCI BIANCHE

void accensione_Led_bianchi() {
 for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
   analogWrite(luci_bianche, fadeValue);
 
   delay(20);
 }
}

void spegnimento_Led_bianchi() {
 for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 1) {
   analogWrite(luci_bianche, fadeValue);
   
   delay(20);
 }
}
//f///////////////////////FINE FADE BIANCHE



//--------------------------------------------------------------------------------------------------------------------------


//____________________________FUNZIONE CIBO_________________________________________________________________________________



void cibo() {
 for (pos = 0; pos <= 90; pos += 1) { // la camma va da 0 a 90 gradi
   // in steps of 1 degree
   myservo.write(pos);            
   delay(15);                      
 }
 for (pos = 90; pos >= 0; pos -= 1) { //la camma torna da 909 a 0 grado
   myservo.write(pos);              
   delay(15);                      
 }
}
////////////////////////////////FINE FUNZIONE CIBO

//-----------------------------------------------------------------------------------------------------------------------------------

//__________________________________FUNZIONE TERMOMETRO__________________________________________
void termometro()
{
 

}


////////////////fine funzione termometro

//_____________________________________________________________________________________________________________________________

//FUNZIONE PH COPIATO DAL PRODUTTORE

void ph(){

 int pole[10];
 int zaloha;
 unsigned long int prumerVysl = 0;
 // RECUPERA 10 CAMPIONI PER 10MS NELL ARRAY
 for (int i = 0; i < 10; i++) {
   pole[i] = analogRead(pinPo);
   delay(10);
 }
 // ORDINA NUMERI PER DIMENSIONE
 for (int i = 0; i < 9; i++) {
   for (int j = i + 1; j < 10; j++) {
     if (pole[i] > pole[j]) {
       zaloha = pole[i];
       pole[i] = pole[j];
       pole[j] = zaloha;
     }
   }
 }
 // uložení 2. až 8. výsledku do
 // proměnné, z které se vypočte průměr
 // (vynechání dvou členů pole na začátku
 // a konci pro lepší přesnost)
 for (int i = 2; i < 8; i++) {
   prumerVysl += pole[i];
 }
 // výpočet hodnoty pH z průměru
 // měření a přepočet na rozsah 0-14 pH
 float prumerPH = (float)prumerVysl * 5.0 / 1024 / 6;
 float vyslednePH = -5.70 * prumerPH + 21.34;
 // vytištění výsledků po sériové lince
 Serial.print("pH: ");
 Serial.println(vyslednePH);
 // pauza 900 ms před novým měřením, celkem tedy 1s
 delay(900);
}

fasi-lunari(){
 if
}

secondo lo schema che mi hai suggerito quel codice è piu di quello che mi servirebbe.
a me basta impostare una fase per un singolo mese e poi ripeterla .
quindi
imposto le variabili
constint capomese = 11 , ripeto sempre la fase che e a gennaio .
poi imposto una variabile a cui assegno l operazione che somma il giorno al capo mese

int gc ;
imposto la variabile a cui assegno il risultato dalla sottrazione di 30 dalla variabile gc se supera il valore di 30 ,
int gcfinale ;

poi uso una altra variabile a cui assegno il valore della somma tra gcfinale e epatta
int fase_luna ;

e se ho scritto bene dovrei ottenere il giorno preciso della fase lunare , ora devo impostare la funzione in modo che al numero risultante venga assoviato ad un valore di luce.

//fase lunare
int  giorno = now.day();
int capomese = now.month();
int giorno_fase = giorno + capomese ;
if (giorno_fase > 30){
  giorno_fase = giorno_fase - 30 ;
}
int fase_lunare = giorno_fase + epatta ;
}

e nell setup ho impostato le tre valiabili come int.
adesso devo usare il valore della variabile fase_lunare
in questa riga

 {
 for (int fadeValue = 0 ; fadeValue <= fase_lunare; fadeValue += 1) {
   analogWrite(luci_luna, fadeValue);
 
   delay(20);
 }

ho modificato le le varie funzioni spegnimeto luci bianche aggiungendo la chiamata a funzione_lunare()

void fase_lunare(){
 //fase lunare
 int epatta = 1;
  DateTime now = rtc.now();
int  giorno = now.day();
int capomese = now.month();
int giorno_fase = giorno + capomese ;
if (giorno_fase > 30){
  giorno_fase = giorno_fase - 30 ;
}
int fase_lunare = giorno_fase + epatta ;
}

ora devo