Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2928 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  194  195  196  ..  264  265  266  267  268  269
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°288476
RomainD2
Posté le 19-01-2020 à 11:02:06  profilanswer
 

Reprise du message précédent :
Ok, je compte en effet partir sur un réglage manuel, mais j'ai quand même essayé d'intégrer les capteurs effet hall afin de voir plus tard si on peut synchroniser le tout!

mood
Publicité
Posté le 19-01-2020 à 11:02:06  profilanswer
 

n°288832
depart
Posté le 21-01-2020 à 18:30:26  profilanswer
 

j'ai donc commandé une boite full alu pour installer mon esp8266 et mon dimmer 230V dedans (pour la régulation de mon cumulus)...  
 
https://fr.aliexpress.com/item/4000107135141.html
 
Elle est en transit entre la Chine et la France mais je viens d'avoir une double révélation :
- comment je vais fixer mes composants dans un truc tout métallique ???
- ça va me faire une pu*ain de cage de Faraday, pas exactement idéal pour le wifi de l'ESP ?!?

n°288835
rat de com​bat
attention rongeur méchant!
Posté le 21-01-2020 à 18:35:06  profilanswer
 

Ca fera une cage de Faraday et le 230V dans une boîte métallique c'est une très mauvaise idée. Prends une boîte en plastique.

n°288852
depart
Posté le 21-01-2020 à 19:42:17  profilanswer
 

rat de combat a écrit :

Ca fera une cage de Faraday et le 230V dans une boîte métallique c'est une très mauvaise idée. Prends une boîte en plastique.


J'ai pris une boîte métallique sur conseil du topic, grrr

n°288896
_pollux_
Pan ! t'es mort
Posté le 22-01-2020 à 00:25:53  profilanswer
 

depart a écrit :


J'ai pris une boîte métallique sur conseil du topic, grrr


:??:


---------------
Le topic du sport électronique@hfr : watch the l33t !
n°288976
Manisque
Posté le 22-01-2020 à 16:06:41  profilanswer
 

rat de combat a écrit :

Ca fera une cage de Faraday et le 230V dans une boîte métallique c'est une très mauvaise idée. Prends une boîte en plastique.


 
En effet, ce n'est pas très efficace pour l'ESP8266
Par contre je ne vois pas le problème pour l'alim 230V, au contraire, c'est très bien de la mettre à la terre et d'avoir des entretoises pour que le PCB ne soit pas trop près du métal (5mm suffisent, on conseille un film de mylar en dessous).


---------------
Si tu bois froid juste après le potage chaud, ça va faire sauter l'émail de tes dents - Monorailcat iz ohverin
n°288979
_tchip_
Posté le 22-01-2020 à 16:16:53  profilanswer
 

pour faire les boîtiers, du carton, de la résine époxy  et rulz :o

 

je me souviens de mon voisin quand j'étais gosse, il tirait 2 fils sur un bout de carton, le +, le -, il soudait ton son bordel et trempait le montage intégralement dans l'époxy une fois terminé :D

 

Sinon j'ai acheté un ESP32 je compte travailler en python vu que c'est un langage que je maîtrise déjà.

 

Pour mon 1er vrai projet je voulais faire un radar de recul pour ma voiture pas équipée, mais je vois que ça se trouve déjà en kit complet à 30€ sur amazon  [:clooney38]


Message édité par _tchip_ le 22-01-2020 à 16:31:57
n°288981
dafunky
Posté le 22-01-2020 à 16:35:04  profilanswer
 

et même 10e sur aliexpress


---------------
xPLduino, la domotique DIY deluxe - - - - Sigma 85mm F1.4
n°288982
- Rocket -
Posté le 22-01-2020 à 16:37:11  profilanswer
 

@depart : Sinon perceuse et antenne externe ? Jamais testé par contre, mais il existe certains kits ESP adaptés pour ça.

n°288985
rat de com​bat
attention rongeur méchant!
Posté le 22-01-2020 à 16:49:28  profilanswer
 

Manisque a écrit :

c'est très bien de la mettre à la terre

Comme tu dis. Le soucis c'est qu'il faut le faire et correctement...

mood
Publicité
Posté le 22-01-2020 à 16:49:28  profilanswer
 

n°289415
RomainD2
Posté le 26-01-2020 à 11:43:38  profilanswer
 

Bonjour,

 

Essaie de commander une lampe et un moteur en PWM par l'intermédiaire d'une interface web, le tout codé en arduino sur un ESP32. J'ai réussi à commander la led à l'aide d'un code légèrement modifié trouvé sur le net. Le soucis, c'est pour ajouter une seconde commande dans l'URL, pour le moteur, et là, je n'y arrive pas malgré mes diverses tentatives.

 

Voici l'interface :

 

https://image.noelshack.com/minis/2020/04/7/1580035350-image.png

 

Et voici mon code :

 


