blauglaser
User
Hallo,
mal wieder eine Anfängerfrage
Habe eine Sketch der von einem 2S Lipo die Spannung misst, im Serialmonitor wird 7.35 angezeigt am Sender aber nur 0,7 wo habe ich da einen Fehler drin
Hier mal das Prog.
#include <NewSoftSerial.h>
#include <MSBPackage.h>
MSBProcess myMSB(4); // Benutze Pin 4 als MSB-Daten I/O
MSBPackage P1(1,3,0); // Sensor Klasse 1 (Voltage) / Adresse 3 / Startwert 0
MSBPackage P2(1,5,0); // Sensor Klasse 1 (Voltage) / Adresse 5 / Startwert 0
MSBPackage* HandleRequest(byte msbAdr)
{
if (msbAdr==P1.getAddress())
return &P1;
else if (msbAdr==P2.getAddress())
return &P2;
else
return NULL;
}
void LoopTimeMeasure()
{
unsigned long Time;
Time=micros();
loop(); // loop once
Time=micros()-Time;
//Serial.print("Looptime: ");Serial.println(Time);
}
void setup()
{
analogReference(INTERNAL);
Serial.begin(9600); // Für Debugausgaben - nicht vergessen den Serial Monitor auch umzuschalten
myMSB.onRequest(HandleRequest); // Request Handler Funktion (siehe oben) registrieren
/*
Aus Performance Gründen wird die HandleRequest Funktion nur für MSB-Adressen, die auf "aktiv" geschaltet sind,
aufgerufen. Dies erledigt die Methode setAddressActvie
*/
myMSB.setAddressActive(P1.getAddress()); // Addresse von MSB-Package P1 aktivieren
myMSB.setAddressActive(P2.getAddress()); // Addresse von MSB-Package P2 aktivieren
//analogReference(DEFAULT); // Messbereich des A/D Wandlers auf 0..Vcc (5V) setzen
//LoopTimeMeasure(); // Messung zu Testzwecken
/* Die MSBProcess Klasse übernimmt die Steuerung der loop-Funktion des Sketeches. Daher wird der Methode
StartLoop ein Verweis auf die loop()-Funktion des Sketches übergeben.
*/
myMSB.StartLoop(loop);
}
void loop()
{
int val;
unsigned int ra = 9700;
unsigned int rb = 1000;
float v;
val = analogRead(3);
//Serial.println(val);
v = (float)val * (float)(rb + ra) / (float)rb*1.1/1023;
Serial.println(v);
P1.setValue(v);
/*
s=ReadAndScaleAnalog(1);
P2.setValue(s);
*/
}
Im voraus besten Dank
Gruß Ralf
mal wieder eine Anfängerfrage
Habe eine Sketch der von einem 2S Lipo die Spannung misst, im Serialmonitor wird 7.35 angezeigt am Sender aber nur 0,7 wo habe ich da einen Fehler drin
Hier mal das Prog.
#include <NewSoftSerial.h>
#include <MSBPackage.h>
MSBProcess myMSB(4); // Benutze Pin 4 als MSB-Daten I/O
MSBPackage P1(1,3,0); // Sensor Klasse 1 (Voltage) / Adresse 3 / Startwert 0
MSBPackage P2(1,5,0); // Sensor Klasse 1 (Voltage) / Adresse 5 / Startwert 0
MSBPackage* HandleRequest(byte msbAdr)
{
if (msbAdr==P1.getAddress())
return &P1;
else if (msbAdr==P2.getAddress())
return &P2;
else
return NULL;
}
void LoopTimeMeasure()
{
unsigned long Time;
Time=micros();
loop(); // loop once
Time=micros()-Time;
//Serial.print("Looptime: ");Serial.println(Time);
}
void setup()
{
analogReference(INTERNAL);
Serial.begin(9600); // Für Debugausgaben - nicht vergessen den Serial Monitor auch umzuschalten
myMSB.onRequest(HandleRequest); // Request Handler Funktion (siehe oben) registrieren
/*
Aus Performance Gründen wird die HandleRequest Funktion nur für MSB-Adressen, die auf "aktiv" geschaltet sind,
aufgerufen. Dies erledigt die Methode setAddressActvie
*/
myMSB.setAddressActive(P1.getAddress()); // Addresse von MSB-Package P1 aktivieren
myMSB.setAddressActive(P2.getAddress()); // Addresse von MSB-Package P2 aktivieren
//analogReference(DEFAULT); // Messbereich des A/D Wandlers auf 0..Vcc (5V) setzen
//LoopTimeMeasure(); // Messung zu Testzwecken
/* Die MSBProcess Klasse übernimmt die Steuerung der loop-Funktion des Sketeches. Daher wird der Methode
StartLoop ein Verweis auf die loop()-Funktion des Sketches übergeben.
*/
myMSB.StartLoop(loop);
}
void loop()
{
int val;
unsigned int ra = 9700;
unsigned int rb = 1000;
float v;
val = analogRead(3);
//Serial.println(val);
v = (float)val * (float)(rb + ra) / (float)rb*1.1/1023;
Serial.println(v);
P1.setValue(v);
/*
s=ReadAndScaleAnalog(1);
P2.setValue(s);
*/
}
Im voraus besten Dank
Gruß Ralf