Hi,
ich bin gerade dabei meine nächste Lib zu schreiben komme aber um die Fehlermeldung
sketch_may25a.ino: In function ‘void setup()’:
sketch_may25a.ino:6:8: error: request for member ‘start’ in ‘dist’, which is of non-class type ‘DistSens()’
sketch_may25a.ino: In function ‘void loop()’:
sketch_may25a.ino:10:23: error: request for member ‘readDist’ in ‘dist’, which is of non-class type ‘DistSens()’
nicht herum. Die Library soll eine Distanzsensor auslesen.
Die Header Datei:
#include"Arduino.h"
#ifndef DistSens_h
#define DistSens_h
class DistSens
{
public:
DistSens();
void start(int _apin);
long readDist();
private:
int _apin;
long result;
};
#endif
Die CPP Datei:
#include "Arduino.h"
#include "DistSens.h"
DistSens::DistSens()
{
}
void DistSens::start(int _apin)
{
pinMode(_apin,INPUT);
}
long DistSens::readDist()
{
int val=analogRead(_apin);
long result=(6787.0/((float)val-3.0))-4.0;
return result;
}
Da du mit Instanzen arbeitest, also (theoretisch) mehrere Sensoren haben kannst,
bietet es sich eigentlich an, den Pin ( um den sich mehere Sensoren ja wohl unterscheiden müssen) gleich im Konstruktor mitzugeben, oder ?
class DistSens
{
private:
int _apin;
public:
DistSens(int pin) {_apin = pin;};
long readDist();
};
Dann geht in der .ino
DistSens s1(3);
DistSens s2(4);
Übrigens:
result braucht es (z.Zt.) nicht als member variable ...
um aus einer 10 bit Messung ein long Ergebnis zu erhalten, sollte man - ohne Genauigkeitsverlust - ohne float auskommen.
Gib dir mal ein bisschen Mühe
Danke, habe den Pin in den Konstruktor gesetzt.
Da ich nur einen Sensor habe war es eigentlich egal aber so könnte ich jetzt auch mehrere anschließen.
Trotzdem bleibe ich bei float, weil ich damit Kommazahlen darstellen kann
Vielen Dank für die schnelle Hilfe!
Da gibt es noch ein Problem:
Es wird immer Analogpin 0 abgefragt obwohl ich A5 eingetragen habe(teste auf Uno und Leonardo)
Wo ist das Problem, in der cpp Datei wird die Variable nicht auf Null gesetzt
#include <DistSens.h>
DistSens dist(A1);// sensor attached to analog pin 0
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(dist.readDist());//read the distance and send
delay(1000);
}
Es ist egal welchen Pin ich wähle! Immer wird A0 benutzt.
Bei dem Beispiel readanalogvoltage funktioniert alles.
Bei meinem Sketch, der das gleiche macht wie die Library funst es auch
---> Es muss an der Library hängen. Aber ich finde den Fehler nicht.
Die Lib ist im Anhang
Klar darduch wird eine neue Variable erzeugt! Danke bin heute nicht so bei mir
Und zu pinMode: Die Lib soll später leicht zu verstehen sein, dass digitale und analoge Pins automatisch Input sind weiß ich.