Code :
  1. /*********
  2.   Rui Santos
  3.   Complete project details at http://randomnerdtutorials.com 
  4. *********/
  5. #include <WiFi.h>
  6. const int pin3 = 5;
  7. int freqLed = 10;
  8. const int channelLed = 0;
  9. const int resolutionLed = 8;
  10. int dutyCycleLed = 128;
  11. const int pin2 = 22;
  12. int freqMotor = 500;
  13. const int channelMotor = 1;
  14. const int resolutionMotor = 8;
  15. int dutyCycleMotor = 128;
  16. // Replace with your network credentials
  17. const char* ssid     = "xx";
  18. const char* password = "xxx";
  19. // Set web server port number to 80
  20. WiFiServer server(80);
  21. // Variable to store the HTTP request
  22. String header;
  23. // Decode HTTP GET value
  24. String valueString_led = String(5);
  25. String valueString_motor = String(5);
  26. int pos1 = 0;
  27. int pos2 = 0;
  28. int pos3 = 0;
  29. void setup() {
  30.   Serial.begin(115200);
  31.   ledcSetup(channelLed, freqLed, resolutionLed);
  32.   ledcAttachPin(pin3, channelLed);
  33.   ledcWrite(channelLed, dutyCycleLed);
  34.   ledcSetup(channelMotor, freqMotor, resolutionMotor);
  35.   ledcAttachPin(pin2, channelMotor);
  36.   ledcWrite(channelMotor, dutyCycleMotor);
  37.  
  38.   // Connect to Wi-Fi network with SSID and password
  39.   Serial.print("Connecting to " );
  40.   Serial.println(ssid);
  41.   WiFi.begin(ssid, password);
  42.   while (WiFi.status() != WL_CONNECTED) {
  43.     delay(500);
  44.     Serial.print("." );
  45.   }
  46.   // Print local IP address and start web server
  47.   Serial.println("" );
  48.   Serial.println("WiFi connected." );
  49.   Serial.println("IP address: " );
  50.   Serial.println(WiFi.localIP());
  51.   server.begin();
  52. }
  53. void loop(){
  54.   WiFiClient client = server.available();   // Listen for incoming clients
  55.   if (client) {                             // If a new client connects,
  56.     Serial.println("New Client." );          // print a message out in the serial port
  57.     String currentLine = "";                // make a String to hold incoming data from the client
  58.     while (client.connected()) {            // loop while the client's connected
  59.       if (client.available()) {             // if there's bytes to read from the client,
  60.         char c = client.read();             // read a byte, then
  61.         Serial.write(c);                    // print it out the serial monitor
  62.         header += c;
  63.         if (c == '\n') {                    // if the byte is a newline character
  64.           // if the current line is blank, you got two newline characters in a row.
  65.           // that's the end of the client HTTP request, so send a response:
  66.           if (currentLine.length() == 0) {
  67.             // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
  68.             // and a content-type so the client knows what's coming, then a blank line:
  69.             client.println("HTTP/1.1 200 OK" );
  70.             client.println("Content-type:text/html" );
  71.             client.println("Connection: close" );
  72.             client.println();
  73.             // Display the HTML web page
  74.             client.println("<!DOCTYPE html><html>" );
  75.             client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" );
  76.             client.println("<link rel=\"icon\" href=\"data:,\">" );
  77.             // CSS to style the on/off buttons
  78.             // Feel free to change the background-color and font-size attributes to fit your preferences
  79.             client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial; margin-left:auto; margin-right:auto;}" );
  80.             client.println(".slider { width: 300px; }</style>" );
  81.             client.println("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>" );
  82.                    
  83.             // Web Page
  84.             client.println("</head><body><h1>Zootrope Control</h1>" );
  85.            
  86.             client.println("<p>LEDs frequency: <span id=\"ledFreq\"></span></p>" );         
  87.             client.println("<input type=\"range\" min=\"0\" max=\"100\" class=\"slider\" id=\"ledSlider\" onchange=\"led(this.value)\" value=\""+valueString_led+"\"/>" );
  88.             client.println("<script>var slider = document.getElementById(\"ledSlider\" );" );
  89.             client.println("var ledF = document.getElementById(\"ledFreq\" ); ledF.innerHTML = slider.value;" );
  90.             client.println("slider.oninput = function() { slider.value = this.value; ledF.innerHTML = this.value; }" );
  91.             client.println("$.ajaxSetup({timeout:1000}); function led(freqValue) { " );
  92.            
  93.             //client.println("$.get(\"/?value=\" + freqValue + \"&\" + speedValue \"%\" );
  94.             client.println("$.get(\"/?value=\" + freqValue + \"&\" );{Connection: close};}</script>" );
  95.             client.println("<p>Motor Speed: <span id=\"motorSpeed\"></span></p>" );
  96.             client.println("<input type=\"range\" min=\"0\" max=\"100\" class=\"slider\" id=\"motorSlider\" onchange=\"motor(this.value)\" value=\""+valueString_motor+"\"/>" );
  97.             client.println("<script>var sliderM = document.getElementById(\"motorSlider\" );" );
  98.             client.println("var motorF = document.getElementById(\"motorSpeed\" ); motorF.innerHTML = sliderM.value;" );
  99.             client.println("sliderM.oninput = function() { sliderM.value = this.value; motorF.innerHTML = this.value; }" );
  100.             client.println("$.ajaxSetup({timeout:1000}); function motor(speedValue) { " );
  101.            
  102.             client.println("$.get(\"/?value=\" + freqValue + \"&\" + speedValue \"%\" );{Connection: close};}</script>" );
  103.            
  104.             client.println("</body></html>" );   
  105.            
  106.             //GET /?value=180& HTTP/1.1
  107.             if(header.indexOf("GET /?value=" )>=0) {
  108.               pos1 = header.indexOf('=');
  109.               pos2 = header.indexOf('&');
  110.               pos3 = header.indexOf('%');
  111.               valueString_led = header.substring(pos1+1, pos2);
  112.               valueString_motor = header.substring(pos2+1, pos3);
  113.               //Changer la fréquence de la led
  114.               freqLed=valueString_led.toInt();
  115.               ledcSetup(channelLed, freqLed, resolutionLed);
  116.               ledcWrite(channelLed, dutyCycleLed);
  117.               Serial.println(valueString_led);
  118.               dutyCycleMotor=valueString_motor.toInt();
  119.               ledcWrite(channelMotor, dutyCycleMotor);
  120.             }       
  121.             // The HTTP response ends with another blank line
  122.             client.println();
  123.             // Break out of the while loop
  124.             break;
  125.           } else { // if you got a newline, then clear currentLine
  126.             currentLine = "";
  127.           }
  128.         } else if (c != '\r') {  // if you got anything else but a carriage return character,
  129.           currentLine += c;      // add it to the end of the currentLine
  130.         }
  131.       }
  132.     }
  133.     // Clear the header variable
  134.     header = "";
  135.     // Close the connection
  136.     client.stop();
  137.     Serial.println("Client disconnected." );
  138.     Serial.println("" );
  139.   }
  140. }
 

C'est l'ajout du speedValue qui me pose soucis, pour transmettre la vitesse moteur de l'interface web vers l'arduino!

Message cité 1 fois
Message édité par RomainD2 le 29-01-2020 à 08:59:56
n°289428
rat de com​bat
attention rongeur méchant!
Posté le 26-01-2020 à 15:15:58  profilanswer
 

C'est malin de laisser le mdp wifi dans le code. :o  
 
Bon, je vais regarder. J'espère que tu as pensé à la diode de roue libre pour le moteur!

