Forum: Mikrocontroller und Digitale Elektronik Arduino - Warten in einem Objekt


von Malte O. (mossi)


Lesenswert?

Guten Tag,

derzeit bastle ich an einer Möglichkeit mehrere I2C Displays 
anzusprechen.
Was ich mir bisher mal gebastelt habe, ist angehängt.
Ursprünglich war es ein Programm, da ich damit getestet habe.
Nach fortschreitender Entwicklung habe ich mich entschieden eine Klasse 
daraus zu machen.
Mein Problem ist nun leider, dass ich nicht weiss, wie ich in diese 
Klasse die nötigen Funktionen zum Warten bekomme.
z.B. delay, besser wäre millis(), um mir in der Klasse eine eigene 
Kleine Warteprozedur zu bauen.

Habe bei mir mal nachgeforscht, die Funktionen werden in der Arduino.h 
gelistet, aber sobald ich die Einbinde will er auch eine Setup und 
Loop-routine haben :-/

Gibts da irgendeinen Trick oder eine Lib die sich darauf spezielisiert 
hat?
Mag idealerweise auch nicht noch massig Zeilen einbauen um auf 
Taktfrequenz etc. zu Testen und das Delay dann darauf aufbauend 
nachzubauen.

MfG,
mossi

von Ulrich F. (Gast)


Lesenswert?

Vor der Klassendeklaration #include <arduino.h> einbinden.

> Was ich mir bisher mal gebastelt habe, ist angehängt.
No.

von Malte O. (mossi)


Angehängte Dateien:

Lesenswert?

Mist, hatte den Thread erst an falscher Stelle gemacht und dann neu 
hier, dabei vergessen.
Das mit Arduino.h hatte ich bereits versucht, allerdings scheint diese 
dann die Deklaration von setup() und loop() zu erwarten.
Oder gibts da einen Trick?

von Malte O. (mossi)


Angehängte Dateien:

Lesenswert?

Habe mal die Arduino.h wieder eingebunden und leere funktionen für
setup() und loop()
gemacht.

Lässt sich zwar kompilieren, aber hat das nicht evtl irgendwelche 
negativen effekte?
Immerhin wird man eine main.cpp haben, welche die i2cdisplay.cpp 
einbindet.
Da die Arduino.h über irgendwelche Programmteile dann scheinbar die 
setup() und loop() aufruft, werden dann die setup und loop in 
i2cdisplay.cpp auch laufen?
Weil das wäre ja nicht sehr wünschenswert.

MfG mossi

von Ulrich F. (Gast)


Lesenswert?

Vorschlag:

3 Dateien!!! (im selben Verzeichnis)
Eine ino, mit dem Hauptprogram inc. setup() und loop()
Eine i2cdisplay.h und eine i2cdisplay.cpp
Das wäre eine saubere Nummer.
Und dann klappt das auch.

> Immerhin wird man eine main.cpp haben,
Von mir aus main.ino, aber nicht main.cpp

von avion23 (Gast)


Lesenswert?

Wo ist dein header *.hpp, welchen du includest?

Du brauchst auch noch eine main um deine klasse zu testen. Im arduino 
jargon heißt das setup und loop.

von Malte O. (mossi)


Angehängte Dateien:

Lesenswert?

Bisher hatte ich keine .hpp

Habe mal eine gebaut, da ich bisher noch nicht soo viel Ahnung von 
Headerfiles habe, bin ich nicht ganz sicher ob das so richtig ist.
Hab dementsprechend auch die .cpp angepasst.

Leider meldet mir mein lcd.ino beim Kompilieren es findet die .hpp nicht 
-.-

von Karl H. (kbuchegg)


Lesenswert?

Malte O. schrieb:

> Leider meldet mir mein lcd.ino beim Kompilieren es findet die .hpp nicht
> -.-

Dann solltest du dich mal darüber schlau machen, wie man in der Arduino 
Umgebung sog. Libraries einbindet. Die müssen auf bestimmte 
Verzeichnisse.
Dann werden sie auch gefunden.
Jedesmal, wenn du dir aus dem Web für deinen Arduino eine fertige 'Lib' 
holst, holst du dir in Wirklichkeit ein cpp und ein hpp File. Das wird 
in der Umgebung installiert, indem es einfach an eine bestimmte Stelle 
im Dateibaum kopiert wird. Ob man das dann auch noch irgendwo 
registrieren muss, weiss ich nicht, aber ich programmier ja auch nicht 
Arduino.

Such dir halt mal einfach im Web irgendeine Arduino Komponente und sieh 
dir an, wie die zu 'installieren' ist. Und genau dasselbe machst du auch 
mit deinem Zeugs.

von Malte O. (mossi)


Angehängte Dateien:

Lesenswert?

Habe mir das nochmal angeguckt und überarbeitet.

Langsam komme ich glaube ich dahinter, wie die Headerfiles auszusehen 
haben.

Vielen Dank auf jeden Fall, dass ihr euch das anguckt.

lcd.ino: In function 'void setup()':
lcd.ino:11:7: error: invalid user-defined conversion from 'MOLCD*' to 
'const MOLCD&' [-fpermissive]
In file included from lcd.ino:2:0:
i2cdisplay.h:33:5: note: candidate is: MOLCD::MOLCD(int, int, int) <near 
match>
     MOLCD(int id,int lines=2,int chars=16);

MfG
mossi

von Karl H. (kbuchegg)


Lesenswert?

Im übrigen:
Wenn ich mir deinen Code so ansehe: ein C++ Buch könnte auch nicht 
schaden. Das hagelt Syntax Errors von oben bis unten.

von Malte O. (mossi)


Lesenswert?

Fange erst mit cpp an. Habe bisher nur Headerlose c-Files geschrieben 
und ansonsten mit VB.net und Java programmiert^^

von Karl H. (kbuchegg)


Lesenswert?

1
MOLCD lcd1;
2
3
void setup(){    
4
  Serial.begin (115200);
5
  delay(15);
6
  lcd1=new MOLCD(0x3f);
7
}
8
...

wieso 'new'. lcd1 IST bereits ein Objekt. Das muss nicht mehr angelegt 
werden.
1
MOLCD lcd1( 0x3f );

sagte ich schon, dass du Literatur brauchst? Das gilt bei C++ noch viel 
mehr als es bei C gilt.

von Malte O. (mossi)


Lesenswert?

Kannst du gute C++-Literatur empfehlen?

von Karl H. (kbuchegg)


Lesenswert?

Malte O. schrieb:
> Kannst du gute C++-Literatur empfehlen?

Für C++ gibt es massenhaft Literatur.
Normalerweise würde ich sagen: geh am Samstag in eine Buchhandlung, 
blättere die vorhandenen Bücher durch, versuch vielleicht man eines der 
Kapitel vom Anfang zu lesen und finde raus, mit wessen Stil du am besten 
zurecht kommst.
Die Amazon Rezension lesen, ist auch hilfreich.

Ich persönlich hab mit dem Stroustrup angefangen. Aber das war vor 20 
Jahren. Seit dem hat sich am Buchsektor einiges verändert.

: Bearbeitet durch User
von Malte O. (mossi)


Lesenswert?

Dann werde ich mal ein wenig rumsuchen, vielen Dank für die Hilfe und 
die Tipps :)

LG,
mossi

von Paul B. (paul_baumann)


Lesenswert?

Karl Heinz schrieb:
> Ich persönlich hab mit dem Stroustrup angefangen. Aber das war vor 20
> Jahren.

Bist Du da immer noch nicht durch?

;-)

schnell fort
MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.