Wii-Copter - Quellcode - Akkuspannungsabfrage

thunder1902

Erfahrener Benutzer
#1
Hi Leute,

habe da eine Frage:
Mit dem Multi-Wii-Quellcode ist es ja auch möglich, die Akkuspannung des Lipo's zu überwachen. Da ich keinen 30 KOhm und 52KOhm Widerstand benutzt habe, sondern einen 30 KOhm und 53KOhm, weicht die Spannung, die auf dem Arduino-Board ankommt geringfügig ab. Deswegen wollte ich den Quellcode anpassen.
Dort gibt es folgende Zeilen zum berechnen der Spannung:

    vbatRaw = (vbatRaw*15 + analogRead(V_BATPIN)*16)>>4; // smoothing of vbat readings  
    vbat = vbatRaw / VBATSCALE;                          // result is Vbatt in 0.1V steps
Meine Frage: Was zum Henker macht die 1. Zeile? Klar, die ist zur Glättung der Messwerte verantwortlich - aber wenn ich die Rechnung mit dem Taschenrechner durchrechne, steigt der Wert vbatRaw bei jedem Durchgang um fast das doppelte.

Mir ist auch klar, dass >> eine Bitverschiebung ist, d.h.

00110000 wird zu 0011 usw...

Wer kann mir da helfen??
 

thunder1902

Erfahrener Benutzer
#3
@der Frickler: Danke für die Erklärung. Ich weiß zwar nicht wie Arduino das berechnet - aber ok...


Ich wollte mal vbat über die serielle Schnittstelle ausgeben, um die Werte für VBATLEVEL1_3S anpassen zu können.

vbat wird ja so deklariert:
static uint8_t vbat;

vbat wird ja eigentlich schon über die serielle Schnittstelle ausgegeben - (Zeile 2242 im Quellcode). Aber die GUI scheint vbat nicht anzuzeigen...

Ich habe mir schon mal selbst eine "Ausgabe" gebastelt - aber da werden nur rzeichen über die serielle Schnittstelle gesendet:

ab Zeile 2261:
    case 'Y': //VBAT Ausgabe
      Serial.println(vbat);
      break;

Kann mir da jemand einen Tip geben, wie man uint8_t Variablen über die serielle Schnittstelle schicken kann? - oder wie habt ihr die Spannungsüberwachung angepasst??
 
#4
Da eine uint8_t variable im Prinzip gleichbedeutend mit eine char variable ist, kann is sein, das Serial.print() den Wert dieser Variable als ASCII code für ein zeichen interpretiert und so statt 75 z.B. "K" oder statt 32 z.B. " " ausgibt. Bin mir da aber nicht ganz sicher...
Wenn es daran liegt, dann versuch es mal mit
Serial.println(vbat, DEC);
Serial.println(vbat, BIN);
das gibt dann den Wert der Varaiable im 10er bzw. Binärsytem aus (achtung, auch beim binärsystem werden "überflüssige" nullen weggelassen, sei also nicht überracht wenn du statt "00001011" "1011" erhälst)
 
FPV1

Banggood

Oben Unten