n°289429
rat de com​bat
attention rongeur méchant!
Posté le 26-01-2020 à 15:36:22  profilanswer
 

Je ne commenterai pas la qualité de ce code. :o
 
Un truc comme ceci devrait marcher. J'ai pas testé, pas le matos, donc sans garantie toussa.

Code :
  1. Rui Santos
  2. Complete project details at http://randomnerdtutorials.com
  3. *********/
  4. #include <WiFi.h>
  5. const int pin3 = 5; //c'est très clair...
  6. int freqLed = 10;
  7. const int channelLed = 0;
  8. const int resolutionLed = 8;
  9. int dutyCycleLed = 128;
  10. const int pin2 = 22;
  11. int freqMotor = 500;
  12. const int channelMotor = 1;
  13. const int resolutionMotor = 8;
  14. int dutyCycleMotor = 128;
  15. // Replace with your network credentials
  16. const char* ssid     = "HR";
  17. const char* password = "RD19marsHF";
  18. // Set web server port number to 80
  19. WiFiServer server(80);
  20. // Variable to store the HTTP request
  21. String header;
  22. // Decode HTTP GET value
  23. String valueString_led = String(5);
  24. String valueString_motor = String(5);
  25. int pos1 = 0;
  26. int pos2 = 0;
  27. int pos3 = 0;
  28. void setup()
  29. {
  30. Serial.begin(115200);
  31. ledcSetup(channelLed, freqLed, resolutionLed);
  32. ledcAttachPin(pin3, channelLed);
  33. ledcWrite(channelLed, dutyCycleLed);
  34. ledcSetup(channelMotor, freqMotor, resolutionMotor);
  35. ledcAttachPin(pin2, channelMotor);
  36. ledcWrite(channelMotor, dutyCycleMotor);
  37. // Connect to Wi-Fi network with SSID and password
  38. Serial.print("Connecting to " );
  39. Serial.println(ssid);
  40. WiFi.begin(ssid, password);
  41. while (WiFi.status() != WL_CONNECTED)
  42. {
  43.  delay(500);
  44.  Serial.print("." );
  45. }
  46. // Print local IP address and start web server
  47. Serial.println("" );
  48. Serial.println("WiFi connected." );
  49. Serial.println("IP address: " );
  50. Serial.println(WiFi.localIP());
  51. server.begin();
  52. }
  53. void loop()
  54. {
  55. WiFiClient client = server.available();   // Listen for incoming clients
  56. if (client)                               // If a new client connects,
  57. {
  58.  Serial.println("New Client." );          // print a message out in the serial port
  59.  String currentLine = "";                // make a String to hold incoming data from the client
  60.  while (client.connected())              // loop while the client's connected
  61.  {
  62.   if (client.available())               // if there's bytes to read from the client,
  63.   {
  64.    char c = client.read();             // read a byte, then
  65.    Serial.write(c);                    // print it out the serial monitor
  66.    header += c;
  67.    if (c == '\n')                      // if the byte is a newline character
  68.    {
  69.     // if the current line is blank, you got two newline characters in a row.
  70.     // that's the end of the client HTTP request, so send a response:
  71.     if (currentLine.length() == 0)
  72.     {
  73.      // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
  74.      // and a content-type so the client knows what's coming, then a blank line:
  75.      client.println("HTTP/1.1 200 OK" );
  76.      client.println("Content-type:text/html" );
  77.      client.println("Connection: close" );
  78.      client.println();
  79.      // Display the HTML web page
  80.      client.println("<!DOCTYPE html><html>" );
  81.      client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" );
  82.      client.println("<link rel=\"icon\" href=\"data:,\">" );
  83.      // CSS to style the on/off buttons
  84.      // Feel free to change the background-color and font-size attributes to fit your preferences
  85.      client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial; margin-left:auto; margin-right:auto;}" );
  86.      client.println(".slider { width: 300px; }</style>" );
  87.      client.println("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>" );
  88.      // Web Page
  89.      client.println("</head><body><h1>Zootrope Control</h1>" );
  90.      client.println("<p>LEDs frequency: <span id=\"ledFreq\"></span></p>" );
  91.      client.println("<input type=\"range\" min=\"0\" max=\"100\" class=\"slider\" id=\"ledSlider\" onchange=\"led(this.value)\" value=\""+valueString_led+"\"/>" );
  92.      client.println("<script>var slider = document.getElementById(\"ledSlider\" );" );
  93.      client.println("var ledF = document.getElementById(\"ledFreq\" ); ledF.innerHTML = slider.value;" );
  94.      client.println("slider.oninput = function() { slider.value = this.value; ledF.innerHTML = this.value; }" );
  95.      client.println("$.ajaxSetup({timeout:1000}); function led(freqValue) { " );
  96.      client.println("$.get(\"/?value_led=\" + freqValue + \"&\" );{Connection: close};}</script>" );
  97.      client.println("<p>Motor Speed: <span id=\"motorSpeed\"></span></p>" );
  98.      client.println("<input type=\"range\" min=\"0\" max=\"100\" class=\"slider\" id=\"motorSlider\" onchange=\"motor(this.value)\" value=\""+valueString_motor+"\"/>" );
  99.      client.println("<script>var sliderM = document.getElementById(\"motorSlider\" );" );
  100.      client.println("var motorF = document.getElementById(\"motorSpeed\" ); motorF.innerHTML = sliderM.value;" );
  101.      client.println("sliderM.oninput = function() { sliderM.value = this.value; motorF.innerHTML = this.value; }" );
  102.      client.println("$.ajaxSetup({timeout:1000}); function motor(speedValue) { " );
  103.      client.println("$.get(\"/?value_moteur=\" + speedValue + \"&\" );{Connection: close};}</script>" );
  104.      client.println("</body></html>" );
  105.      //GET /?value_led=180& HTTP/1.1
  106.      if(header.indexOf("GET /?value_led=" )>=0)
  107.      {
  108.       pos1 = header.indexOf('=');
  109.       pos2 = header.indexOf('&');
  110.       valueString_led = header.substring(pos1+1, pos2);
  111.       //Changer la fréquence de la led
  112.       freqLed=valueString_led.toInt();
  113.       ledcSetup(channelLed, freqLed, resolutionLed); //ça me parait pas correct de re-appeller setup ici, mais je connais pas ce truc donc je peux me tromper
  114.       ledcWrite(channelLed, dutyCycleLed);
  115.       Serial.println(valueString_led);
  116.      }
  117.      // GET /?value_moteur=123& HTTP/1.1
  118.      else if(header.indexOf("GET /?value_moteur=" )>=0)
  119.      {
  120.       pos1 = header.indexOf('=');
  121.       pos2 = header.indexOf('&');
  122.       valueString_motor = header.substring(pos1+1, pos2);
  123.       dutyCycleMotor=valueString_motor.toInt();
  124.       ledcWrite(channelMotor, dutyCycleMotor);
  125.      }
  126.      // The HTTP response ends with another blank line
  127.      client.println();
  128.      // Break out of the while loop
  129.      break;
  130.     }
  131.     else     // if you got a newline, then clear currentLine
  132.     {
  133.      currentLine = "";
  134.     }
  135.    }
  136.    else if (c != '\r')      // if you got anything else but a carriage return character,
  137.    {
  138.     currentLine += c;      // add it to the end of the currentLine
  139.    }
  140.   }
  141.  }
  142.  // Clear the header variable
  143.  header = "";
  144.  // Close the connection
  145.  client.stop();
  146.  Serial.println("Client disconnected." );
  147.  Serial.println("" );
  148. }

