Forum Électro-Bidouilleur

Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
Recherche avancée  

Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des probèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - maximeh

Pages: [1] 2
1
Ouf je ne comprenais pas pourquoi 7 quand 6 digit pour remove et substring

en fait le string est réceptionné par un http.request et a cause de ca il y a en plus du string 1 espace au début et à la fin donc j'ai juste fait str.remove(0,1); str.remove(str.length() -1 ,str.length()); et maintenant les remove et substring sont bien 6 et plus 7

dernière modification..
au final a la place de mettre par exemple 002000 je mets __2000 c'est a cause de -02000 car avec _ ca donne _-2000, beaucoup plus claire, dans le code c'est bien entendu traité par la fonction replace(). inputString.replace("_", "");
pour les modérateurs ? j'ai pas mal de questions a poser lié à des problèmes comme ca,  plus algorithmique que électronique mais c'est quand même sur des microcontrôleurs donc il me semble que c'est  lié du coup ou dois je les poster sur ce forum? aussi j'ai appris dans ce post que je vais prendre une grande attention aux questions et répondre a toutes.

 

2
Ca ne correspond pas au message dans ton premier post. Chaque champ avait un nombre de digits variable.

réponse : comme expliqué, j'ai cherché une solution après avoir posé la question et après réflexion j'ai compris que j'avais besoin de 6 digit, avec 3600 pas ils font 201.34 mm

Tu es sur que ça compile?
En supposant que arrastring[titi] contient bien la bonne chaîne de caractère, la bonne formulation serait

réponse : ce code fonctionne à merveille.je peux maintenant envoyer le nombre de positions des 2 moteurs comme je veux. plus limité a 64 charactères.
               arraystring[titi]; est int   j'ai laissé string dans le nom mais c'est int
               converti dans void serialEvent
                if (inputString.length() == 7) {
                 arraystring[toto] = inputString.toInt();
                 inputString.remove(0,7);
                 toto++;
    }
 

3
Hello Kamill

Merci pour tes questions.

Pourquoi 50, je peux te répondre pourquoi pas 200 ou plus.

Désolé mais en même temps que je pose une question je recherche la solution, j'ai justement indiqué que j'avais aussi pensé a un moment découper le string et les envoyer séparément afin de ne pas atteindre les 64 caractères maximum apparemment.

Pourquoi 7 ben c'est en fait 6 digits car dans la fonction remove() tu dois faire nombre de caractères +1 donc 7 c'est en fait le nombre de pas de deux stepper sur un véhicule ROV, donc de -99999 à 999999.

Si j'ai fait ces 3 Serial-print c'est juste pour me démontrer que ca fonctionne. maintenant c'est ca :

if (stringComplete) {
   

 long positions[2];

  stepper_driver.initialize();
  int titi = 0;
  for (int i = 0; i < toto /2; ++i) {
  positions[0] = arraystring[titi];
  titi++;
  positions[1] = arraystring[titi];
  titi++;

  steppers.moveTo(positions);
  steppers.runSpeedToPosition();
  stepper1.setCurrentPosition(0);
  stepper2.setCurrentPosition(0);

}
    inputString = "";
    toto = 0;
    stringComplete = false;
}}



Vraiment désolé de ne pas vous donner tout le code, c'est pas pour une histoire que je veux pas partager mais les autres paramètres n'ont aucune influence sur ce problème que j'avais.

Je te remercie infiniment pour "inputString=Serial.readStringUntil('\n');"

Quels sont tes langages que tu maitrises?


4
et pour finir j'ai modifié pour ne pas être limité au niveau de la taille max d'un string en mettant dans un tableau

String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete
int toto = 0;
String arraystring[50];
void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
   
    Serial.println(arraystring[1]);
    Serial.println(arraystring[2]);
    Serial.println(arraystring[3]);
    inputString = "";
    toto = 0;
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
     if (inputString.length() == 7) {
      arraystring[toto] = inputString;
      inputString.remove(0,7);
      toto++;
    }
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

5
Un grand merci pour vos réponses.
J'ai pensé effectivement de couper le string et d'envoyer l'un après l'autre.

j'envois comme ça;

String myArrayStr[50];

