Beim schreiben einer eigenen abgeleiteten Klasse der Servo Klasse verhält er sich nicht richtig

Gast #4195968
Lesenswert?
• ▲
▼
Hallo,

ich habe versucht einen Servomotor mittels eines Temperatursensors zu 
steuern. Ich dachte mir damit mein Code übersichtlicher wird schreibe 
ich zur Bewegung des Motors eine eigene Klasse die von der Servo Klasse 
abgeleitet wird. Allerdings macht der Servo nicht das was er soll. 
Jedoch wenn ich genau den selben Code im Hauptprogramm schreibe verhält 
er sich normal und tut was er soll. Woran könnte das liegen?

Haupt-Quelldatei:
1
#ifndef _SERVO_H_
2
#define _SERVO_H_
3
#include <Servo.h>
4
#endif
5

6
#include <Temperatur.h>
7
#include <Bewegung.h>
8

9
Bewegung servo(9);
10
Temperatur temp(0);
11
float voltage, degreesC;
12

13
void setup() {
14
  // put your setup code here, to run once:
15
  Serial.begin(9600);
16
}
17

18
void loop() {
19
  // put your main code here, to run repeatedly:
20
  
21
  voltage = temp.GetVoltage();
22
  
23
  degreesC = temp.GetDegree();
24
  
25

26
  Serial.print("Temperatur: ");
27
  Serial.println(degreesC);
28
  Serial.print("Voltage: ");
29
  Serial.println(voltage);
30
  delay(500);
31
  
32
  servo.Abfrage(degreesC);
33

34
  
35
}
36

37
/*
38
void MoveRight(){
39
    for(int i = aktuellePos; i > geschlossen; i -= 2){
40
       servo1.write(i);
41
       delay(20); 
42
    }
43
    servo1.write(offen);
44
    aktuellePos = offen;
45
}
46

47
void MoveLeft(){
48
    for(int i = 0; i < offen; i += 2){
49
       servo1.write(i);
50
       delay(20); 
51
      }
52
  servo1.write(geschlossen);
53
  aktuellePos = geschlossen;
54
}
55

56
*/
57
/*
58
float Degree(float voltage){
59
  return ((voltage - 0.5) * 100);
60
}
61

62
float getVoltage(int Pin){
63
  return (analogRead(Pin)* 0.004882814);
64
}*/



Danke schon mal im voraus
Angehängte Dateien:
Gast #4196025
Lesenswert?
• ▲
▼
Frank L. schrieb:
> Hallo,
>
> Bewegung ist eine Ableitung von Servo! Warum deklarierst Du dann noch
> eine Variable Servo1 innerhalb der Klasse Bewegung?
>
> Lese Dich mal in die Vererbung ein. Dann wirst Du wahrscheinlich sehr
> schnell das Problem an Deinem Code erkennen.
>
> Gruß
> Frank

Danke,

Ja hast recht. Ich kann ja die Memberfunktionen von der Servoklasse 
direkt benutzen wenn ich diese vererbe. Allerdings habe ich das jetzt 
getan und nun bewegt sich gar nichts mehr ^^.
1
#include "Bewegung.h"
2

3

4
Bewegung::Bewegung(int Pin): m_geschlossen(90), m_offen(0), m_aktuellePos(0), m_niedrigstTemp(20), m_hoechstTemp(38){
5
    attach(Pin);
6
    write(m_geschlossen);
7
    delay(100);
8
}
9

10
Bewegung::~Bewegung(){}
11

12
void Bewegung::Abfrage(float degree){
13
    if((degree < m_niedrigstTemp) && (m_aktuellePos == m_offen)){
14
        Zu();
15
        delay(100);
16
    } else if((degree > m_hoechstTemp) && (m_aktuellePos == m_geschlossen)){
17
        Auf();
18
        delay(100);
19
    }
20
}
21

22

23
void Bewegung::Auf(){
24
    for(int i = m_aktuellePos; i > m_geschlossen; i -= 2){
25
        write(i);
26
        delay(20);
27
    }
28
    write(m_offen);
29
    m_aktuellePos = m_offen;
30
}
31

32
void Bewegung::Zu(){
33
    for(int i = 0; i < m_offen; i += 2){
34
        write(i);
35
        delay(20);
36
    }
37
    write(m_geschlossen);
38
    m_aktuellePos = m_geschlossen;
39
}
40

41
int Bewegung::GetAktuellePos(){
42
   return m_aktuellePos; 
43
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.