Vraagje Arduino (IDE) programmeer code

Pagina: 1
Acties:

Vraag


  • Hansie9999
  • Registratie: Maart 2017
  • Laatst online: 20:48
Hallo iedereen,

Ik heb 0 programmeerskills (ook probleem met talen :( ) maar maak al een tijdje leuke projecten met arduino's en ESP32's

Al het programmeren doe ik vooral aan de hand van google searches en copy/paste fankenstein code tot het werkt :) (en leer zo wel altijd bij, maar onthoud er niet veel van :( )

Ik zit hier met een klein probleempje en hoop dat iemand met programmeerskills kan zeggen hoe het moet/kan

In dit geval heb ik een werkende versie van mijn code, (is voor temperatuurmetingen met DS18B20 sensor's) maar ik ben nu aan het proberen om de code makkelijker aanpasbaar te maken voor als ik nieuwe meters maak zodat ik zo weinig mogelijk informatie moet zitten intypen elke keer ik een nieuwe maak (die andere namen moet hebben)

De manier dat het nu werkt ;

Gedeelte in de setup
code:
1
2
3
4
5
6
7
//aanpassen per arduino
//MQTT client naam (moet voor elke arduino anders zijn of problemen)
const char* ESPARDUINO = "ESP32-Grijs";
//Topic hoofdkleur van de arduino
const char* ESPKLEUR = "Grijs";
//Topic Sensor kleuren
const char* PROBEKLEUR01 = "Grijs-bruin";
Gedeelte in de loop
code:
1
client.publish(((String(ESPKLEUR)) + ("/") + (PROBEKLEUR01)).c_str(), String(temp1).c_str(), true);
Dit werkt dus perfect, maar ik zou graag de (in dit geval) naam "Grijs" ook automatisch doen invullen bij al mijn sensors
Ik heb het al op veel manieren geprobeerd in de setup,
zoals bijvoorbeeld zo ;
code:
1
2
3
4
//Topic hoofdkleur van de arduino
const char* ESPKLEUR = "Grijs";
//Topic Sensor kleuren
const char* PROBEKLEUR01 = (ESPKLEUR)"-bruin";
Maar het lukt maar niet, krijg steeds foutmeldingen,

Weet iemand een manier om een const char te zetten IN een andere const char ? heb al met strings geprobeerd en zo, maar niets lijkt te lukken :(

Alle hulp en/of tips worden zeer op prijs gesteld.

Dank U,

Alle reacties


  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 21:31
Concatenation van constantes kan niet zomaar in C(++).
Const char * is een onwijzigbaar stukje data die jouw code benaderd via de pointer dat het is. (Char *)

Concatenation kan wel met de preprocessor (voor het compileren)
https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html

Wil je het runtime veranderen, dan zul je ergens een char [] (array) moeten maken met genoeg plek om het in te passen, en daar met de string functies iets naartoe kopieëren. Het veiligst zijn de functies met een n erin, dus strncpy of snprintf. Die voorkomen schrijven buiten je gereserveerde array.

Als je c++ hebt kun je mogelijk ook de string objecten gebruiken. Maar het is afhankelijk van waarop je dat draait of dat een goed idee voor redenen buiten jouw kennisniveau momenteel ben ik bang. Iets met heap fragmentation Je kunt het proberen, maar als je heel vaak zo teksten wil behandelen zou ik het afraden.

  • FredvZ
  • Registratie: Februari 2002
  • Laatst online: 21:08
Hansie9999 schreef op vrijdag 27 maart 2026 @ 15:28:
Gedeelte in de loop
code:
1
client.publish(((String(ESPKLEUR)) + ("/") + (PROBEKLEUR01)).c_str(), String(temp1).c_str(), true);
Dit werkt dus perfect, maar ik zou graag de (in dit geval) naam "Grijs" ook automatisch doen invullen bij al mijn sensors
Waarom? Het mooie van MQTT is dat als je je topics goed kiest je altijd kan zien waar de sensor thuis hoort.

Als je toch wil gebruiken als naamgeving kan je ook dit proberen:
code:
1
client.publish(((String(ESPKLEUR)) + ("/") + (String(ESPKLEUR)) + ("-") +(PROBEKLEUR01)).c_str(), String(temp1).c_str(), true);

Spel en typfouten voorbehouden


  • Hansie9999
  • Registratie: Maart 2017
  • Laatst online: 20:48
FredvZ schreef op vrijdag 27 maart 2026 @ 18:58:
[...]

Waarom? Het mooie van MQTT is dat als je je topics goed kiest je altijd kan zien waar de sensor thuis hoort.

Als je toch wil gebruiken als naamgeving kan je ook dit proberen:
code:
1
client.publish(((String(ESPKLEUR)) + ("/") + (String(ESPKLEUR)) + ("-") +(PROBEKLEUR01)).c_str(), String(temp1).c_str(), true);
Bedankt voor de info, maar het Publish gedeelte werkt allemaal, het is bij het "setup" gedeelte dat de naamgeving daar via de constante kan, simpelweg om het mij (ben lui :) ) makkelijk te maken als ik meer sensors maak, het is inderdaad zoals je zegt om ze een goede naam te geven dat ik weet waar welke sensor zit, maar nu moet ik dus elke keer ik een nieuwe sensor maak (met dus een andere naam "Blauw", "Grijs", .....) ik dan 10x (voor elke sensor die op die ESP32 zit) manueel in de IDE 10x die naam moet zetten, en had het graag gehad dat deze ook meteen automatisch de ESPKLEUR daar ook neemt die ik dan maar 1x moet wijzigen.

Dit is geen grote ramp, maar ik zou ook gewoon voor mezelf graag willen weten "waarom" het niet lukt, ik vermoed dat @jeroen3 waarschijnlijk wel de reden geeft, maar zoals hij ook al aangeeft gaat die uitleg mijn petje te boven :(