Go Down

Topic: Les insolents, les impolis et les ..... (Read 6389 times) previous topic - next topic

hbachetti

Quote
aussi lit sa sa aideras pour test post (ou eviter que hbachetti te donne une fesser XD)
Je sens que ça ne va pas tarder ...

Quand un schéma est demandé il s'agit de ça :



Il ne s'agit pas de fournir une photo floue où l'on ne distingue presque rien.

Et les balises code bien sûr : https://forum.arduino.cc/index.php?topic=315372.0
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

fdufnews

#16
Feb 04, 2020, 08:30 am Last Edit: Feb 04, 2020, 08:35 am by fdufnews
C'est pas très clair ta description du (ou des) problème(s).
Au début tu dis:
J'envoie cette trame d'un UNO vers un Nano mais le message reçu ne correspond pas au message envoyé
ce qui fait penser soit à un problème de code, soit à un problème de câblage.

Et maintenant tu dis ça:
Je ne peux pas compiler et transférer ce programme sur l'Arduino Nano si je ne mets pas en ATMega328P et non ATMega328P (Old BootLoader).
C'est peut-être que ton Nano n'a pas un ancien bootloader tout simplement.

fdufnews

Et tu ferais bien de mettre rapidement ton code entre balise comme demandé parce que sinon il va passer à la benne.
En plus cela le rend illisible car certains caractères sont modifiés ou supprimés.

Lamusicadomi

Merci pour tout vos bons conseils moralistes.
Je vais me débrouiller tout seul au regard et à la lecture de vos réflexions un peu trop autoritaires et hautaines...
Tout le monde n'a pas votre science infuse des Arduinos
Messieurs les "professionnels" Aurevoir !

bidouilleelec

#19
Feb 04, 2020, 09:08 am Last Edit: Feb 04, 2020, 09:42 am by bidouilleelec
Bonjour Lamusicadomi

Pourquoi :

Code: [Select]
message=Serial.read()& 0x6F;  ?

message n'est plus codé en ASCII
Et cela explique vos résultats.

Cordialement,
bidouilleelec

bidouilleelec

Merci pour tout vos bons conseils moralistes.
Je vais me débrouiller tout seul au regard et à la lecture de vos réflexions un peu trop autoritaires et hautaines...
Tout le monde n'a pas votre science infuse des Arduinos
Messieurs les "professionnels" Aurevoir !
Il faut reconnaitre que votre 1er message était assez lapidaire ?
Et les suivants peu généreux en informations pourtant nécessaires.
Et boum , le problème de téléchargement débarque.

Cordialement,
bidouilleelec

fdufnews

Merci pour tout vos bons conseils moralistes.
..... à la lecture de vos réflexions un peu trop autoritaires et hautaines
..... Messieurs les "professionnels
Moraliste, euh non. C'est juste que pour pouvoir t'aider par exemple il faut que ton code soit lisible. Si tu ne le mets pas entre les balises code il est mal affiché et certains caractères sont supprimés ou remplacés ce qui le rend difficile à comprendre.
Si tu ne fournis pas un schéma compréhensible de ton montage on peut facilement passer à coté d'un problème.
Nous on est bénévole et on a pas nécessairement envie de passer 2h sur un code pour dépanner quelqu'un qui ne veut pas faire l'effort de rédiger ses messages comme le demande l'étiquette du forum.

Je vais me débrouiller tout seul
... Aurevoir !
Et bien écoute bonne chance. Et si l'envie de revenir ici te prend lit les règles du forum et on gagnera surement du temps  (toi comme nous)

ludocraft

les personne sur ce forum sont des bénévole et ne sont pas a ta place donc on sais pas ce que tu a fait plus tu nous donne d'indice et de presition plus on pouras t'aider rapidement et facilement et le balice c'est pour que sa sois plus claire pour tous le monde :)

 
j'aime l'arduino c'est l'arduino qui ne m'aime pas

hbachetti

J'espère que la poubelle ne va pas déborder  :smiley-confuse:
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

ludocraft

pas grave on y met dans un champ et on fait cramer ou au pire on y enfouit

le resiclage est inutile il y a rien a récupérer ^^ 
j'aime l'arduino c'est l'arduino qui ne m'aime pas

Tronconneuse

#25
Feb 05, 2020, 09:21 am Last Edit: Feb 07, 2020, 06:57 pm by jfs
Bonjour,

Je suis en terminale et j'ai un projet à faire pour la fin de l'année, j'avance plutôt bien hormis le fait que je bloque sur un détail.

Voici ce que je compte faire:


Je dois afficher les informations d'un capteur sur un site créer via arduino et contrôler des LED sur ce même site.

Malheureusement, J'arrive à faire les deux tâche séparément. Mais lorsque j'assemble les deux programmes, le programme se mets à afficher seulement une des deux tâche aléatoirement

