Arduino class
3 berichten
• Pagina 1 van 1
- Gij Kieken
- Berichten: 636
- Geregistreerd: 15 Nov 2015, 11:54
Arduino class
Ben wat informatie aan het opzoeken inzake werken met class.
Niet direct in het schrijven van een library maar wel om een class te gebruiken in een sketch.
Nu vind ik hier https://roboticsbackend.com/arduino-obj ... mming-oop/
voor mij een stukje onduidelijkheid.
Het betreft de regel this->pin = pin;
Wat betekent dit juist?,is het een pointer via dereference naar de private byte pin?
Kort samengevat hoe werkt dit juist?
In een andere post had ik gelezen dat een private variabele bij conventie als (underscore) _varName geschreven werd.
Niet direct in het schrijven van een library maar wel om een class te gebruiken in een sketch.
Nu vind ik hier https://roboticsbackend.com/arduino-obj ... mming-oop/
voor mij een stukje onduidelijkheid.
Het betreft de regel this->pin = pin;
Wat betekent dit juist?,is het een pointer via dereference naar de private byte pin?
Kort samengevat hoe werkt dit juist?
In een andere post had ik gelezen dat een private variabele bij conventie als (underscore) _varName geschreven werd.
- Code: Alles selecteren
#define LED_1_PIN 9
#define LED_2_PIN 10
#define LED_3_PIN 11
#define LED_4_PIN 12
#define BUTTON_PIN 5
class Led {
private:
byte pin;
public:
Led(byte pin) {
// Use 'this->' to make the difference between the
// 'pin' attribute of the class and the
// local variable 'pin' created from the parameter.
this->pin = pin;
init();
}
void init() {
pinMode(pin, OUTPUT);
// Always try to avoid duplicate code.
// Instead of writing digitalWrite(pin, LOW) here,
// call the function off() which already does that
off();
}
void on() {
digitalWrite(pin, HIGH);
}
void off() {
digitalWrite(pin, LOW);
}
}; // don't forget the semicolon at the end of the class
class Button {
private:
byte pin;
byte state;
byte lastReading;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
public:
Button(byte pin) {
this->pin = pin;
lastReading = LOW;
init();
}
void init() {
pinMode(pin, INPUT);
update();
}
void update() {
// You can handle the debounce of the button directly
// in the class, so you don't have to think about it
// elsewhere in your code
byte newReading = digitalRead(pin);
if (newReading != lastReading) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
// Update the 'state' attribute only if debounce is checked
state = newReading;
}
lastReading = newReading;
}
byte getState() {
update();
return state;
}
bool isPressed() {
return (getState() == HIGH);
}
}; // don't forget the semicolon at the end of the class
// Create your objects in the global scope so you can
// get access to them in the setup() and loop() functions
Led led1(LED_1_PIN);
Led led2(LED_2_PIN);
Led led3(LED_3_PIN);
Led led4(LED_4_PIN);
Button button1(BUTTON_PIN);
void setup() { }
void loop() {
if (button1.isPressed()) {
led1.on();
led2.off();
led3.on();
led4.off();
}
else {
led1.off();
led2.on();
led3.off();
led4.on();
}
}
Advertisement
Re: Arduino class
Volgens mij werd "this" vroeger vaker gebruikt.
De "this" is een pointer naar je eigen object.
Via "this" kun je dus bij de functies en variabelen van je eigen class, maar dat kun je toch al.
Een voorbeeld met "this": https://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm
In jouw voorbeeld heet de parameter 'pin' en de private variabele heet ook 'pin'. Dat is niet zo handig.
Tegenwoordig krijgen de private variabelen van een class vaak een underscore, en dan kun je gewoon _pin = pin; doen. Dat is veel handiger en duidelijker.
Als je een class maakt die knippert met millis() en die een 'update' functie heeft, dan kun je voor elk ledje een object maken. Dan in de loop() alle 'update' functies aanroepen. Dan kun je de leds onafhankelijk van elkaar laten knipperen
De "this" is een pointer naar je eigen object.
Via "this" kun je dus bij de functies en variabelen van je eigen class, maar dat kun je toch al.
Een voorbeeld met "this": https://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm
In jouw voorbeeld heet de parameter 'pin' en de private variabele heet ook 'pin'. Dat is niet zo handig.
Tegenwoordig krijgen de private variabelen van een class vaak een underscore, en dan kun je gewoon _pin = pin; doen. Dat is veel handiger en duidelijker.
Als je een class maakt die knippert met millis() en die een 'update' functie heeft, dan kun je voor elk ledje een object maken. Dan in de loop() alle 'update' functies aanroepen. Dan kun je de leds onafhankelijk van elkaar laten knipperen
- Gij Kieken
- Berichten: 636
- Geregistreerd: 15 Nov 2015, 11:54
Re: Arduino class
Bedankt Koepel.
De verwarring zat hem nu ook juist in <de parameter 'pin' en de private variabele heet ook 'pin'>
Het lijkt me ook zeer onhandig zeker voor een leek.
Ken je toevallig nog links naar goede tutorials over het gebruik van een class?
Mij bekend is Ralph S Bacon, Paul Mc Worther,Kevin Darrah en dan nog een paar weinig verklarende sites.
Ik zoek iets met verschillende voorbeeldjes en goed gedetaileerd.
Mijn uiteindelijke doelstelling is om een Arduino mega2560 (omwille van het grote aantal i/O) via een esp 8266 Wifi Webserver te kunnen bedienen(ESP8266-01).
Ik zou dit doen via I²C met level shifters.
Zonder gebruik te maken van de voor-oorlogse AT-commando's.
Op het net vindt je veel voorbeelden daarvan maar allemaal met AT-commando's.
De verwarring zat hem nu ook juist in <de parameter 'pin' en de private variabele heet ook 'pin'>
Het lijkt me ook zeer onhandig zeker voor een leek.
Ken je toevallig nog links naar goede tutorials over het gebruik van een class?
Mij bekend is Ralph S Bacon, Paul Mc Worther,Kevin Darrah en dan nog een paar weinig verklarende sites.
Ik zoek iets met verschillende voorbeeldjes en goed gedetaileerd.
Mijn uiteindelijke doelstelling is om een Arduino mega2560 (omwille van het grote aantal i/O) via een esp 8266 Wifi Webserver te kunnen bedienen(ESP8266-01).
Ik zou dit doen via I²C met level shifters.
Zonder gebruik te maken van de voor-oorlogse AT-commando's.
Op het net vindt je veel voorbeelden daarvan maar allemaal met AT-commando's.
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: irozuik en 26 gasten