n°289487
Turkleton
I don't quite understand you
Posté le 27-01-2020 à 11:03:19  profilanswer
 

RomainD2 a écrit :


Code :
  1. client.println("$.get(\"/?value=\" + freqValue + \"&\" + speedValue \"%\" );{Connection: close};}</script>" );



Il manque un "+" entre speedValue et le caractère pourcentage. Du coup "pos3 = header.indexOf('%');" renvoie  -1 et donc "valueString_motor = header.substring(pos2+1, pos3);" ne retourne rien vu que pos3 est inférieur à pos2+1;


---------------
If you think it could look good, then I guess it should
n°289493
depart
Posté le 27-01-2020 à 11:49:44  profilanswer
 

J'ai repris un peu la problématique de transmission de données (mesure de consommation électrique issue d'une pince ampèremétrique sur un arduino) vers un esp8266 pour avoir toute une partie communication wifi potable.
 
Comme j'avais constaté qu'écrire bêtement ma valeur de conso sur la sortie série/usb me permettait facilement d'importer la valeur dans domoticz (puis de l'envoyer dans un second temps en wifi à mon esp8266) ça m'a donné l'idée d'aller en fait physiquement relier les deux via le canal de communication rx/tx.
 
Super, j'installe un programme bateau sur un esp qui traine, je le branche à l'arduino en place et bam, du premier coup je récupère mes valeurs
 
Le code de l'esp :

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
}
 
void loop() { // run over and over
  if (Serial.available()) {
    Serial.write(Serial.read());
  }
}


Juste 2 câbles dupont entre les RX/TX des 2 boards.
 
Fort de ce succès, j'adapte le code "réel" nécessaire de l'esp pour rajouter la récupération de la valeur et la stocker dans une variable
En gros quelque part dans le loop() je rajoute

if (Serial.available()) {
          arduino_value = Serial.read();
}


