IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Détection de synchronisation sur un signal video


Sujet :

C

  1. #21
    Candidat au Club
    Homme Profil pro
    IUT Lyon
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : IUT Lyon

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    bonsoir,

    Citation Envoyé par nanosoft Voir le message

    C'est sur qu'il faut s'en préoccuper ! Si c'est toujours en ligne droite c'est un peu trop facile

    Tout dépend du champ de vision de la caméra et du rayon des virages les plus serrés.
    Je m'en suis preocuper en créant pour l'instant une fonction permettant de calculer l'angle.
    J en parle avec mon professeur demain pour savoir quelle valeur il faut envoyer a l automate! =)

    J'ai au passage totalement modifier mon code, en creant un switch case je post ca a la fin du message.
    Citation Envoyé par nanosoft Voir le message
    C'est demain que tu peux tester les timings d'instructions ?
    Oui exactement =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #define DetectionTrame 1
    #define DetectionLigne 2
    #define RecupValeurs 3
    #define TraitementSignalVideo 4
    #define CalculAngle 5
    #define Envoi 6
     
    #include <project.h>
     
    int8 dataReady,FlagConvert=0;//variables globales
    int16 result;
    uint8 Tableau[52];
     
    int main()
    {   
     
        CyGlobalIntEnable; // permet les interruptions 
        ADC_1_Start(); // lance le convertisseur
        ADC_1_IRQ_Enable(); // debloque les interruptions du convertisseur 
        ADC_1_StartConvert();// lance la conversion
     
        double Angle;
        int16 newReading;
        int8 compteur,compteurligne;
        int8 Indice=1,IndTable,CptLigne,CoeffMoyenne,Somme,Passage=0;
        int8 Moyenne,Moyenne10; //possiblement un float ( a voir)
        for(;;)
        {     
     
            if (dataReady != 0)
            {
                dataReady = 0;
                newReading = result;
            }else{}
            switch (Indice) 
            {
                case DetectionTrame :  //case de detection de Trame
     
                    if(newReading<0x27) //detection du 0.15 volts et en dessous
                    {
                            compteur++;                        
                    }
                    else
                    {
                        compteur=0;
                    }
                    if(compteur==10)
                    {
                        Indice=DetectionLigne;
                    }
                    else{}
                    break;
     
                case DetectionLigne: // detection de la ligne du milieu
     
                    if(newReading<0x27)
                    {
                        compteurligne++;
                    }
                    else
                    {
                        compteurligne=0;
                    }
                    if(compteur==4)
                    {
                        CptLigne++;
                    }else{}
                    if(CptLigne==150)
                    {
                        Indice=RecupValeurs;
                    }else{}
                    break;
     
                case RecupValeurs: //recuperation des valeurs
     
                    for(IndTable=0;IndTable<52;IndTable++)
                    {
                        Tableau[IndTable]=newReading;
                    }
                    Indice =TraitementSignalVideo;
                    break;
     
                case TraitementSignalVideo: //Traitement du signal video! !!!!!! On aura ainsi deux valeur de la ligne avec un intervalle de 40ms(augmenter la valeur de passage de 10 a 20 pour doubler ce temps)
     
                    for(IndTable=0;IndTable<52;IndTable++)
                    {
                        if((Tableau[IndTable]>=0x00)||(Tableau[IndTable]<=0x44))
                        {
                            Somme=IndTable+Somme;
                            CoeffMoyenne++;
                        }else{}
                    }
                    Moyenne=Somme/CoeffMoyenne;
                    Passage++;
                    if (Passage==10)
                        {
                            Moyenne10=Moyenne;//recupere la moyenne du 10 emme passage 
                            Indice=CalculAngle;
                        }
                    else
                        {
                            Passage=0;
                            Indice=DetectionTrame;
                        }
     
                    break;
                case CalculAngle: //detection de la rotation des roues et de leur angle
     
                    // Calcul default l'angle du virage a prendre
                        Angle= atan(9/Moyenne10);//sort un angle en degree qui est celui a prendre par la voiture
                        Indice=Envoi;
     
                    break;
                case Envoi: // envoi des données
                         break;
            }
        }
     
     
     
     
    }
        CY_ISR( ADC_ISR ) //programme de sous-interruption
        {
            result = ADC_1_GetResult16(0); // recupere la valeur a chaque aquisition du convertisseur (soit toutes les microsecondes)
            dataReady = 1;
        }

  2. #22
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Une remarque de principe sur le code:
    Tu switch sur (Indice) que tu viens modifier à l'intérieur même du switch ... pas très académique !

    Tu devrais d'abord travailler sur un macro pseudo-code pour l'architecture du traitement.

  3. #23
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par nanosoft Voir le message
    Une remarque de principe sur le code:
    Tu switch sur (Indice) que tu viens modifier à l'intérieur même du switch ... pas très académique !
    Bof, ça me paraît relativement normal pour une machine à états avec ses transitions...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Détection de variation sur un signal 1D
    Par b_reda31 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 03/04/2015, 16h08
  2. Détection d'un palier sur un signal
    Par MottetCCSF dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 12/06/2007, 11h41
  3. [3D] Poser des textes 3D sur une sequence Vidéo???
    Par pointer dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 11/03/2006, 09h59
  4. Faire a un script executer une action sur un signal
    Par vodevil dans le forum Langage
    Réponses: 1
    Dernier message: 13/12/2005, 11h14
  5. [TMS320C6416] FFT et IFFT sur un signal audio...
    Par 0x4e84 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 18/04/2005, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo