Aller au contenu


Photo
- - - - -

course du soleil


  • Veuillez vous connecter pour répondre
45 réponses à ce sujet

#41 Sandro

Sandro

    Habitué

  • Membres
  • PipPip
  • 237 messages
  • Gender:Male

Posté 10 décembre 2019 - 01:12

Pardon, j'avais pas vu que tu avais changé le type de pwm2 en byte. Pour que ces codes puissent marcher, il faut le laisser en int (avec byte, si tu obtiens un résultat "négatif", ça ajoute automatiquement 256 pour revenir en positif).

 

Du coup, il faut de nouveau déclarer pwm2 en byte.

 

Une autre solution serait de gérer le cas de la nuit à part :

if(TimeMins < Sunrise - margeAube || timeMins > Sunset + margeCrepuscule){     //il fait nuit
    pwm2 = 0;
}
else {    //il fait jour
    if(TimeMins < heureMidi ){
      pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255);
    }
    else {
        pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0);
    }
    analogWrite(5,pwm2);// PIN 5 timer 8 bits

A noter que dans cette dernière solution, pwm2 peut être indiférament int ou byte



#42 michel

michel

    Nouveau membre

  • Membres
  • 25 messages
  • Gender:Male
  • Location:nice

Posté hier, 08:45

bonjour Sandro,

pour l'instant tout va bien la pwm2 c'est bien arrêter le soir et à bien redémarrer ce matin.

merci infiniment sans ton aide je serais encore à chercher un code .

je vais tester le code que tu m'as fait pour gérer la nuit  .

La pwm est trés complexe pour un amateur qui ne sait pas grand chose .

je recherche un code qui me dirais le nombres de jour qu'il y a chaque mois et que je pourrais ajouter avec #include "RTClib.h" et RTC_DS1307 RTC;

d'avance merci .

bonne journée.



#43 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 175 messages
  • Gender:Male
  • Location:Autriche

Posté hier, 09:36

Petite astuce, plutôt que d'attendre toute la nuit, tu peux multiplier le temps lu par 240 pour que le cycle complet se fasse en 6 minutes (plutôt que 24h).
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#44 Sandro

Sandro

    Habitué

  • Membres
  • PipPip
  • 237 messages
  • Gender:Male

Posté hier, 13:56

Pourquoi est-ce que tu veux un code tout prêt pour te donner le nombre de jours dans le mois, alors que c'est facile de coder ça toi même?

Il n'y a que 12 mois, donc tu peux facilement entrer le nombre de jours pour chacun (soit avec un tableau, soit avec un switch cas, soit avec des if/else if/else). Il n'y a que le mois de février qui est un peu plus dur à gérer à cause des années bissextiles.

 

Je pense que tu devrais arriver sans trop de problème à coder une petite fonction qui prend en entrée le mois et l'année et renvois le nombre de jours dans le mois. Si jamais tu bloque, fais moi signe et je te donnerais plus d'indications.

 

 

 

Par contre, j'ai un peu de mal à comprendre pourquoi tu veux intégrer ce code dans la bibliothèque RTCLib? Pourquoi ne pas juste mettre la fonction dans ton sketch arduino, ou à la limite dans un fichier à part?



#45 michel

michel

    Nouveau membre

  • Membres
  • 25 messages
  • Gender:Male
  • Location:nice

Posté hier, 16:23

bonsoir Sandro ,

désolé je pense que je me suis mal exprimé pour la rtclib je voulais juste te préciser que j’utilise cette library pour l'heure , la date etc....

sur le net j'ai trouvé ce type de code mais j'ai essayer de l'ajouter dans mon programme mais arduino me met des pannes  Fichier joint  IMG_1648.JPG   102 Ko   0 téléchargement(s).

d'avance merci .

int daystotal (int y, int m, int d)
{
    static char daytab[2][13] =
    {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    };
    int daystotal = d;
    for (int year = 1 ; year <= y ; year++)
    {
        int max_month = ( year < y ? 12 : m-1 );
        int leap = (year%4 == 0);
        if (year%100 == 0 && year%400 != 0)
            leap = 0;
        for (int month = 1 ; month <= max_month ; month++)
        {
            daystotal += daytab[leap][month];
        }
    }
    return daystotal;
}


#46 Sandro

Sandro

    Habitué

  • Membres
  • PipPip
  • 237 messages
  • Gender:Male

Posté hier, 23:59

Je crois (pas sur, et la flemme de vérifier exactement), que la fonction ci dessus calcule le nombre de jours entre le 01/01/0000 et le jour d/m/y.

 

toi, tout ce que tu veux (si j'ai bien compris), c'est le nombre de jours dans un mois donné.

 

Je te propose donc les étapes suivantes :

1) tu écris une fonction int nbr_jours_du_mois(int mois) qui te donne le nombre de jours du mois "mois" en considérant que c'est pas une année bissextile (si mois=janvier=1 tu renvois 31, si mois=février=2 tu renvois 28, ...). Tu peux faire ça avec des if, avec un switch ou avec un tableau, comme tu veux.

2) tu modifie ta fonction pour prendre en compte les années bissextiles : pour ça, tu dois prendre l'année en plus en entrée. Si le mois est février et que l'année est bissextile, alors tu ajoute un jour. Pour rappel, une année est bissextile si elle est un multiple de 4 (ou si tu te soucie de quand tu sera un vieux papi, alors tu peux prendre en compte en plus la règle qu'un centenaire rond n'est pas bissextile (sauf s'il s'agit d'un multiple de 400))

 

PS : essayer de trouver un code tout prêt pour des gros trucs, c'est bien, mais pour de petites fonctions comme ça, il vaut mieux que tu t'entraine à les écrire toi même. Du coup plus d'autres indices tant que tu n'aura pas soit mis un code que tu as écrit toi même (ou que tu me dit sur quel point tu bloque)






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users