void setup()
{
  Serial.begin(9600);
  pinMode(4, INPUT_PULLUP); 


void loop()
{
if (digitalRead(4) == LOW) {
    String str1 ="123422125472";
    int nb_order = str1.length() /6 ;
    for (int i = 0; i < nb_order; ++i) {
    myArrayStr = str1.substring(0 ,7);
    Serial.print(myArrayStr);
    str1.remove(0,7);
    delay(400); 
    }}}
 

mais le problème c'est au niveau de la réception

void setup()
{
  Serial.begin(9600); 


void loop() { 
if (Serial.available() > 0) 
  {   
    String recData = " "; 
    while(Serial.available())
    {
      char c = Serial.read();
        recData += c;   
      delay(10);     
    } 
    Serial.println(recData);
}}

c'est idiot, j'ai trouvé la olution dans l'exemple serial event dans arduino

String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
    Serial.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
   
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

il faut juste que j'envoi un Serial.println(); a la fin de mon envoi pour que le receveur sache que j'ai fini.

un grand merci encore de votre attention.



6
J'ai besoin de transférer par serial entre un esp01s et un Arduino nano une message comme celui ci :2300_1111_3400_5012_4500_8913_5600_12814_6700_16715_7800_20616_8900_24517_10000_28418_11100_32319_12200_36220_13300_40121_11.
il peut être indéfiniment plus long ou plus petit.

avec la façon standard ci dessous c'est limité a 64, du coup comment faire pour que je puisse envoyer un tel message par serial? un grand merci d'avance

 if (Serial.available() > 0) 
 {
 
   
   String recData = " ";
    String recData2 = " ";
 
   while(Serial.available())
   {
     char c = Serial.read();
     if (Serial.available() > 0)
     {
       
     recData += c;
       
     delay(10);
     
   }

7
Vos projets et Montages d'Électronique / Re : De sd to USB
« le: octobre 26, 2022, 05:51:23 am »
comme pour la sd une clé usb pour y mettre les fichier pour l'impression

8
Vos projets et Montages d'Électronique / De sd to USB
« le: octobre 25, 2022, 10:19:25 pm »
Bonjour,

J'ai une imprimante résine sla laser. Elle a seulement une sortie sd pour les fichiers contenant les gcodes, j'aimerai convertir par une sortie usb. Quelle solution imaginez vous?
merci d'avance

9
Bonjour,

Je n'arrive pas a trouvé un bin compatible pour installer Circuit python sur mon esp32s. Pas de soucis avec micropython je trouve un generic qui fonctionne parfaitement mais j'ai besoin de circuitpython
On trouve des bin pour S2 S3 et esp8266 mais pas S.
Une idée

merci d'avance

10
Hello,

je parlais d'un groupe i2c virtuel pas un projet donc pas de schéma.

Cependant j'ai trouvé une solution qui est par canal  un BSS138 et 2 résistance 10k donc pour 12c il faut 2X, on voit justement electro bidouilleur utiliser un converter logique pour connecter un lcd i2c avec un raspberry pico

11
Malheureusement je ne trouve pas de réponse dans ces pages.

imaginons plutôt un bus i2c avec 7 Arduino et 1 esp8266 comment le câblé avec eux sachant qu'il faut une résistance de 4.7k

12
Discussion Générale d'Électronique / TM1637 5v et esp 3.3v
« le: juin 19, 2022, 09:53:34 pm »
Bonjour,

J'imagine cette question amateur de chez amateur mais je ne trouve rien sur internet sur une solution au problème de 5v et 3.3v

La particularité du tm1637 est qu'il est possible de le mettre en série avec d'autres en partageant le même DIO il faut juste CSK différent pour chaque digit.

Pont de résistance 10k 20k comme pour le serial ne fonctionne pas.

comment protéger les borne de l'esp, merci pour votre aide

13
Bonjour,

Surprise, la réponse semble que D+ et D- sont inversé, il y a des responsabilité quand on ouvre un forum

15
J'ai oublié de dire que pour injecter le sketch pas de soucis, et j'ai ajouté des serial print dans le code source et je reçois bien les messages. c'ets juste d'une commande qui ne réagi pas

Pour moi le plus important c'est cette histoire de 40ma qui apparait quand c'est un ordinateur fixe, c'est la seule différence visible entre les 2 type d'ordi   sachant que lorsqu'il y a 40 ma le système fonctionne    quand je dis 40 ma c'est quand l'alimentation est inactive j'ai un 2 on off un pour alimenter l'alim et le 2e pour activer désactivé l'envoi du courant

Pages: [1] 2