Avec arduino_value déclaré en String auparavant et bien entendu un Serial.begin(115200); dans le setup() (115200 étant également la fréquence à laquelle l'arduino émet).
Le loop peut prendre environ 1 seconde à s’exécuter au total (mesure de température, gestion du serveur http, delay rajouté...)
 
 
Et là c'est le drame, à l'exécution je me rends compte que je récupère en gros 2 digts à chaque itération... alors que je devrais récupérer une chaine complète du type "1;2;1;0;17;534.20" (534.20 étant la valeur de consommation qui m'intéresse au final, qu'il faudra que je récupère dans une variable séparée mais ça on verra dans un second temps).
J'imagine que je récupère juste "au moment" de la lecture, ce que l'arduino envoie, mais qu'ensuite l'exécution du loop() se poursuit même si tout n'a pas été récupéré. Comment faire pour s'assurer d'avoir une ligne entière, sans risquer de couper le début et jusqu'au retour chariot ?


Message édité par depart le 27-01-2020 à 11:57:16
n°289496
Turkleton
I don't quite understand you
Posté le 27-01-2020 à 12:03:59  profilanswer
 

Tu testes si le dernier caractère de arduino_value est bien un retour chariot (ou n'importe quel caractère qui est censé terminer ta chaîne).
 
Tu peux aussi regarder du côté de Serial.readStringUntil()


---------------
If you think it could look good, then I guess it should
n°289500
depart
Posté le 27-01-2020 à 12:36:45  profilanswer
 

Turkleton a écrit :

Tu testes si le dernier caractère de arduino_value est bien un retour chariot (ou n'importe quel caractère qui est censé terminer ta chaîne).
 
Tu peux aussi regarder du côté de Serial.readStringUntil()


 
Alors :
Serial.readStringUntil('\n'); -> problème, je peux avoir une ligne qui commence en plein milieu, et qui ne contient donc pas le début de la ligne -> gros boxon pour récupérer par exemple le 5è élément de cette ligne (avec un séparateur). Je n'ai même pas la certitude de récupérer une valeur entière de consommation (genre je peux récupérer juste les 2 ou 3 derniers caractères d'une ligne par ex).
 
Serial.readString() -> me récupère plusieurs lignes complètes. Ca doit être parce que l'arduino émet par exemple une ligne toutes les 300ms et que l'esp boucle entre 1 et 3 secondes. Idéalement il faudrait que je récupère la dernière valeur de la dernière ligne, ça serait le plus pertinent (consommation la plus récente), c'est en gros le dernier "Xdigits.2digits", mais ça sent le gros bazar pour manipuler tout ça (bon avec lastindexof() et substring() je devrais m'en sortir).
 
Dans ma variable je récupère par exemple :
"1;2;1;0;17;534.20\n
1;2;1;0;17;517.35\n
1;2;1;0;17;1024.12\n
1;2;1;0;17;2541.23\n
1;2;1;0;17;17.34\n"
 
Jusqu'à présent ça me retourne toujours des lignes entières (car j'imagine que le temps de transmission est négligeable par rapport au temps entre l'envoi de 2 mersures), mais ai-je une certitude de bien récupérer une ligne complète ? j'en doute :(
 
A priori ça ralentit aussi pas mal l'exécution du loop car à chaque itération ça attend le timeout (1000ms par défaut). Bof...
Il me faudrait un truc en parallèle du loop principal qui lise en continu ce qui arrive sur le RX et à chaque fois qu'on a une ligne complète (du début à la fin) ça la parse et définit une variable. Comment faire ça ?

Message cité 1 fois
Message édité par depart le 27-01-2020 à 13:00:14
n°289509
rat de com​bat
attention rongeur méchant!
Posté le 27-01-2020 à 13:24:30  profilanswer
 

depart a écrit :

Il me faudrait un truc en parallèle du loop principal qui lise en continu ce qui arrive sur le RX et à chaque fois qu'on a une ligne complète (du début à la fin) ça la parse et définit une variable. Comment faire ça ?

Avec une interruption?
Dans l'ISR:
lire le caractère reçu et le placer dans le buffer
si une ligne complète a été reçue ("\n" ) mettre un drapeau
 
 
Dans le loop:
Si(drapeau)
remettre drapeau à zéro
s'occuper du traitement du buffer
 
mots-clés: interruption, drapeau, variable volatile, "atomic access"

n°289515
depart
Posté le 27-01-2020 à 13:56:33  profilanswer
 

je vais regarder ça.
Là j'avais renforcé le readStringUntil pour n'utiliser la valeur récupérée que si j'avais au moins un ";" (donc forcément la valeur qui m'intéresse entre ce dernier ; et le retour chariot).
Gros code dégueu de débug :

 if (Serial.available()) {
          // Nota, les valeurs sont de type "1;2;1;0;17;17.34\n" (la conso étant entre le dernier ; et le retour chariot)
          arduino_value = Serial.readStringUntil('\n'); // ça lit jusqu'à la fin d'une ligne, mais il peut manquer le début
          Serial.print("Nouvelle valeur remontée de l'arduino : " );
          Serial.println(arduino_value);
          int avant_dernier = arduino_value.lastIndexOf(";" ) ;
          if(avant_dernier > 0) { // si on a trouvé un ";" (et donc un retour chariot) on sait qu'on a une valeur complète de consommation
            String tmp_realpower = arduino_value.substring(avant_dernier+1) ;
            arduino_realpower = tmp_realpower.toFloat();
            Serial.print("Nouvelle conso remontée sur l'arduino float : " );
            Serial.println(arduino_realpower);
            millis_get_arduino = millis() ;
          } else {
            Serial.println("Nouvelle valeur remontée de l'arduino non conforme " );
          }
        }


 
Sur le principe ça fonctionne... mais en pratique, ça se décale à mort, genre si 3 valeurs sont postées par l'arduino chaque seconde mais que le loop() prend une seconde à s'éxécuter, j'ai 2 valeurs de retard, à l'itération suivante, le loop() traitera la 2è valeur, et j'en aurai encore 3 nouvelles d'arrivées (donc 6 au bout de la 2è seconde, et j'en aurai traité 2, encore 4 en attente)... ainsi de suite.
Donc ouais il va falloir déporter ça... je n'ai jamais utilisé les interruptions, va falloir que je creuse le sujet.


Message édité par depart le 27-01-2020 à 13:57:10
n°289521
jimbofarra​r
Poreux de la cafetière
Posté le 27-01-2020 à 14:14:16  profilanswer
 

Il faut que tu établisses un protocole d'échange entre l'arduino et l'ESP.
 
C'est l'ESP qui doit demander à l'arduino de lui envoyer les données plutôt que d'essayer de les choper à la volée.


---------------
Bien des Shubs et des Zouls furent calcinés dans les profondeurs de l'énorme Sloar, en vérité, je vous le dis !
n°289522
rat de com​bat
attention rongeur méchant!
Posté le 27-01-2020 à 14:16:42  profilanswer
 

C'est une autre solution et généralement plus propre si on a le choix, mais sinon un envoi continu et une interruption fonctionnera très bien. Reste à savoir ce qui est plus simple à faire dans le monde Arduino.

n°289523
depart
Posté le 27-01-2020 à 14:18:41  profilanswer
 

Bon à priori pas d'interruption "serial" sur esp8266 :(
Genre ça https://www.arduino.cc/en/Tutorial/SerialEvent ça ne fonctionne pas.
Il faut rajouter un appel dans le loop principal, genre :
if (Serial.available()) {
            serialEvent();
}
Du coup je n'ai pas l'impression que ça ait grand intérêt car à première vue ça me fait le même comportement que "Serial.readString()" (plusieurs lignes d'un coup).

Message cité 1 fois
Message édité par depart le 27-01-2020 à 14:19:24
n°289524
rat de com​bat
attention rongeur méchant!
Posté le 27-01-2020 à 14:36:39  profilanswer
 

Si je crois la doc le machin Serial est déjà basé sur des interruptions (le contraire serait étonnant par ailleurs). http://arduino.esp8266.com/Arduino [...] tml#serial
Donc soit tu l'utilises mal (je connais pas ce truc), soit il est mal foutu.

 

Si t'arrives à rien tu fais comme disais jimbofarrar, à savoir un protocole de demande entre tes deux bestioles. Ca peut être tout simple: Tu envoyes un "\n" et tu récupéres une et une seule ligne.


Message édité par rat de combat le 27-01-2020 à 14:37:07
n°289525
jimbofarra​r
Poreux de la cafetière
Posté le 27-01-2020 à 14:40:52  profilanswer
 

rat de combat a écrit :

Avec une interruption?
Dans l'ISR:
lire le caractère reçu et le placer dans le buffer
si une ligne complète a été reçue ("\n" ) mettre un drapeau
 
 
Dans le loop:
Si(drapeau)
remettre drapeau à zéro
s'occuper du traitement du buffer
 
mots-clés: interruption, drapeau, variable volatile, "atomic access"


C'est inutile puisque l'UART passe déjà par une interruption qui copie la valeur reçue dans le buffer de réception (si il reste de la place) Serial.read ne fait que lire dans le buffer.


---------------
Bien des Shubs et des Zouls furent calcinés dans les profondeurs de l'énorme Sloar, en vérité, je vous le dis !
n°289528
jimbofarra​r
Poreux de la cafetière
Posté le 27-01-2020 à 14:45:45  profilanswer
 

depart a écrit :

Bon à priori pas d'interruption "serial" sur esp8266 :(
Genre ça https://www.arduino.cc/en/Tutorial/SerialEvent ça ne fonctionne pas.
Il faut rajouter un appel dans le loop principal, genre :
if (Serial.available()) {
            serialEvent();
}
Du coup je n'ai pas l'impression que ça ait grand intérêt car à première vue ça me fait le même comportement que "Serial.readString()" (plusieurs lignes d'un coup).


serialEvent n'est exécuté qu'en fin de loop donc ne change rien à l'affaire.
 
Tu parlais de delay dans ton code, c'est bloquant. Si tu as besoin de "tempos" il vaut mieux les faire par des tests sur la valeur de millis()
 
PS : Je rajouterais même que spammer le Rx de l'ESP te fera de toute façon rater des données par débordement du buffer.


Message édité par jimbofarrar le 27-01-2020 à 14:48:43

---------------
Bien des Shubs et des Zouls furent calcinés dans les profondeurs de l'énorme Sloar, en vérité, je vous le dis !
n°289533
rat de com​bat
attention rongeur méchant!
Posté le 27-01-2020 à 15:01:53  profilanswer
 

jimbofarrar a écrit :

C'est inutile puisque l'UART passe déjà par une interruption qui copie la valeur reçue dans le buffer de réception (si il reste de la place) Serial.read ne fait que lire dans le buffer.

Oui, voir mon message 14:36:39. Après l'avantage de faire soit-même une ISR c'est justement de pouvoir faire en sorte qu'on sache quand est-ce que une seule ligne complète a été reçue. Mais ce n'est pas compatible avec l'esprit Arduino. Bref, +1 pour le protocole.

n°289615
depart
Posté le 28-01-2020 à 10:44:00  profilanswer
 

J'ai adapté le code pour que la boucle se fasse plus rapidement déjà.
 
Pour l'instant l'aspect question-réponse entre l'esp et l'arduino m'embête un peu car j'ai besoin de garder le système actuel en place (l'arduino poste aussi en USB les valeurs, qui sont récupérées par domoticz... en tout cas pour l'instant durant mes tests car je n'ai qu'un arduino, qu'une pince ampèremétrique...
 
Ca a l'air de fonctionner pas trop mal. Il y a juste lorsque parfois la boucle prend plus de temps que prévu (appel http pour poster des valeurs par ex) où je récupère des données incorrectes, mais en les rejetant si elles ne sont pas conformes à ce que j'attend ça me va car j'en ai une conforme qui arrive une demi seconde plus tard.
Ca a tourné toute la nuit sans crasher... c'est plutôt bon signe.
 

n°289640
depart
Posté le 28-01-2020 à 12:10:20  profilanswer
 

Bon sinon pour attaquer la phase "finale" de mise en production je me pose pas mal de questions en therme de logique/sécurité électrique/... :
- j'ai mon cumulus à à peu près 4m de mon tableau électrique.
- j'ai l'arduino + breadboard + fils vers un petit transfo (pour mesurer la tension) et la pince ampèremétrique (qui doit être dans le tableau)
- j'ai l'esp8266, la sonde de température qui part vers le cumulus, le pilotage du dimmer 230V pour réguler le cumulus et un sonoff pour pouvoir couper le tout ou rebooter l'esp si besoin.
 
Arduino :
https://reho.st/self/4c0876c45b6d8f3d4689a2fcc1e21482773532e4.jpg
 
Dimmer :  
https://reho.st/self/2a84fdd90c08029a7042a712cc86f158bfb7969a.jpg
 
Pour l'instant (en test) j'ai l'arduino en vrac à côté du tableau électrique et l'esp et tout le merdier à côte du cumulus. J'ai tiré un câble téléphonique entre les 2 pour la comm RX/TX... mais il pourrait servir à la sonde de température.
 
Idéalement je me dis que tout mettre au même endroit et juste déporter la mesure de la température ça serait plus intelligent, 1 seul boitier, et juste les fils qui vont bien qui en sortent. Bon par contre ça fait beaucoup de monde !
 
1/ J'ai un disjoncteur dédié pour le cumulus donc je peux me repiquer en sortie dessus pour insérer sonoff/dimmer et tout le reste. Mais comment faire ça proprement ? Comment je sors du tableau pour aller vers mon boitier et revenir dans le tableau pour aller vers le cumulus ?
 
2/ J'aimerai bien pouvoir bypasser tout le système facilement, genre en cas de pépin matériel dans le boitier de régulation (vu l'explosion de composant de l'autre jour, ça ne serait pas improbable que ça se reproduise). Comment faire ça proprement ? Actuellement j'ai juste intercalé mon système avec une prise 230V mâle + femelle, comme ça soit je branche mon cumulus sur sa prise murale, soit sur mon système de régulation. Ca me chagrine un peu de risquer de perdre tout ça.
 
3/ Vu que j'ai 2 modules USB 5V à alimenter, j'aimerai intégrer le ou les transfos à l'intérieur de mon boitier, là pour tester j'ai mis les 2 pins d'un chargeur de smartphone dans un domino, ça marche mais ça fait vraiment honteux bricolage... Je peux désosser le chargeur pour faire une jolie soudure, mais souder un truc genre câble 1.5mm² rigide sur du 230V ça me semble un peu bizarre. Des suggestions ?
 
4/ Au lieu de mon petit boitier métal, je me dis qu'installer un mini tableau électrique serait peut-être plus propre, ça résiste au feu le plastique des tableaux électriques ? Si mon dimmer explose à nouveau ça me protège d'un incendie ou pas du tout ?
 
5/ mélanger du 230VAC et du 5VDC dans le même boitier ça vous parait surréaliste/dangereux ?
 
6/ dans un endroit abrité de la poussière et du mouvement, une breadboard ça peut le faire sur du long terme où il faut que je soude tout ? Même chose, les câbles Dupont ça a l'air très susceptible de bouger, sortir, faire des faux contacts... pour fixer sur les cartes arduino/esp il faut quoi ? souder sur les pins ? shield avec dominos ? scotch pour maintenir les câbles Dupont en place ?


Message édité par depart le 28-01-2020 à 13:04:04
n°289645
- Rocket -
Posté le 28-01-2020 à 12:38:21  profilanswer
 

Pour ta question 6, je souderais. La breadboard c'est bien pour apprendre et faire des prototypes, tant qu'on est pas en hautes fréquences / tensions / courants.

 

Il existe des shields nus. Ce serait déjà plus propre.

 

Achète toi aussi des kit d'entretoises / visseries.


Message édité par - Rocket - le 28-01-2020 à 12:41:20
n°289652
rat de com​bat
attention rongeur méchant!
Posté le 28-01-2020 à 13:20:08  profilanswer
 

Si tu veux les normes tu demandes à notre électricien (eeinstein).

 

Si tu veux une réponse pragmatique: Un boîtier plastique ignifugé, une fixation sur les câbles entrants et sortants, bien relier la terre et voilà.
Un boîtier métallique résiste mieux au feu mais il faut une bonne mise à la terre, sinon ça peut devenir très dangereux en cas de soucis.
Mélanger du 230V et du 5V, tant qu'on fait en sorte que les deux ne se rencontrent pas (isolation, fixation des modules et câbles, ...) je dirais c'est pas catastrophique.
Plutôt que le domino je souderai des fils rigides sur l'entrée du chargeur. C'est pas aux normes mais tant que tu isoles (gaine thermoretractable!) et que ça ne bouge pas ça tiendra une éternité. Ou mieux des fils souples mais pour visser ces derniers dans les dominos faut des embout métalliques et la pince qui va bien, tu dois pas avoir ça je suppose. Ou alors utiliser des Wago qui prennent rigide et souple mais c'est plus cher...
Pour le breadboard, perso je dirais si tu fous une bonne dose de colle chaude sur les connecteurs ça le fera, même si c'est un peu HB. J'ai fait la même chose pour un projet recemment (TBT par contre). :o

 

SANS GARANTIE.

 

PS: Soit quand même conscient que si ton truc crame tu peux avoir de gros ennuis avec l'assurance.


Message édité par rat de combat le 28-01-2020 à 13:22:18
n°289817
teepodavig​non
Sheraf.
Posté le 29-01-2020 à 15:11:47  profilanswer
 

Drap, j'avais offert du matos à _tchip_ et ma femme a trouvé que je kiffais assez donc elle m'en a acheter aussi :lol:


Message édité par teepodavignon le 29-01-2020 à 15:12:14
n°289871
fredo3
Posté le 29-01-2020 à 22:32:24  profilanswer
 

Salut
 
Bon c'est pas vraiment le topic approprié mais soit.
 
Que pensez vous de MongooseOS pour un ESP32?
 
C'est bien ou vaut mieux une alternative libre/gratos, sachant que ce qui m'intéresse c'est l'update du firmware à distance et MQTT.

n°290097
WipEout 20​97
Do you think we can fly
Posté le 31-01-2020 à 16:24:20  profilanswer
 

Pouet :o
 
J'avais posté ici il y a quelque temps concernant une histoire de limiteur de RPM pour mon projet de télémétrie parce que m'en sortais pas, pis on m'a demandé mon code actuel et j'ai disparu étant pas mal occupé :o
Pour résumer j'ai les données suivantes, venant d'un autre ardu qui s'occupe des capteurs et envoie tout ça dans une structure facilitée par la bib Easytransfer (a terme je ferai du tout en un, pour l'instant ça m'arrange pas)
 
TELEM.rpm = valeur 16 bits du compte tours (de 0 a 20000 environ)
TELEM.rad = valeur 16 bits du signal radio (standard RC donc de 1000 a 2000)
 
Mon souci est le suivant : je suis alimenté par un lipo 2 cellules HV, et le variateur de vitesse comme 99% des autres modèles envoie le voltage maximal au moteur donc 8.4v au début, 7.4 pendant la période la plus longue pour finir par chuter jusqu'a 6 pendant les derniers instants.
J'aimerais limiter le signal RC maximal envoyé au variateur afin que le moteur ne dépasse pas les 17000rpm (actuellement le max environ a 7.4v) afin d'avoir une vitesse plus constante.
 
Donc ce qui manque dans le code :
> tant que le moteur n'a pas atteint les 17000rpm on envoie la valeur réelle a l'esc via servo.esc
> si le moteur atteint 17000rpm, la valeur envoyée a l'esc est bloquée a la valeur actuelle
 
J'ai surtout une expérience en matière d'acquisition de capteurs, de calculs simples etc... la j'ai tenté des trucs avec des constrain tout ça, je m'en sors pas vraiment donc si vous pouviez m'aider...
doit y avoir un truc a gérer avec un timer ou autre :o
 
Donc si vous avez 5 minutes a me consacrer...  [:transparency] ça enrichisserait mes connaissances.
 
 

Citation :


 
#include <EasyTransfer.h>
#include <Servo.h>
 
// Sortie ESC
#define ESC_PIN 4
Servo esc;
 
// Données de télémétrie
EasyTransfer ETin;
 
struct RECEIVE_DATA_STRUCTURE {
  uint8_t mod;
  uint16_t rad;
  uint16_t rpm;
  uint8_t spd;
  uint8_t bat;
  uint8_t curr;
  uint8_t tmot;
  uint8_t tesc;
};
 
RECEIVE_DATA_STRUCTURE TELEM;
 
void setup()
{
  escserv.attach(ESC_PIN, 1000, 2000);
  Serial.begin(9600);
  ETin.begin(details(TELEM), &Serial);
}
 
void loop()
{
 
ETin.receiveData();
esc.writeMicroseconds(TELEM.rad);
 
}
 

n°290102
rat de com​bat
attention rongeur méchant!
Posté le 31-01-2020 à 17:04:29  profilanswer
 

Non testé faute de matos, sans garantie. :o  

Code :
  1. uint16_t rad_last;
  2. #define SEUIL 17000
  3. void loop()
  4. {
  5.     ETin.receiveData();
  6.     if(TELEM.rpm<SEUIL)
  7.     {
  8.         rad_last=TELEM.rad;
  9.         esc.writeMicroseconds(TELEM.rad);
  10.     }
  11.     else
  12.     {
  13.         esc.WriteMs(rad_last);
  14.     }
  15. }

n°290132
Bourinatto​r
Posté le 31-01-2020 à 19:05:49  profilanswer
 

:hello:  
 
Je me suis lancer dans un bricolage... Mais du coup, j'ai besoin de creusé un peux ;)
 
Le projet: une boite a bouton...
 
https://www.youtube.com/watch?v=Z7Sc4MJ8RPM
 
et le code associé... Que j'ai copier-coller dans le soft arduino.
 
https://github.com/AM-STUDIO/32-FUN [...] _BOXV2.ino
 
Donc les soudures sont faites, je n'ai juste pas mis tt les boutons mais ca ne devrait pas posé plus de problèmes que ça vu que ceux qui ne sont pas brancher n’empêchent pas la fermeture du circuit.
 
1/ Problème lors de l'upload du soft dans l'arduino. Je pense résolu via le gestionnaire de librairie du soft.
 
J'ai sélectionner Arduino léonardo et  le port correspondant.
J'ai copier coller le code mais lorsque j'upload j'ai une erreur:  
<Keypad.h> no such file or directory
 
Je suppose que je dois télécharge une librairie "keypad" puis "joystick"  
 
 
2/Toujours lors de l'upload du programme. Je comprends pas trop le problème. A noter que windows détecte mon arduino en "clavier".
 
 

Spoiler :

Arduino : 1.8.11 (Windows 10), Carte : "Arduino Leonardo"
 
arduino_debug.exe:95:1: error: 'Joystick_' does not name a type; did you mean 'Joystick'?
 
 Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
 
 ^~~~~~~~~
 
 Joystick
 
D:\arduino-1.8.11\programme back up\arduino_debug.exe\arduino_debug.exe.ino: In function 'void setup()':
 
arduino_debug.exe:101:11: error: expected unqualified-id before '.' token
 
   Joystick.begin();
 
           ^
 
D:\arduino-1.8.11\programme back up\arduino_debug.exe\arduino_debug.exe.ino: In function 'void CheckAllButtons()':
 
arduino_debug.exe:122:39: error: expected unqualified-id before '.' token
 
                               Joystick.setButton(buttbx.key[i].kchar, 1);
 
                                       ^
 
arduino_debug.exe:126:39: error: expected unqualified-id before '.' token
 
                               Joystick.setButton(buttbx.key[i].kchar, 0);
 
                                       ^
 
D:\arduino-1.8.11\programme back up\arduino_debug.exe\arduino_debug.exe.ino: In function 'void CheckAllEncoders()':
 
arduino_debug.exe:157:15: error: expected unqualified-id before '.' token
 
       Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
 
               ^
 
arduino_debug.exe:157:70: error: expected unqualified-id before '.' token
 
       Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
 
                                                                      ^
 
arduino_debug.exe:160:15: error: expected unqualified-id before '.' token
 
       Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
 
               ^
 
arduino_debug.exe:160:69: error: expected unqualified-id before '.' token
 
       Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
 
                                                                     ^
 
exit status 1
'Joystick_' does not name a type; did you mean 'Joystick'?
 
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.


 
Solution simple,  
Merci :jap:
 
Vous pensez que l'upload ne se fait pas car les autres switch sont absent?
 
Et pour meublé ;)
 
https://reho.st/medium/self/a646e86a176baa89dbbc54bd1279fdd53cc6b188.jpg

n°290135
rat de com​bat
attention rongeur méchant!
Posté le 31-01-2020 à 19:13:43  profilanswer
 

ligne 95: Essaye de changer Joystick_ en Joystick_t

n°290138
Bourinatto​r
Posté le 31-01-2020 à 19:29:43  profilanswer
 

pas mieux: même erreur
 
'Joystick_t' does not name a type; did you mean 'Joystick'?

n°290141
rat de com​bat
attention rongeur méchant!
Posté le 31-01-2020 à 19:40:14  profilanswer
 

Alors t'as pas bien installé la lib je pense.
 
PS: Soit continuer ici soit dans l'autre sujet, pas les deux.

n°290144
Bourinatto​r
Posté le 31-01-2020 à 20:20:03  profilanswer
 

Problème de librairie, j'ai mis le temps mais j'ai réussi.
 
Etape 1 découvrir les librairies, étape 2 ne pas confondre deux librairies proches de nom...
 
L'upload ayant réussi je pense que ca va le faire. Merci en tt cas :)

n°290156
jimbofarra​r
Poreux de la cafetière
Posté le 31-01-2020 à 21:55:39  profilanswer
 

Bourinattor a écrit :

Problème de librairie, j'ai mis le temps mais j'ai réussi.
 
Etape 1 découvrir les librairies, étape 2 ne pas confondre deux librairies proches de nom...
 
L'upload ayant réussi je pense que ca va le faire. Merci en tt cas :)


Dans la description de la vidéo il y a la librairie à utiliser : Library https://github.com/MHeironimus/ArduinoJoystickLibrary


---------------
Bien des Shubs et des Zouls furent calcinés dans les profondeurs de l'énorme Sloar, en vérité, je vous le dis !
n°290160
Carbon'R
Fahren macht frei
Posté le 31-01-2020 à 22:07:27  profilanswer
 

:hello:  
 
Pas de relecture de code pour aujourd'hui, mais une question hardware. J'ai acheté ce genre de module écran + boutons :  
https://www.ebay.fr/itm/1602-LCD-Di [...] SwCH9bcjtA
 
Vient la question de l'intégration... j'ai beau avoir cherché tous les mots clés imaginable,s j'ai pas trouvé une seule boîte prédécoupée qui irait pour ça. Pas d'autre moyen que de faire soi-même ? Avec quoi on "recouvre" les boutons pour avoir un truc facile à utiliser ?


---------------
Dunkelheit
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  194  195  196  ..  264  265  266  267  268  269

Aller à :
Ajouter une réponse
 

Sujets relatifs
* Réparations de vos appareils électroniques & electromenager * 
Plus de sujets relatifs à : [arduino] Topic Unique blabla @ Arduino


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR