class Led { // The class
public: // Access specifier
int poort = 1;// atribute
void myMethod() { // Methode binnen de class, dan moet je hier ingeven wat de method moet doen.
Serial.println("Hello World!");//Method
}//Method
void poortTeller() {
poort = poort + 1; //Deze method binnen de class verhoogt het atrbute poort met 1.
}
//Setters
void zetStroom(int x) {
stroom = x;
}
int krijgStroom() {// niet vergeten aan te geven in welke vorm de gegevens gestuurd moeten worden (int ipv void)
return stroom;
}
void puyblichelderheidTeller() {//Hier spelen we een beetje vals met een public method veranderen we de waarde van een private attribute.
helderheid = helderheid + 5;// en printen we de waarde alsnog maar dan wel vanuit de class en niet vanuit het hoofdprogramma.
Serial.println(helderheid);// Eigenlijk is dit een getter en een setter tegelijk.
}
//poort met 1 verhogen werkt omdat poort GEEN private attribute is.
void myMethodBuiten();/*Methode buiten de class, pas later worden er opdrachten gegeven in deze method.
Als je nu geen method programmeerd dan wordt er niet gecompileerd.*/
Led(int a, int b) { // Deze method is speciaal. Ze is voorgeprogrammerd door C++. Op deze manier kunnen we
poort = a;// in het opmaken van onze objecten al direct waarden meegeven.
helderheid = b;//De constructor passert die waarden dan door naar de artibuten van de door ons aangemaakte objecten.
}
private:
int stroom = 50;//het stroomverbruik is dus prive.
int helderheid = 200;/* Deze attribute kan je niet veranderen. (Maar de
constructor verandert de waarde 200 wel naar de waard 22 tijdens het aanmaken van het object.)
In de Serial.print lijnen verderop werkt het nu niet meer om "Serial.println(rooD.helderheid);" te typen.
helderheid is private en kan je niet meer veranderen of zien buiten de class.*/
void helderheidTeller() {// Ook deze method zal de waarde helderheid niet laten zien want de method zelf is private
helderheid = helderheid - 1;
Serial.println(helderheid);
}
};
//Globale variabelen.
int totaleStroom = 999;
//Voorbereidingen.
void setup() {
Serial.begin(9600);
}
//Led rooD; // Create an object of Led Omdat via de constructor is aangegeven dat we ook gegevens willen invullen werkt dit niet meer.
Led rooD (11, 234); // Creeer een object van het type Led en geef bijhorende gegevens mee.
Led groeN(22, 345);/* Idem als bovenstaande regel. Deze gegevens kunnen worden doorgegeven doordat we een
constructor hebben gebruikt hebben die de ingegeven waarden doorgeeft aan de atributen die we in de class reeds aangegeven hadden.*/
void loop() {
rooD.myMethod(); // Call the method die binnen de class was gedefinieerd
rooD.myMethodBuiten();//Roep de methode aan die buiten de class was gedefinieerd.
Serial.println(rooD.poort); //Serial.println(rooD.helderheid);
Serial.println(groeN.poort); //Serial.println(groeN.helderheid);
rooD.poortTeller();
rooD.puyblichelderheidTeller();
//rooD.helderheidTeller(); Deze regel geeft een fout omdat helderheidteller een private method is.
delay(333);
//totaleStroom= groeN.krijgStroom();
totaleStroom +=111;
groeN.zetStroom(totaleStroom);
Serial.println(groeN.krijgStroom());
}
// Method/function definition outside the class
void Led::myMethodBuiten() { //Door "MyClass::" te gebruiken zorg je ervoor de de methode (die eerst nog niet wist wat hij moest doen) nu wel weet wat hij moet doen.
Serial.println("Dag wereld.");
}