namespace in Arduino

25 views
Skip to first unread message

Dré Jansen

unread,
Jul 2, 2025, 2:56:14 AM7/2/25
to Roboticanen gespreksgroep
hoi Clubgenoten,

kan iemand mij het begrip 'namespace' uitleggen?
wat ik er van heb begrepen is het een mogelijkheid om dubbele namen van globale variabelen  te kunnen gebruiken
ik heb de indruk dat het lijkt op wat elders 'klasse' wordt genoemd, maar dat is mij ook niet helemaal duidelijk.

het gaat om een I2C device dat analoge en digitale waarden 'uitspuugt'

hieronder de sketch
-=-=-=-=-
#include <five_line_tracker_v3.h>
#define INFINITE_LOOP_ON_FAILURE InfiniteLoopOnFailure(__FUNCTION__, __LINE__)
namespace {
emakefun::FiveLineTracker g_five_line_tracker;
void InfiniteLoopOnFailure(const char* function, const uint32_t line_number) {
  Serial.println(String(F("entering an infinite loop due to failure in ")) + function + ", at line number: " + line_number);
  while (true) {
    yield();
  }
}
}  // namespace
void setup() {
  Serial.begin(9600);
  Wire.begin();
}
void loop() {
  uint16_t analog_values[emakefun::FiveLineTracker::kLineNumber] = { 0 };
  g_five_line_tracker.AnalogValues(analog_values);
  const uint8_t digital_values = g_five_line_tracker.DigitalValues();
  String log(F("analog values: "));
  for (uint8_t i = 0; i < emakefun::FiveLineTracker::kLineNumber; i++) {
    log += i;
    log += F(":");
    log += analog_values[i];  // 获取一路传感器的值加到日志log变量中
    log += F(", ");
  }
  log += F("digital values: 0x");
  log += String(digital_values, HEX);
  Serial.println(log);
}
-=-=-=-
ik ben alleen geïnteresseerd in het digitale getal dat op het einde wordt gegeven. dat kan en mag per mail, maar op 12 juli kan het ook, beter zelfs, dan kan ik meteen vragen stellen als dat nodig mocht zijn de bijlagen zijn de bibliotheek, beiden in de librarymap: five_line_tracker_v3 op voorhand bedankt!
-- 
Groeten, Dré Jansen
five_line_tracker_v3.h
five_line_tracker_v3.cpp

Rob vd Ouderaa

unread,
Jul 2, 2025, 4:14:30 AM7/2/25
to hcc_r...@googlegroups.com

Dag Dre,

Met het gebruik van het namespace keyword, zonder naam, zorg je ervoor dat de variabelen in de namespace alleen binnen die file zichtbaar zijn. Vergelijkbaar alsof je overal static had gebruikt in die file. Dit is het verhaal voor de naamloze namespace.

Je hebt ook nog een namespace met een naam, bijvoorbeeld:

namespace MijnRuimte {
    int getal = 10;

    void printIets() {
        // code
    }
}

Hiermee geef je aan dat bijvoorbeeld getal binnen de MijnRuimte namespace is te gebruiken en nooit daarbuiten.
Een voorbeeld van het gebruik:

int x = MijnRuimte::getal;
MijnRuimte::printIets();

Een soort kamertje voor je variabelen en functies. Eerst moet je naar dit kamertje gaan (de namespace) en dan kun de dingen in dat kamertje gebruiken.

Vriendelijke groeten,
  Rob

--
Je hebt dit bericht ontvangen omdat je bent geabonneerd op de groep 'RobotMC & HCC!Robotica' van Google Groepen.
Als je je wilt afmelden bij deze groep en geen e-mails van de groep meer wilt ontvangen, stuur je een e-mail naar hcc_robotmc...@googlegroups.com.
Ga naar https://groups.google.com/d/msgid/hcc_robotmc/709124c2-04db-453d-96e5-fe88155520c5%40hccnet.nl om deze discussie te bekijken.
Vriendelijke groeten,
  Rob

Virus-free.www.avg.com

Dré Jansen

unread,
Jul 2, 2025, 5:35:03 AM7/2/25
to 'Rob vd Ouderaa' via RobotMC & HCC!Robotica
hoi Rob,

dank je wel!
ik ga er mee spelen om ervaring op te doen
tot volgende week zaterdag

groeten, Dré


Op 2-7-2025 om 10:14 schreef 'Rob vd Ouderaa' via RobotMC & HCC!Robotica:
Reply all
Reply to author
Forward
0 new messages