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 :

Difficultés pour programmer un Arduino


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    dessinateur
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : dessinateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Difficultés pour programmer un Arduino
    Bonjour,

    Voilà 3 mois que je bataille, que je cherche à faire un programme en C.

    J'ai acheté une carte Arduino Uno, un accéléromètre gyroscope MPU6050 et 2 servomoteurs, pensant naïvement que la programmation allait être simple même pour un novice comme moi!

    Mon projet est de faire manoeuvrer les servomoteurs suivant une inclinaison donnée (ex : à partir d'une inclinaison de 5° vers la gauche, je voudrais que mon servomoteur de gauche manoeuvre de 10°; idem pour la droite).

    J'ai bien eu quelques bribes de réponses mais même avec ça je n'avance pas...
    J'imagine bien que l'idéal serait d'apprendre le langage C dans sa globalité mais j'en ai besoin uniquement pour une partie précise de mon projet et n'en aurait plus besoin par la suite...

    Y aurait-il une âme charitable pour m'aider?!

    D'avance merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    et bienvenu sur Developpez.com

    En fait, C n'est pas fait pour les débutants bien au contraire, débuter avec ce langage dans le monde de la programmation est tout simplement une aberration selon moi !

    Un apprentissage serait l'idéal pour toi, surtout si tu dois utiliser des pointeurs et faire des allocations dynamique de mémoire

    Je ne saurais que te conseiller de suivre, même un minimum, un tutoriel à ce sujet. Ensuite, il faut dire que le C en embarqué est souvent un peu différent de la norme ANSI/ISO car souvent allégé et avec des bibliothèques et compilateur spécifique à ton matériel.

    Là ce qu'il te faut, ce n'est pas seulement un pro du C mais surtout de l'embarqué, ce qui n'est pas mon cas pour l'embarqué désolé

    Poste ton code s'il n'est pas trop gros et explique où ça coince et tu auras peut-être des réponses
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Salut
    Avant de pouvoir rentrer dans une boulangerie et demander une baguette, il t'a fallu apprendre à parler ; même si tu ne fais pas de grands discours.
    Avant de pouvoir faire un footing, il t'a fallu apprendre à marcher ; même si tu n'es pas Carl Lewis.
    Et donc avant de vouloir faire de la programmation embarquée il te faut quand-même apprendre les bases ; même si tu n'as pas l'intention de redévelopper MsOffice...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    surtout si tu dois utiliser des pointeurs et faire des allocations dynamique de mémoire
    Pas franchement convaincu que cela soit très fréquent sur Arduino En tout cas dans la programmation micro-contrôleur en général, on n'a rarement la possibilité et l'envie de faire de l'allocation dynamique. La possibilité car pas d'OS et non pas d'allocateur. L'envie car risque de plantage au runtime donc on préfère une allocation statique qui plantera au linkage en disant qu'il n'y a pas assez de place sur la puce.

    Il en revanche tout à fait vrai que ce sera surtout un apprentissage de l'embarqué ! Il faut comprendre comment marche les moteurs et apprendre à les piloter. Il faudra comprendre comment marche l'accéléromètre et apprendre à récupérer des données. Pour cela, il faudra comprendre comment marche l'Arduino. Et pour tout cela, il faudra connaitre les bases du C (fonctions, variables, structuration d'un programme) sans que cela passe forcément par Arduino : tu peux suivre des tuto pour PC.

    Il existe des tonnes de ressources sur le web pour apprendre à programmer en C et pour programmer les Arduinos. Qu'as-tu déjà fait à ce sujet ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Points : 80
    Points
    80
    Par défaut Humm
    C est une aberation de dire:
    débuter avec ce langage dans le monde de la programmation est tout simplement une aberration selon moi
    selon moi .
    Sinon pour repondre au post : Deux solutions :
    1- J imagine que si tu parle de developper en C sur Arduino , ca veut dire que t as pas opter pour le language offert par arduino . Je te conseillerai donc la solution 2 .
    2. Utilise le language mit a disposition , c est un language tres simplifier , et facile a apprendre , deux(!!??) jours suffisent, pour faire quelquechose de basique. Et si tu veux absolument programmer en C , je te conseillerai plutot d oublier ton Board , et n apprendre que le C pendant les 6 Mois a venir .

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    dessinateur
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : dessinateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponces. Pendant ces 3 mois j'ai tout de même tenté de comprendre le fonctionnement, en faisant quelques manip avec la carte Arduino:

    j'ai rentré quelques programme qui sont en exemple sur la carte (allume et éteind une led, mouvement AV/AR d'un servomoteur...), j'ai copié certain programme trouvés sur internet. J'arrive également à sortir les données brut de l'accéléromètre sur le moniteur série. On va dire que j'usque là tout va bien, mais j'ai rien créé Et après !??

    Les programmes que j'ai trouvés ne sont pas tout à fait ce que je veux faire. Le plus "proche" serait celui ci:

    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
    128
    129
    130
    131
    #include <Servo.h>
     
    Servo myservo;
    int pos = 0;
    const int MAX_MESURES = 20;
    int mesures[MAX_MESURES];
    int mesuresTriees[MAX_MESURES];
    int nbMesures = 0;
     
     
    void setup()
    {
        myservo.attach(9);
        //Serial.begin(9600);
    }
     
     
    void loop()
     
    {
        nbMesures = mesurer(mesures, nbMesures, MAX_MESURES);
        recopier(mesures,mesuresTriees,nbMesures);
        trier(mesuresTriees,nbMesures);
     
        //debugTab(mesuresTriees,nbMesures);
        pos = moyenneSansExtremes(mesuresTriees,nbMesures);
     
        //Serial.println(pos);
        myservo.write(pos);
        delay(20);
    }
     
     
     
     
    int mesurer(int tab[], int nb, int max)
    {
        int sensorValue = analogRead(A0);
        pos = map(sensorValue, 165, 510, 0, 180);
        pos = constrain(pos, 0, 180);
     
        if(nb < max)
        {
            tab[nb] = pos;
            nb++;
        }
        else
        {
            for(int i=0; i<max-1; i++)
            {
                tab[i] = tab[i+1];
            }
     
            tab[max-1] = pos;
        }
     
        return nb;
    }
     
     
    void debugTab(int tab[], int nb)
    {
        Serial.print("[");
     
        for(int i=0; i<nb; i++)
        {
            Serial.print(tab[i],DEC);
            if(i<nb-1)
            {
                Serial.print(",");
            }
        }
     
        Serial.print("]");
        Serial.println();
    }
     
     
    void recopier(int source[], int destination[], int nb)
    {
        for(int i=0; i<nb; i++)
        {
            destination[i] = source[i];
        }
    }
     
     
    void trier(int tab[], int nb)
    {
        int min, imin, tmp;
     
        for(int i=0; i<nb-1; i++)
        {
            min = tab[i];
            imin = i;
            for(int j=i+1; j<nb; j++)
            {
                if(min > tab[j])
                {
                    min = tab[j];
                    imin = j;
                    break;
                }
            }
     
            if(i != imin)
            {
                tmp = tab[i];
                tab[i] = tab[imin];
                tab[imin] = tmp;
            }
        }
    }
     
     
    int moyenneSansExtremes(int tab[], int nb)
    {
        int min = nb/4;
        int max = nb - (nb/4);
        int moyenne = 0;
        int j = 0;
     
        for(int i=min; i<max; i++)
        {
            moyenne += tab[i];
            j++;
        }
     
        moyenne = moyenne / j;
        return moyenne;
    }

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    dessinateur
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : dessinateur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Cela ne vous inspire pas plus que ça ?

Discussions similaires

  1. IA en java programmer différents niveaux de difficultés pour un jeu Reversi
    Par kevin254kl dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 03/04/2014, 18h53
  2. Réponses: 17
    Dernier message: 16/12/2012, 09h27
  3. Lib Arduino pour programmer des 16F84
    Par artiom dans le forum Arduino
    Réponses: 2
    Dernier message: 02/05/2012, 19h10
  4. Réponses: 1
    Dernier message: 22/07/2008, 22h13
  5. Réponses: 6
    Dernier message: 20/07/2008, 18h04

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