Exemple : je charge la page internet: ça m'affiche le capteur.
J'actualise ça m'affiche le panneau de contrôle de LED
J'actualise a nouveau et c'est toujours le panneau de contrôle.

Bref si vous avez une solution pour faire en sorte que mon information de capteur et mon panneau de controle de LED s'affiche en même temps vous m'aideriez énormément


Voici mon programme :

Code: [Select]

#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; //adresse mac de votre carte
byte ip[] = {192, 168, 1, 188}; //adresse IP
unsigned long tpsDep; //temps départ pour la gestion des LED
int pinLed[5] = {2, 5, 7}; //tableau des pins de LED
boolean etatLed[5] = {0, 0, 0, 0, 0}; //tableau des états des LED
int modeLed[5] = {0, 0, 0, 0, 0}; // tableau des modes des LED
EthernetServer serveur(188); // déclare l'objet serveur au port d'écoute 80

void setup()
{
  char erreur = 0;
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  Serial.begin (9600);
  for (int l = 0; l < 3; l++) {
    pinMode(pinLed[3], OUTPUT);
  }
  Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
  Serial.print("*\n-> Le serveur est sur l'adresse : ");
  Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
  serveur.begin(); // démarre l'écoute
}


void loop() {




  //Programme LED
  Serial.println (analogRead(A3));
  delay(1000);
  gestionClient(); // fonction qui gère toute la communication avec le client
  gestionLed(); // fonction qui gère l'allumage des LED
}


//----------------------Fonctions----------------------
//fonction qui gère la communication avec le client
void gestionClient() {
  EthernetClient client = serveur.available(); //on écoute le port
  if (client) { //si client existe
    Serial.println("Client en ligne"); //on le dit...
    if (client.connected()) { // si le client est connecté
      GET(client); //appel de la fonction de décodage
      //réponse au client
      entete(client); // fonction pour l'entête de la page HTML
      corps(client); // fonction pour le corps
      piedPage(client); // fonction pour le pied de page
      Serial.println("Fin de communication avec le client\n");
      client.stop(); //on déconnecte le client
    }
  }
}
//fonction de fabrication de l'entête HTML
void entete(EthernetClient cl) {
  //infos pour le navigateur
  cl.println("HTTP/1.1 200 OK"); // type du HTML
  cl.println("Content-Type: text/html; charset=ascii"); //type de fichier et encodage des caractères
  cl.println("Connection: close");  // fermeture de la connexion quand toute la réponse sera envoyée
  cl.println();
  //balises d'entête
  cl.println("<!DOCTYPE HTML>");
  cl.println("<html>");
  cl.println("<head><title>Projet ETT</title></head>");
  cl.println("<body><h1>Projet ETT</h1><hr><br>");
}
//fonction de fabrication du corps de page
void corps(EthernetClient cl) {
  cl.println("<br>"); // saut de ligne
  //boucle pour construire chaque ligne en fonction des LED
  for (int l = 0; l < 4; l++) {
    cl.print("<br>LED ");
    cl.print(l);
    cl.print(" ");
    Serial.println(l);
    switch (modeLed[l]) {
      case 0:
        cl.print("OFF ");
        break;
      case 1:
        cl.print("ON ");
        break;
      case 2:
        cl.print("CLI ");
        break;
      case 3:
        cl.println("</html>");
        break;
    }
    cl.print(" <a href=?"); //création du lien inutile de répéter l'adresse du site
    cl.print(l);
    cl.println(" target=_self >Change</a><br>");
  }
}
//fonction de fabrication du pied de page
void piedPage(EthernetClient cl) {
  //balises de pied de page
  cl.println("<br><hr>");
  cl.println("</body>");
  cl.println("</html>");
}
//fonctin décodage GET
void GET(EthernetClient cl) {
  boolean lu = 0; //variable pour indiquer l'état de lecture
  while (cl.available()) { // tant qu'il a des infos à transmettre
    char c = cl.read(); // on lit le caractère
    delay(1); //delai de lecture
    if (c == '?' && lu == 0) { //si "?" repéré
      c = cl.read(); //on lit le caractère suivant qui contient la donnée
      int led = int(c) - 48; //on la transforme en nombre
      modeLed[led] = (modeLed[led] + 1) % 3; //on change l'état de la LED
      delay(10);
      lu = 1; // on dit qu'on a lu l'info
    }

  }
}
//fonction d'allumage des LED par rapport au tableau de mode.
void gestionLed() {
  unsigned long tpsAct = millis(); // récupération du temps actuel
  if (tpsAct - tpsDep > 250) { //si délai dépassé
    for (int l = 0; l < 5; l++) { // chaque LED
      if (modeLed[l] == 0) { // si mode éteint
        etatLed[l] = 0; // on éteind
      }
      else if (modeLed[l] == 1) {// si mode allumé
        etatLed[l] = 1; //on allume
      }
      else if (modeLed[l] == 2) { //si mode clignotant
        etatLed[l] = !etatLed[l]; //on inverse l'état
      }
      digitalWrite(pinLed[l], etatLed[l]); //on met le pin à jour
      tpsDep = tpsAct; //on réinitialise le temps
    }
  }
  //Programme Capteur
  // Regarde si un client est connecté et attend une réponse
  EthernetClient client = serveur.available();
  if (client) {
    // Puis on commence notre JSON par une accolade ouvrante
    client.println("{");
    // On envoie la première clé : "uptime"
    client.print("\t\"uptime (ms)\": ");
    // Puis la valeur de l'uptime
    client.print(millis());
    //Une petite virgule pour séparer les deux clés
    client.println(",");
    // Et on envoie la seconde nommée "analog 0"
    client.print("\t\"analog 0\": ");
    client.println(analogRead(A0));
    // Et enfin on termine notre JSON par une accolade fermante
    client.println("}");
    // Donne le temps au client de prendre les données
    delay(10);
    // Ferme la connexion avec le client
    client.stop();
  }
}






