Prises de photos d'astres (déclencheur, minuteur, heure définie, intervalle etc.

Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 11 févr. 2013 à 11:44
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 4 mars 2013 à 09:15
Bonjour,

Je suis entrain de travailler sur un petit projet d'astronomie.

Le programme de base d'une connaissance est capable une fois qu'il a fixé un astre avec son télescope, de le suivre jusqu'à qu'un obstacle obstrue le champ de vision. Une comète passe, il la fixe et le télescope la suit jusqu'à ne plus la voir.

Et donc voici ce que je dois rajouter :

Son télescope comprend un appareil photo.

Le but est d'automatiser en partie les prises de photos avec un déclencheur, soit instantané après le clic de souris, soit avec un minuteur (de 1 à 30 minutes d'attente), soit à une heure définie. Il faut aussi un intervalle de 5 secondes à 1 minute entre chaque prise.

L'environnement est sombre puisqu'il se passe de nuit, il faut donc capter un maximum de lumière lorsque l'on fait une prise de vue de nuit, c'est pourquoi il faut aussi une ouverture focale de 1 seconde à 20 minutes avant de déclencher la prise de vue.

Maintenant je vous expose mon soucis :

Il y a un déclencheur, ça c'est ok, en revanche, il faut un minuteur et une heure de déclenchement. Le hic est que si je me sers de timer, il y aura un décalage par rapport à l'heure système.

A part tester le timer et le recâler à chaque fois sur l'heure système, y aurait-il moyen de le faire sans me servir de ce dit timer ?


Cordialement, Gaedarr.

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 févr. 2013 à 12:37
Bonjour,

Lancer le timer toutes les X secondes, et si l'heure système correspond à l'heure désirée, enclencher l'appareil.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
12 févr. 2013 à 16:05
Bonjour NHenry,

Merci pour votre message.

Actuellement, je cherche à faire en sorte d'éviter les timers puisque le problème est qu'ils ne sont pas précis et qu'ils finissent par être décalés par rapport à l'heure système.

voici mon code actuel pour le test d'heure système et de l'heure de déclenchement de photos sans timer :

        private void btnAlarme_Click(object sender, EventArgs e)
        {
            iHeures = Convert.ToInt32(this.tbxHeures.Text);
            iMinutes = Convert.ToInt32(this.tbxMinutes.Text);

            iTotal = iHeures * 3600 + iMinutes * 60;

            iHeureSystem = DateTime.Now.Hour;
            iMinuteSystem = DateTime.Now.Minute;

            iSystemTotal = iHeureSystem * 3600 + iMinuteSystem * 60;

            this.lblAlarme.Text = iHeures.ToString() + ":" + iMinutes.ToString();

            while (iSystemTotal != iTotal)
            {
                iHeureSystem = DateTime.Now.Hour;
                iMinuteSystem = DateTime.Now.Minute;

                iSystemTotal = iHeureSystem * 3600 + iMinuteSystem * 60;
            }
            SetDigitalChannel(1);
        }


Ce code fonctionne bien pour faire ce test, mais le problème qui se pose maintenant est que le programme ne fera que ça tant qu'ils n'aura pas terminé.

Serait-il possible de faire de même sans pour autant figer le programme ni utiliser de timer pour cause du décalage ?


Cordialement, Gaedarr.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
12 févr. 2013 à 17:51
Bonsoir, pour eviter le figé du programme oriente toi vers les threads ou le bakgroundworker, regarde cette source.

Par contre je suis surpris par ton code, en effet tu convertit ton heure en seconde pour comparer ton compteur et l'heure système, or tu ne prends que Heure et Minute, donc comparer à la seconde près ne sert à rien. Et il me semble plus qu'il te serait plus simple de te servir d'objets DateTime ou TimeSpan


Whismeril
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
4 mars 2013 à 09:15
Hello,

Tout d'abord, merci de vous être penché sur mon sujet.

Je poste un peu tard, mais j'ai eu quelques soucis dernièrement et je n'ai pas pu avancer tout ça.

Je vais regarder cette source pour le backgroundworker qui m'a l'air très intéressante. Sinon concernant le timer, le DateTime ou le TimeSpan, disons surtout que je vais devoir faire beaucoup de travail en tâche de fond si je veux éviter totalement les timers.

Je reviendrai donner des nouvelles dès que j'aurai pu modifier mon code et faire une tâche en fond :)




Cordialement, Gaedarr.
0
Rejoignez-nous