Bateau V1

Déjà, tu peux ôter la ligne
Mesures();au début de la fonction PleineEau()

Ensuite, on a bien les deux leds allumées avant que tu ne simules un obstacle
Puis, on a alternance droite / gauche ce qui est normal : alternance toutes les 5 secondes. Mais le premier chrono dans la loop mesure pendant 10 secondes et il n'est pas remis à 0 car tu as laissé
  else startMillis = millis();en commentaire.

Donc je suis un peu perdu. Tu devrais mettre des temps plus longs dans les tests de la loop et ne pas les commenter. Ajoute les deux lignes

  if (tempsEcoule%1000==0) {Serial.print ("Temps ecoule = ");
  Serial.println (tempsEcoule); }

après Mesures(); dans la loop (s'il y a trop de texte augmente le 1000).

Note : j'ai laissé encore deux delay que je traiterai plus tard quand ce sera débugué.

Je viens de voir une inversion dans les commandes des moteurs entre le mode pleine eauet les commandes par boutons

en pleine eau; le code écrit tourne à droite, normalement il arrête led2/moteur droit et laisse led1/moteur gauche.

Si j'appuie sur le btncontact gauche ( qui fait tourner à droite) , j'ai la led1/moteur gauche active.
Mais en pleine eau, si le serial écrit "Tourne à droite", j'ai la led2/moteur droit d'activé

Si j'appuie sur le btncontact droit ( qui fait tourner à gauche) , j'ai la led2/moteur droit active.
Mais en pleine eau, si le serial écrit "Tourne à gauche", j'ai la led/moteur gauche d'activé

C'est plus clair sur le dessin

Je crois que c'est ce que tu voulais dire quand tu disais que tu avais écrit à l'arrache pour boudureDroit et BordureGauche.
A toi de voir celui que tu veux changer, les btn ou pleine eau

EDIT : désolé de ne voir l'erreur que maintenant.
C'est bien sur pleine eau qu'il y a eu l'inversion
Je reviens de faire (encore) le test de VO C'est bien ça
si j'appuie sur btngauche, le moteur gauche fonctionne et je tourne à droite
Mais si le bateau sur le serial affiche "tourne à droite", c'est le moteur droit qui fonctionne
alors dque ce doit être le gauche
Idem pour le coté droit

Bateau_V1.ino (7.49 KB)

A vrai dire je ne comprends pas bien tes explications ni tes dessins. Je vois 2 solutions :

La plus simple : les moteurs sont inversés. Il suffit d'échanger les définitions dans l'entête du programme :

const int moteur_D =  5;     // le numero du pin du moteur droit
const int moteur_G = 11;

devient

const int moteur_D =  11;     // le numero du pin du moteur droit
const int moteur_G = 5;

Sinon, c'est un peu plus compliqué, mais la structure du programme, avec les états, fait que c'est très simple à modifier. Tu peux le faire toi-même, c'est très simple.
Il faut d'abord vérifier que les états sont bien définis. Exemple :

void ADroite () { // Virage droite
  Serial.println("Moteur droit OFF, gauche ON : fait tourner a droite");
  digitalWrite(moteur_D, LOW);
  digitalWrite(moteur_G, HIGH);
  if (PompeG) digitalWrite(PompeGauche, HIGH);
}

C'est les instructions de l'état 'VirageDroite'. Tu vérifies que l'action se fait correctement sur les digitalWrite (le bon moteur pour le bon virage) et que le message affiché sur la console est correct.

Ensuite, il faut vérifier que les tests choisissent les bons états. Par exemple, dans PleinEau() :

  else if (!BtnContactG || VirageD)
  { // Contact bouton gauche
    if (VirageD) Serial.println("Contact a gauche ! ");
    if (millis() - chrono2 < delaiVirage)
    {
      state = VirageGauche;
      VirageD = true;
    } 
    else
    {
      state = AvantToute;
      Serial.println("Avant toute");
      VirageD = false;
      chrono2 = millis();
    }
  }

Le contact du bouton gauche lance ici un virage à gauche. S'il faut un virage à droite, il suffit de changer le nom de l'état choisi : 'VirageGauche' devient 'VirageDroite'. C'est tout simple, mais tu connais cette mécanique mieux que moi, donc c'est plus simple pour toi :slight_smile:

lesept:
Le contact du bouton gauche lance ici un virage à gauche. S'il faut un virage à droite, il suffit de changer le nom de l'état choisi : 'VirageGauche' devient 'VirageDroite'. C'est tout simple, mais tu connais cette mécanique mieux que moi, donc c'est plus simple pour toi :slight_smile:

C'était là la solution.
La Vo est validée .

Je te la donne

Sus à la V1 maintenant

PS
j'ai remis la V1 sur ma carte et le logiciel m'a dit de réparer encodage et recharger car la version de bateau.h était trop vieille !?
Je l'ai fait , pas de pb.

Je dois toujours garder bateau.h dans le même dossier que V0 ?

V_00_Bateau_modif_ultrason1.ino (5.23 KB)

Non, bateau.h est un fichier qui sert uniquement à la V1.

La V0 tient dans un seul fichier.

Pour la V1, comme le programme s'annonçait plus long, j'ai préféré le couper en 2 afin que ce soit plus lisible (l'IDE affiche dans deux onglets ce qui est pratique)

lesept:
Pour la V1, comme le programme s'annonçait plus long, j'ai préféré le couper en 2 afin que ce soit plus lisible (l'IDE affiche dans deux onglets ce qui est pratique)

Là je suis largué de très très loin. IDE dans 2 onglets !?

Je te rejoins après avoir regardé le match France 98 versus Fifa 98.
Je rajeunie de 20 ans. C'est pas tous les jours ça, alors j'en profite.
Je reste connecté quand même et je jette un œil.

C'est simple. Si ton sketch tient dans un fichier ino unique, tu double-cliques dessus et l'IDE l'ouvre dans un onglet unique.

Si tu as plusieurs fichiers, un ino et plusieurs fichiers h, dans le même répertoire, tu double-cliques sur le fichier ino et l'IDE ouvre tous tes fichiers dans plusieurs onglets.

Pour toi, tu as, par exemple :

  • répertoire bateauV0 : un fichier bateauV0.ino
  • répertoire bateauV1 : un fichier bateauV1.ino et un fichier bateau.h

Le fichier bateau.h est référencé dans le fichier bateauV1.ino (#include 'bateau.h') et il contient des fonctions qui sont appelées dans l'autre fichier.

pour la V1, je dois garder 'bateau.h' ? Je l'ai ouvert c'est en fait la V0

ça ressemble à la v0, ça a la couleur de la v0, mais c'est du ...
non en fait c'est inspiré de la v0 mais c'est un peu différent

donc le fichier .h va dans le même répertoire que le fichier ino de la v1

--> tu valides la v1 ?

Il faut faire la même modif que la V0.

Problème 1
J'ai regardé et je ne vois pas où inverser les rotations dans PleineEau (comme dans V0) que je ne trouve d'ailleurs pas :confused:

ça c'est les modif que j'ai faites sur la Vo pour inverser les rotations en pleine eau, mais je ne vois pas l'équivalent dans la V1 !?

else if (!BtnContactG || VirageD)
  { // Contact bouton gauche
    if (VirageD) Serial.println("Contact à  gauche ! ");
    //    Serial.print("VirageD = "); Serial.println(VirageD);
    if (millis() - chrono2 < delaiVirage)
    {
      state = VirageDroite;/////////////////////////////////////////////////////////////Modifie 
      //      Serial.print("state = "); Serial.println(VirageGauche);
      VirageD = true;
      //      Serial.println("Virage droite pour 5 secondes");
    } else
    {
      state = AvantToute;
      Serial.println("Avant toute");
      VirageD = false;
      chrono2 = millis();
    }
  }
  else if (!BtnContactD || VirageG)
  { // Contact bouton droit
    if (VirageG) Serial.println("Contact à  droite ! ");
    //    Serial.print("VirageG = "); Serial.println(VirageG);
    if (millis() - chrono2 < delaiVirage)
    {
      state = VirageGauche;/////////////////////////////////////////////////////////////Modifie 
      //     Serial.print("state = "); Serial.println(VirageDroite);
      VirageG = true;
      //      Serial.println("Virage gauche pour 5 secondes");
    }

Problème 2
Au démarrage, et pour avant toute il n'y a QUE le moteur gauche qui est validé

Tu peux poster ta dernière version du code ?

Que veux-tu dire par "que le moteur gauche qui est validé" ?

Je veux dire que le moteur gauche fonctionne au départ alors qu'il devrait y avoir les 2 ensembles.

Le led/moteur droit n'est jamais allumée/en marche

Bateau_V1.ino (7.45 KB)

Bateau.h (3.18 KB)

OK, je regarde demain...
Bonne soirée !

C'est bizarre, je ne vois rien qui cloche.

Est-ce que la console affiche des messages, notamment le temps qui passe, par exemple

Temps ecoule = 1000
Temps ecoule = 2000
etc.

Bien sûr, il y a d'autres messages affichés entre eux.

Vérifie tes branchements, il y a peut-être un faux contact, une diode grillée, etc.

Je te renvoie une nouvelle version, plus propre...
Lance une exécution en "pleine eau" (sans obstacle) et copie / colle le contenu de la console. Merci

Bateau_V1.ino (7.48 KB)

Bateau.h (3.34 KB)

Je ne pourrais tester que ce soir.
Je n'ai pas le montage sous la main
Désolé
Je n'a ique l'arduino et l'écran oled sous la main

Pas de problème

Resalut

Donc en ce qui concerne mon montage électronique tout est bien soudé, rien de grillé car si j'installe dessue la V0 tout fonctionne parfaitement.

Voici le retour du serial

Temps ecoule = 0
Avant toute !Temps ecoule = 2030
Temps ecoule = 5026
Temps ecoule = 8023
Temps ecoule = 11017
Temps ecoule = 13049
Temps ecoule = 14005
Temps ecoule = 16027
Temps ecoule = 19011
Temps ecoule = 21043
Temps ecoule = 22003
Temps ecoule = 24040
Temps ecoule = 25008
Temps ecoule = 27045
Temps ecoule = 28009
Temps ecoule = 30043
Temps ecoule = 31004
Temps ecoule = 33039
Temps ecoule = 34004
Temps ecoule = 36036
Temps ecoule = 37003
Temps ecoule = 39036
Temps ecoule = 42037
Temps ecoule = 43002
Temps ecoule = 45036
Temps ecoule = 48030
Temps ecoule = 51023
Temps ecoule = 54021
Temps ecoule = 57017
Temps ecoule = 60011
Temps ecoule = 62040
Temps ecoule = 63001
Temps ecoule = 65030
Temps ecoule = 68023
Temps ecoule = 71012
Temps ecoule = 73044
Temps ecoule = 74007
Temps ecoule = 76043
Temps ecoule = 77009
Temps ecoule = 79047
Temps ecoule = 80010
Temps ecoule = 82049
Temps ecoule = 83017
Temps ecoule = 86020
Temps ecoule = 89013
Temps ecoule = 91047
Temps ecoule = 92010
Temps ecoule = 94046
Temps ecoule = 95007
Temps ecoule = 97040
Temps ecoule = 100032
Temps ecoule = 101032
Temps ecoule = 102034
Temps ecoule = 103034
Temps ecoule = 104036
Temps ecoule = 105036
Temps ecoule = 106038
Temps ecoule = 107038
Temps ecoule = 108040
Temps ecoule = 109040
Temps ecoule = 110042
Temps ecoule = 111042
Temps ecoule = 112044
Temps ecoule = 113044
Temps ecoule = 114045
Temps ecoule = 115046
Temps ecoule = 116047
Temps ecoule = 117048
Temps ecoule = 118049

Je ne vois rien d'anormal, est-ce que les broches sont les mêmes entre la V0 et la V1 ? Voici pour la V1 : compare avec la V0 et avec les branchements que tu as faits :

Servo monServomoteur;         // servoMoteur à la broche D9

// constantes
const int DetecteurPinG = 2;  // bouton gauche sur pin 2
const int DetecteurPinD = 4;  // bouton droit sur pin 4
const int PompeGauche   = 3;  // declaration pompe au pin 3
const int PompeDroite   = 12; // declaration pompe au pin 12
const int moteur_D =  5;      // le numero du pin du moteur droit
const int moteur_G = 11;      // le numero du pin du moteur gauche

Peux-tu mettre des diodes sur les pins des pompes aussi ?

Je t'envoie une nouvelle version, elle fait :

  • Pleine eau 20 secondes
  • Bordure gauche 10 secondes
  • Pleine eau 10 secondes
  • Bordure droite 20 secondes
  • Pause 40 secondes
  • Puis retour au départ
    Avec affichage du temps écoulé toutes les 2 secondes.

Je ne peux pas le rendre plus loquace car tu seras submergé. Teste, après vérification des branchements, et copie le contenu de la console et repère les allumages / extinctions de diodes en fonction des états (au besoin fais plusieurs exécutions). Merci

Bateau_V1.ino (7.46 KB)

Bateau.h (3.33 KB)

EDIT : je modifie mon dernier msg ( je viens de comprendre pour les pin :frowning: :frowning: )

il faut modifier la V1 mettre

// constantes
const int DetecteurPinG = 2;  // bouton gauche sur pin 2
const int DetecteurPinD = 4;  // bouton droit sur pin 4
const int PompeGauche   = 5;  // declaration pompe au pin 3
const int PompeDroite   = 12; // declaration pompe au pin 12
const int moteur_D = 3;      // le numero du pin du moteur droit
const int moteur_G = 11;      // le numero du pin du moteur gauche

Les 2 led/moteur s'allument bien en phase pleine eau

Si j'ai bien compris on doit passer un cycle pleine eau / bordure gauche puis bordure droit.
Mais bordure droit ne vient pas.

Temps ecoule = 0
Avant toute !
***********************les 2 LED/Moteur allumés***********
Temps ecoule = 2014
Temps ecoule = 4028
Temps ecoule = 6043
Temps ecoule = 18012
Temps ecoule = 20027

***********************LED1/Moteur droit  allumé   qui plaque le bateau à gauche OK
Bordure gauche
Moteur gauche OFF, droit ON : fait tourner a gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 28004
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 30022
Avant toute !
***********************les 2 LED/Moteur allumés***********
Temps ecoule = 32035



************PROBLEME****************** Si j'ai compris on devrait avoir Bordure droit après
**************************************** alors que c'est Bordure gauche qui suit ?
Bordure gauche
Moteur droit OFF, gauche ON : fait tourner a droite
***********************LED2/Moteur gauche  allumé   qui plaque le bateau à droite OK
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 44014
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 46031
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 56000
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 58017
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 60036
Temps ecoule = 72001
Temps ecoule = 74015
Temps ecoule = 76029
Temps ecoule = 78044
Temps ecoule = 90009
Temps ecoule = 92023
Temps ecoule = 94038
Moteurs et pompes eteints.

Non, tout fonctionne bien, c'est juste le message de bordure droite qui est faux : il écrit "bordure gauche". Tu peux modifier le Serial.print de la fonction BordureDroite dans la version que je t'ai envoyée.

Pour qu'il écrive moins souvent "bordure gauche" et "bordure droite", tu peux modifier les Serial.print des fonctions BordureDroite et BordureGauche comme suit:
  if (state != oldstate) Serial.println("Bordure gauche");et   if (state != oldstate) Serial.println("Bordure droite");

Enfin, il reste une erreur dans la gestion du temps :
  else if (tempsEcouleAvantPause > 100000) { // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000à remplacer par

  else if (tempsEcouleAvantPause < 100000) { // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000

(inférieur au lieu de supérieur)

Il reste à remplacer les deux delay(3000) des fonctions bordure (pour la forme car je pense que ça fonctionne bien comme ça). Je vais tâcher de trouver du temps aujourd'hui.