Forum: PC-Programmierung Arduino Anfängerproblem - class


von Julian (Gast)


Lesenswert?

Hallo,

ganz sicher ein absolutes Anfängerproblem - das bin ich einer :-)

Ich baue eine Uhr aus einem Arduino mit RTC-Modul. Nun möchte ich, 
sofern ein bestimmtes Datum ist, den Geburtstag von Personen anzeigen 
lassen.

Ich habe eine Klasse mit den Geb.-Tagen angelegt; die funktioniert 
soweit auch. Sie heißt "Person" und hat drei Einträge;
int day,
int month,
String name.
z.B.: Person Julian(9,6,"Julian");

Nun möchte ich die Geburtstage (aus der Klasse) mit dem aktuellen Datum 
aus dem rtc-Modul vergleichen und so die Geburtstage "erkennen": Ich 
dachte das geht so...

        if(tm.Day == day() && tm.Month == month()){

// Ausgabe Blablabla; wie das geht, weiß ich auch noch nicht. Aktuell 
habe ich aber Probleme mit dem oberen Thema "erkennen/vergleichen"

        }

Ich Check es irgendwie nicht, kann mir bitte jemand helfen? Wäre klasse.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Julian schrieb:
> Aktuell habe ich aber Probleme mit dem oberen Thema
> "erkennen/vergleichen"

Welche? Beschreib', was Du versucht hast, und was sich dabei anders 
verhält als Du erwartest.

von zitter_ned_aso (Gast)


Lesenswert?

Julian schrieb:
> Nun möchte ich die Geburtstage (aus der Klasse)

Wenn du eine Personenklasse hast, dann erzeugst du davon Objekte. Und du 
musst dann wissen wieviele Objekte du erzeugt hast oder? Und dann jedes 
Objet (Geburtstag) mit aktuellem Datum vergleichen.

Ist es nicht besser so etwas wie eine Liste zu benutzen?

von Julian (Gast)


Lesenswert?

es passiert einfach nichts bei der Abfrage von mir. Er geht nicht in die 
Schleife rein.

was ich will ist;
--> wenn das Datum (aus dem RTC-Modul) gleich ist, wie eines aus meiner 
Klasse, dass das erkannt wird.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Julian schrieb:
> es passiert einfach nichts bei der Abfrage von mir. Er geht nicht in die
> Schleife rein.

Zeig' Deinen Code.

von Glaskugelin (Gast)


Lesenswert?

> Ich habe eine Klasse mit den Geb.-Tagen angelegt; die funktioniert
> soweit auch. Sie heißt "Person" und hat drei Einträge;
> int day,
> int month,
> String name.
> z.B.: Person Julian(9,6,"Julian");
>
> Nun möchte ich die Geburtstage (aus der Klasse) mit dem aktuellen Datum
> aus dem rtc-Modul vergleichen und so die Geburtstage "erkennen": Ich
> dachte das geht so...
>
>         if(tm.Day == day() && tm.Month == month()){
>
> // Ausgabe Blablabla; wie das geht, weiß ich auch noch nicht. Aktuell
> habe ich aber Probleme mit dem oberen Thema "erkennen/vergleichen"
>
>         }
>
> Ich Check es irgendwie nicht, kann mir bitte jemand helfen?

Suchst du vielleicht

if((tm.Day == Julian.day) && (tm.Month == Julian.month)){
//Gratulation an Julian schlumpfen
}


> Wäre klasse.
*class    ;-)

von Julian (Gast)


Lesenswert?

// Klasse Person und Geburstag (Tag und Monat)

#include <Arduino.h>

class Person{
  public:
  int day;
  int month;
  String name;
  Person(int d, int m, String n);        // Konstruktor
  String get_Name(){                     // Methode anlegen, die den 
Namen zurückliefert
    return name;
  }
};

+++

// was auch immer das hier macht

#include "Person.h"
#include <Arduino.h>

Person::Person(int d, int m, String n){

month=m;
day=d;
name=n;

}

+++

