weer zo'n leermoment vraagje... Wat betekent deze regel in mijn code?

Hallo Mensen,

Even weer in het Nederlands. Het valt soms zwaar om alles in het Engels te volgen.
Daarbij... Hier kan ik soms zaken net even wat beter verwoorden.

Ik heb een stukje code gestript totaan puur het weergeven van atmosferische druk, wat ik voor een projectje wil gebruiken.
Maar ik begrijp een zekere regel niet helemaal. In ieder geval niet het nut en/of de betekenis.
Iemand die me daar wat over wijs kan maken? :slight_smile:

#include <Adafruit_BMP085.h> //Bibliotheek voor de druksensor
#include <Wire.h> //Bibliotheek voor de I2C verbinding.

**Adafruit_BMP085 bmp; ** < wat doet deze regel??

void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Geen verbinding met de BMP module");
while (1) {}
}
}

void loop() {
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500)-108);
Serial.println(" meters");

//Serial.println();
delay(500);
}

MvG.
FTMZ

Adafruit_BMP085 bmp;

Creëert een object van de class Adafruit_BMP085, en geeft dat de naam bmp. Vergelijkbaar met bv.

int ledPin;

waarmee je een integer variabele creëert met de naam ledPin.

Adafruit_BMP085.h is eigenlijk een soort bouwtekening voor het bmp-object, dat data kan bevatten én de functies om deze data te handle'n.

Verderop in je code worden functies van dit object aangeroepen, zoals bmp.begin() en bmp.readAltitude().

Hier staat die class: Adafruit-BMP085-Library/Adafruit_BMP085.h at master · adafruit/Adafruit-BMP085-Library · GitHub.
Die begint met het woord "class".
Zoals je ziet is er een "private" deel dat je niet kunt gebruiken en een "public" deel dat je wel kunt gebruiken. De functies zelf worden uitgewerkt in het bijbehorende *.cpp bestand.

Ah, OK...
Het is dus een soort van verwijzing/vertaalslag van "ADAFRUIT_BMP085" naar een meer werkbare term "BMP".
De verwijzing kan naar een poort wijzen, maar ook naar een library, als ik het goed begrijp.

Die verwijzing naar een poort kan ik me wel herinneren in PICBasic, waar je dat deed met "Symbol".
Dat zou hier dan **Symbol **ADAFRUIT_BMP085 = BMP worden. Of iets in die richting.

Het is me duidelijker geworden.
Bedankt!

Nou nee, geen vertaalslag.

Wat Erik_Baas schreef over een integer maken, dat is hoe het is.

Dus "int" is het type, en "ledPin" is de variabele die in de code gebruikt gaat worden.
Dan weet de compiler dat "ledPin" geen string is, geen float, geen byte, maar een "int".

int ledPin;

Op dezelfde manier is "Adafruit_BMP085" het type, en "bmp" is de variabele.
Dan weet de compiler dat "bmp" geen float en geen byte is, maar van het type "Adafruit_BMP085"

Adafruit_BMP085 bmp;

De "Adafruit_BMP085" wordt de class genoemd, en "bmp" wordt het object genoemd, maar het principe is hetzelfde.
Je kunt "Adafruit_BMP085" als type zien en "bmp" kun je als variabele zien.
Het is dan wel een ingewikkelde variabele waar van alles in zit.

OK, dat maakt het nog wat duidelijker...
Maar nu is Int, Byte, of Float een afgebakende waarde.
Adafruit_BMP is dat dan niet. Het is een grotere brok aan data, lijkt me...

Kan ik het dan zo zien dat deze Adafruit_BMP een reeks aan items(?) die elk een waarde hebben?
In geval van deze BPM dus bv pressure, temp, etc?

FTMZ:
Maar nu is Int, Byte, of Float een afgebakende waarde. Adafruit_BMP is dat dan niet.

Toch wel: de auteur van de library heeft exact vastgelegd wat je ermee kunt doen en welke waardes je erin kunt opslaan (zowel de namen als de datatypes).

FTMZ:
Kan ik het dan zo zien dat deze Adafruit_BMP085 een reeks aan items(?) die elk een waarde hebben?
In geval van deze BMP dus bv pressure, temp, etc?

Ja, zo kun je je dat voorstellen. Zoals gezegd, een aantal variabelen, maar ook een aantal functies: bmp.begin() doet iets, nl. de sensor initialiseren en wat interne waardes instellen (neem ik aan).

bmp.readAltitude() leest de sensor uit (daar kunnen meerdere instructies mee gemoeid zijn), én geeft je de uitgelezen waarde terug.

NB.: De vergelijking tussen Adafruit_BMP085 en int/byte/float etc. gaat natuurlijk mank, maar:

  • je kunt het wél beschouwen als een datatype, en
  • de manier van declareren is hetzelfde: int X; of Adafruit_BMP085 bmp;

Bedankt voor de verheldering.
Mooie materie, maar je moet hem wel zien te begrijpen. :slight_smile: