ok, jetzt habe ich hier in Bascom:
Zahl = Atn2(y , X)
Jetzt bekomme ich einen Fehler: Integer or Long expected for ABS()
Dabei wurde "Zahl" weiter oben als Integer deklariert?
Y und X wurden als Word deklariert. Was ist jetzt hier falsch?
#define true ('/'/'/')
#define false ('-'-'-')
ok, jetzt habe ich hier in Bascom:
Zahl = Atn2(y , X)
Jetzt bekomme ich einen Fehler: Integer or Long expected for ABS()
Dabei wurde "Zahl" weiter oben als Integer deklariert?
Y und X wurden als Word deklariert. Was ist jetzt hier falsch?
Ach du liebe Zeit . . . ich will jetzt nicht schreiben, wieviel absonderliche Modi eingeschaltet waren, als ich das gerechnet hatte. Das ist der Nachteil von mehrzeiligen Rechnerdisplays . . . Bitte um Entschuldigung
Ciao sagt der JoeamBerg
habe jetzt alles als Single.. Funktioniert
oh war wohl etwas voreilig. Jetzt findet Bascom im Code zwar keine Fehler mehr, das Ergebniss ist jedoch immer noch falsch.
Wie gesagt ich rechne es so aus:
Zahl = Atn2(y , X)
Aber auch wenn ich mit dem Taschenrechner (mein Ti 84 kennt irgendwie kein Atan) rechne kommt da das Ergebniss von vorhin raus. Kann mir jemand erläutern wie der Bascom-Code auszusehen hat, oder wie man in Visual Basic oder auf dem Taschenrechner diese Werte eingeben muss damit ich wenigstens mal ein richtiges Ergebniss rausbekomme
also mit dem Taschnrechner bekomme ichs jetzt auch hin. Nur Bascom macht Probleme Welchen Befehl brauche ich hier?
schön wäre wenn du mal dienen code zeigen würdest und dazu das was er ausrechnet...
hast du den auch mit rad2deg in grad umgerechnet?
wert = atn2(y,x)
wert = rad2deg(wert)
Der miniatur Quadrocopter: www.nanoquad.de
Hier mal mein Code (eigentlich nur der von http://www.mtahlers.de/index.php/ele...ren/mmc2120mg#)
Es wird jetzt auch ein Wert ausgegeben, aber egal wie rum ich den Sensor drehe, es kommt immer eine Zahl um die 45,000000000 heraus.Code:' beispielprogramm zum auslesen des MMC2120MG ' malte ahlers 2011 ' weitere infos auf malteahlers.de ' ' ' ' compiler steuerung $regfile = "m16def.dat" $crystal = 16000000 $framesize = 64 $swstack = 64 $hwstack = 64 $baud = 19200 $lib "i2c_twi.lbx" ' ' - I2C Config Twi = 400000 Config Scl = Portc.0 Config Sda = Portc.1 ' ' konstanten Const Cmp_w = &H60 Const Cmp_r = &H61 ' ' variablen Dim I As Byte Dim Dat(5) As Byte Dim X As Single Dim Y As Single Dim Zahl As Single Dim K As Single Config Portc.4 = Output Portc.4 = 1 Config Portb.0 = Output Beeper Alias Portb.0 Sound Beeper , 400 , 450 ' ' hauptprog I2cinit ' Do ' ' * set/ reset coil * I2cstart ' ' sensor adressieren (schreiben) I2cwbyte Cmp_w ' ' register adressieren I2cwbyte &H00 ' ' register manipulieren -> set coil I2cwbyte &B00000010 ' I2cstop ' Waitms 1 ' I2cstart ' ' sensor adressieren (schreiben) I2cwbyte Cmp_w ' register adressieren I2cwbyte &H00 ' ' register manipulieren -> reset coil I2cwbyte &B00000100 ' I2cstop ' Waitms 5 ' ' * messung * I2cstart ' ' sensor adressieren (schreiben) I2cwbyte Cmp_w ' ' register adressieren I2cwbyte &H00 ' ' register manipulieren -> messung I2cwbyte &H01 ' I2cstop ' Waitms 5 ' I2cstart I2cwbyte Cmp_w ' leseindex setzen I2cwbyte &H00 ' I2cstart ' ' sensor adressieren (lesen) I2cwbyte Cmp_r ' For I = 1 To 4 ' bytes 1-4 holen mit ack I2crbyte Dat(i) , Ack Next ' ' byte 5 holen mit nack I2crbyte Dat(5) , Nack ' I2cstop ' ' oberes nibble im high bytes löschen Dat(2) = Dat(2) And &B0000_1111 Dat(4) = Dat(4) And &B0000_1111 ' ' x-wert aus high- und lowbyte berechnen X = Dat(2) * 256 X = X + Dat(3) ' ' y-wert aus high- und lowbyte berechnen Y = Dat(4) * 256 Y = Y + Dat(5) Zahl = Atn2(y , X) Zahl = Rad2deg(zahl) Print Zahl Waitms 200 Loop End
Kann es sein das der Sensor kaputt ist oder vom Steckbrett gestört wird?
Hallo,
also grundsätzlich ist die Berechnung so wie von Bammel empfohlen richtig, das kann also nicht das Problem sein. Die Eingangswerte in den atn2 müssen Singles sein, ich glaube das hast du ja acuh schon bemerkt. Die Bascom Fehlermeldung wenn man da einen anderen Typ nimmt ist natürlich extrem dämlich und verwirrend... Lass dir doch am besten auch mal die Eingangswerte mit ausgeben (also X und Y). Wenn du konstant 45° bekommst, müssten X und Y gleich groß sein. Dann bekommt man schonmal eine Idee wo es eventuell hakt.
Gruß
Malte
Wenn mich nicht alles täuscht ist das kein Kompass- sondern ein Beschleunigungssensor für 2 Achsen.
Damit wirst Du niemals einen Winkel (wie bei einem Magnetkompass) von 0-360° bekommen.
Der Winkel den Du damit berechnest bezieht sich auf den Erdmittelpunkt (in unbeschleunigtem Zustand / Ruhelage) !
mfG
Willi
Lesezeichen