noiasca
December 13, 2021, 3:59pm
1
Ich hätte gern eine Struktur mit einem button und einem Servo. Genau genommen auch noch einen pin für den Servo.
Servo.h braucht aber keinen Pin bei der Anlage der Objekte, sondern nimmt den Pin später mit der Member function .attach
Nun die Übfrage: wie initialisiere ich das Array meiner Struktur richtig ohne ein Warning für die Servo zu bekommen?
#include <Servo.h>
struct Group{
const byte buttonPin;
const byte servoPin;
Servo servo;
};
Group group[] {
{A0, 9},
{A1, 8}
};
void setup() {
for (auto & i : group)
{
i.servo.attach(i.servoPin);
pinMode(i.buttonPin, INPUT_PULLUP);
}
group[0].servo.write(30);
group[1].servo.write(60);
}
void loop() {
}
C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec13b\sketch_dec13b.ino:13:1: warning: missing initializer for member 'Group::servo' [-Wmissing-field-initializers]
};
^
C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec13b\sketch_dec13b.ino:13:1: warning: missing initializer for member 'Group::servo' [-Wmissing-field-initializers]
Stichwort: Konstruktor
Schreib dir selbst einen der nur zwei Paramater hat
1 Like
noiasca
December 13, 2021, 4:37pm
3
Danke!
#include <Servo.h>
struct Group{
const byte buttonPin;
const byte servoPin;
Servo servo;
Group(const byte buttonPin, const byte servoPin) :
buttonPin(buttonPin), servoPin(servoPin)
{}
};
Group group[] {
{A0, 9},
{A1, 8}
};
void setup() {
for (auto & i : group)
{
i.servo.attach(i.servoPin);
pinMode(i.buttonPin, INPUT_PULLUP);
}
group[0].servo.write(30);
group[1].servo.write(60);
}
void loop() {
}
Weil das ja generell für jedes Group - Element gemacht werden muss, füg doch zusätzlich zum Konstruktor noch eine init - Methode dazu:
struct Group{
const byte buttonPin;
const byte servoPin;
Servo servo;
Group(const byte buttonPin, const byte servoPin) :
buttonPin(buttonPin), servoPin(servoPin) {}
void init() {
servo.attach(servoPin);
pinMode(buttonPin, INPUT_PULLUP);
}
};
void setup() {
for (auto& elem : group) elem.init();
}
sieht dann schon richtig objektorientiert aus.
system
Closed
June 11, 2022, 7:30pm
6
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.