void loop(){

!!!
(2) hier habe ich das Problem; entweder würde ich gerne mal zurücklesen, 
was aus der Klasse kommt, wenn ich die aktuellen RTC-Daten reingebe... 
das bekomm ich nicht hin ODER
(1) den Geburtstag feststellen durch einen Vergleich des aktuellen Datum 
mit den Daten aus der Klasse; kein Fehler aber passiert nix

        // Datums- oder Geburtstagsanzeige

        if(tm.Day == day() && tm.Month == month()){  (1)

        // get_Name(day=tm.Day, month=tm.Month); (2)

von Julian (Gast)


Lesenswert?

Fast: ich suche nicht die Daten von Julians Geburtstag, sondern möchte 
wissen, dass er Geburtstag hat wenn es soweit ist!!! ;-)

von Rolf M. (rmagnus)


Lesenswert?

Julian schrieb:
> if(tm.Day == day() && tm.Month == month()){  (1)

Was ist tm? Und wo kommen die Funktionen day() und month() her? Im 
Moment passt das alles irgendwie nicht zusammen, denn du greifst 
nirgends auf die Elemente deines Objekts zu.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du zeigst nicht Deinen Code, sondern nur irgendwelche zusammenhangslosen 
Schnipsel.

Im übrigen könntest Du, damit man Deine Codeschnipsel von Deinen 
Textschnipseln unterscheiden kann, die Formatierungstags verwenden, 
die die Forensoftware anbietet. Sieh einfach mal oberhalb der 
Texteingabebox die erste Zeile unter dem Wort "Formatierung" an ...

von PittyJ (Gast)


Lesenswert?

Gibt es da nicht noch Bücher für Anfänger?
Ganze Generationen haben so das Programmieren gelernt.

Zu meiner Zeit ist man zu www.amazon.de gegangen, und hat C++ 
Programmierung eingegeben.
Und 2 Tage später kam ein Buch.
Wie geht das heutzutage?

von Julian (Gast)


Lesenswert?

Hier mein Test-Code; RTC-Timer Timer tut, Klasse tut auch. Ich möchte 
das Datum aus dem RTC an die Klasse übergeben und erfahren, ob jemand an 
dem übergebenen Tag Geburtstag hat... und wer, also den Namen 
zurückbekommen.

---------------------------------------------
1
#include <Wire.h>
2
#include <TimeLib.h>
3
#include <DS1307RTC.h>
4
#include <Arduino.h>
5
#include "Person.h"
6
7
int txden = 8;
8
9
Person Elisa(9,1,"Elisa");
10
Person Smud(14,2,"Smud");
11
Person Papa(15,2,"Papa");
12
Person Erik(20,3,"Erik");
13
Person Marlene(10,5,"IsaMarlene");
14
15
void setup() {
16
  // put your setup code here, to run once:
17
18
    Serial.begin(57600); 
19
    pinMode(txden, OUTPUT);
20
    digitalWrite(txden, HIGH); // master
21
22
}
23
24
void loop() {
25
  // put your main code here, to run repeatedly:
26
27
    int delay_tr = 1000;
28
    tmElements_t tm;
29
30
    // wie bekomme ich es hin, dass ich, vorausgesetzt ich habe ein bestimmtes Datum (kommt aus RTC-Modul über tm.Day und tm.Month), den Namen des Geburtstagskinds angezeigt bekomme?
31
    get_Name(Person.day=tm.Day, Person.month=tm.Month);
32
33
    delay(delay_tr); 
34
}
35
36
---------------------------------------------
37
// Person.cpp
38
39
#include "Person.h"
40
#include <Arduino.h>
41
42
Person::Person(int d, int m, String n){
43
44
month=m;
45
day=d;
46
name=n;
47
48
}
49
50
---------------------------------------------
51
// Person.h
52
53
#include <Arduino.h>
54
55
class Person{
56
  public:
57
  int day;
58
  int month;
59
  String name;
60
  Person(int d, int m, String n);        // Konstruktor
61
  String get_Name(){                     // Methode anlegen, die den Namen zurückliefert
62
    return name;
63
  }
64
};

--

Ist es wirklich so kompliziert, die Formatierungs-Tags hier 
einzufügen?

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

PittyJ schrieb:
> Zu meiner Zeit ist man zu www.amazon.de gegangen, und hat C++
> Programmierung eingegeben.

Jungspund… Zu meiner Zeit ist man in der nächsten größeren Stadt einen 
Buchladen gegangen und hat gehofft, dass was interessantes zu finden 
ist. Oder man kannte von irgendwo die ISBN und hat das Buch im Laden 
bestellt.

von Mario M. (thelonging)


Lesenswert?

Du wirfst Klassen und Instanzen durcheinander. Eine Klasse ist nur ein 
Bauplan, mehr nicht. Man kann nicht Person.day abfragen, sondern nur das 
konkrete Objekt.

Glaskugelin schrieb:
> Suchst du vielleicht
>
> if((tm.Day == Julian.day) && (tm.Month == Julian.month)){
> //Gratulation an Julian schlumpfen
> }

von Julian (Gast)


Lesenswert?

ah, ok. das hilft mir schon mal weiter. d.h., ohne mich damit 
beschäftigt zu habe, ich muss auf Instanzen zurückgreifen?

von JSON (Gast)


Lesenswert?

Mit Klasssen und Instanzen/Objekten verhält es sich ähnlich wie mit 
Plätzenstechformen und Plätzchen.
Würde man auf eine Stechform Zucker streuen á la
StechformHase.Streue(Zucker); ?
Ne, man würde mit der StechformHase eine Instanz "PlätzchenHase" 
ausstechen (anlegen) auf DIE kann man dann Zucker streuen.
PlätchenHase.Streue(Zucker);

Der Teig aus dem man aussticht währe sinngemäß so etwas wie der Heap.

von yxcv (Gast)


Lesenswert?

Julian schrieb:
> ohne mich damit
> beschäftigt zu habe

Vielleicht solltest Du genau das mal machen^^

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.