J'ai déja posté un message sur le forum et on m'a dit d'enlever des ligne qui ne servait à rien comme "   EthernetClient client = serveur.available();" car celle-ci à déjà été mise 2 fois avant sauf que lorsque je l'enlève le programme ne marche plus


Je tiens aussi à préciser que je ne suis pas un génie en arduino donc merci de m'expliquer dans des termes simple



Merci de votre compréhension.

J-M-L

Essayez de passez votre client par référence. Dans toutes les fonctions rajoutez un &, par exemple
Code: [Select]
void GET(EthernetClient& cl) {...


Pourquoi la gestion LED doit aussi gérer un client et qu'est-ce que vous balancez ? Si vous avez un client il sera traité plus ou moins aléatoirement  dans une de vos deux fonctions. Il faut centraliser cela dans une seule et savoir quelle réponse donner en fonction de la requête

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Tronconneuse



[/quote]
Essayez de passez votre client par référence. Dans toutes les fonctions rajoutez un &, par exemple
Code: [Select]
void GET(EthernetClient& cl) {...


Pourquoi la gestion LED doit aussi gérer un client et qu'est-ce que vous balancez ? Si vous avez un client il sera traité plus ou moins aléatoirement  dans une de vos deux fonctions. Il faut centraliser cela dans une seule et savoir quelle réponse donner en fonction de la requête


Merci pour votre réponse rapide celle-ci va m'être utile.

La variable gestionLed ne doit pas gérer un client, donc je ne vois pas de quoi vous voulez parlez.


voici juste en dessous ma GestionLed :

Code: [Select]

void gestionLed() {
  unsigned long tpsAct = millis(); // récupération du temps actuel
  if (tpsAct - tpsDep > 250) { //si délai dépassé
    for (int l = 0; l < 5; l++) { // chaque LED
      if (modeLed[l] == 0) { // si mode éteint
        etatLed[l] = 0; // on éteind
      }
      else if (modeLed[l] == 1) {// si mode allumé
        etatLed[l] = 1; //on allume
      }
      else if (modeLed[l] == 2) { //si mode clignotant
        etatLed[l] = !etatLed[l]; //on inverse l'état
      }
      digitalWrite(pinLed[l], etatLed[l]); //on met le pin à jour
      tpsDep = tpsAct; //on réinitialise le temps
    }
  }
}


N'hésiter pas à me dire si je suis aveugle mais de mon point de vu il n'y a pas de client  :)




Sinon qu'est ce que vous entendez par centralisé tout dans une seule fonction, est-ce que je dois aussi enlever les fonction comme "void piedPage" ou non car je pense que si je retire celle-ci le programme ne va plus marcher


Merci d'avance pour votre aide  :)  :)  :)  :)

hbachetti

J'avais déjà fait une réponse dans ce sens : https://forum.arduino.cc/index.php?topic=660646.msg4450801#msg4450801

Pourquoi refaire un nouveau post ?
Avec le même titre ...
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

J-M-L

C'est quoi le bout de code
Code: [Select]
   //Programme Capteur
  // Regarde si un client est connecté et attend une réponse
  EthernetClient client = serveur.available();
  if (client) {
    // Puis on commence notre JSON par une accolade ouvrante
    client.println("{");
    // On envoie la première clé : "uptime"
    client.print("\t\"uptime (ms)\": ");
    // Puis la valeur de l'uptime
....
qui semble être dans votre fonction de par l'indentation ? (Je lis ça sur smartphone je ne vais pas m'amuser a compter les accolades)

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up