PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I-Bumper aus "Pro-Bot 128 bauen und erfolgreich einsetzen" - Problem mit Lib



Anna
01.03.2014, 17:19
Hallo alle zusammen,

Ich habe ein Problem mit dem Beispielprogramm für den I-Bumper aus dem Buch "Pro-Bot bauen und erfolgreich einsetzen".

Das Projekt wird nicht kompiliert, weil in der Library die Variablen INT_4, INT_6, INT_7 und die Funktion Timer_T3PWM nicht definiert sind.

Die Variablen habe ich dann einfach als
Dim INT_4 As Integer selbst in die Lib geschrieben, weiß aber nicht, ob das dann auch so funktioniert. Aber warum wird die Funktion nicht erkannt? In der Lib taucht Sie unter ACS_INIT() auf:


void ACS_INIT(byte sensity)
{
/*
PWM für das ACS-System einstellen
Timer_T3PWM(Par1,Par2,PS);
Period = Par1*PS/FOSC (51*8/14,7456MHz=27,66 µs) = 36Khz Wert=51
Pulse = Par2*PS/FOSC (25*8/14,7456MHz=13,56 µs) On Time
Timer_T3PWM(Word period,Word PW0,Byte PS) '36Khz
Mit Par1, Par2 kann die Entfernung eingestellt werden
muss teilweise angepasst werden (Roboter spezifisch)
*/
Port_WriteBit(IR_left,PORT_OFF);
Port_WriteBit(IR_right,PORT_OFF);
Timer_T3PWM(51,sensity,PS_8);
}


Fehlermeldungen:


C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(160,17): Semantik Fehler - Variable INT_6 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(161,17): Semantik Fehler - Variable INT_7 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(168,17): Semantik Fehler - Variable INT_4 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(220,24): Semantik Fehler - Variable INT_4 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(309,18): Semantik Fehler - Variable INT_6 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(317,18): Semantik Fehler - Variable INT_7 nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(782,5): Semantik Fehler - Funktion Timer_T3PWM nicht definiert
C:\Users\Sarah\Documents\Robots\ProBot 128\Buch_Beispiele\PRO-BOT128 Lib\PRO-BOT128_Lib_V2.cc(797,5): Semantik Fehler - Funktion Timer_T3PWM nicht definiert

bnitram
01.03.2014, 18:03
Hallo Anna,
Der Code bei ACS_INIT... ist in C geschrieben. Deine Definition aber ij Basic. Das kann nicht funktionieren.

Ist das Beispiel in C oder Basic?

MfG
bnitram

Anna
01.03.2014, 18:26
Sorry, falsche Lib-Datei kopiert - das Beispiel ist in Basic und das entsprechende Unterprogramm in der Lib ist dieses:


Sub ACS_INIT(sensitivity As Byte)
'PWM für das ACS-System einstellen
'Timer_T3PWM(Par1,Par2,PS);
'Period = Par1*PS/FOSC (51*8/14,7456MHz=27,66 µs) = 36Khz Wert=51
'Pulse = Par2*PS/FOSC (25*8/14,7456MHz=13,56 µs) On Time
'Timer_T3PWM(Word period,Word PW0,Byte PS) '36Khz
'Mit Par1, Par2 kann die Entfernung eingestellt werden
'muss teilweise angepasst werden (Roboter spezifisch)
Port_WriteBit(IR_left,PORT_OFF)
Port_WriteBit(IR_right,PORT_OFF)
Timer_T3PWM(51,sensitivity,PS_8)
End Sub

Macht aber keinen Unterschied - Timer_T3PWM wird trotzdem nicht erkannt.

bnitram
01.03.2014, 20:33
Hallo,
ich hab dir mal beide Lib's angehangen.. Vielleicht ist deine nur Fehlerhaft...

https://www.dropbox.com/s/1ral3b62vzytdky/PRO-BOT128_Lib.cbas

https://www.dropbox.com/s/0gpgqbt9wruszcu/PRO-BOT128_Lib_V2.cbas

MfG
bnitram

Anna
01.03.2014, 21:34
Vielen Dank, jetzt geht's!

Allerdings reagiert der Roboter nicht, wenn er irgendwo gegen fährt, da schaue ich jetzt mal, woran das liegen könnte.

bnitram
02.03.2014, 00:05
Alles klar. Freut mich! ;)
Ich habe mir inzwischen mal das Beispiel angeschaut...
Der Bot "erkennt" letztenendes ja nur den Spannungs Zusammenbruch wenn die Motoren blockieren. Zum testen könntest du also das Programm laufen lassen und die Reifen vom Bot festhalten. Dann ist das ja so, wie es im Programm vorgehen ist, nur evtl in extrem...
Ansonsten könntest du auch ein einfaches Programm selber schreiben, wo du feststellen kannst, ob das so funktioniert. Du müsstest dir nur die Werte vom ADC an das PC Terminal schicken. Das heißt das du die Motoren laufen lässt und dann nur noch GET_ADC(0) auslesen musst und dir das am PC ausgibts.
Dann solltest du, wenn das so funktioniert wie es im Buch beschrieben wird, eine Werte Veränderung feststellen können, wenn du die Reifen festhältst...

Ich könnte mir aber auch vorstellen das das Programm nicht mehr funktioniert, wenn du zu gute Akkus bzw. Batterien verwendest. Wenn diese für hohe Entladeströme ausgelegt sind, wird auch die Spannung nur sehr gering zusammen brechen... Das hieße das das Programm in dem Fall nicht mehr funktioniert.. naja. Teste es erstmal so wie ich es dir beschrieben hab.

MfG
bnitram

Anna
02.03.2014, 12:29
Vielen Dank für die guten Tipps! Letztendlich lag es gestern nur an einem falsch deklarierten Thread und die Bumper-Funktion hat dann wunderbar funktioniert. Allerdings gibt es in dem Programm ja auch eine Komponente, in der der Probot mit dem normalen IR-ACS Hindernissen ausweicht, und das funktioniert nicht. Das muss ich also nochmal isolieren. Weißt Du, ob die Wirkung des IR-ACS von den Lichtverhältnissen abhängt, oder nur von der Oberfläche, die das IR-Licht reflektiert? Vielleicht ist nur die Empfindlichkeit falsch eingestellt - steigt mit einem höheren Wert die Empfindlichkeit, oder ist es umgekehrt?

Das mit den kleineren Testprogrammen ist gut, das versuche ich meist, wenn etwas nicht funktioniert. Dabei lernt man eine ganze Menge, aber es ist natürlich auch eine Herausforderung für einen Programmieranfänger.

VG
Anna

bnitram
04.03.2014, 14:27
Hallo Anna,
ah ok.

Bei der Empfindlichkeit habe ich nie große Unterschiede festgestellt... Also kann ich da nichts genaueres sagen. Die Objekterkennung hängt relativ stark vom Licht ab. Es ist ja IR...
Die Oberfläche spielt auch eine Rolle, jedoch funktioniert es in den meisten Fällen.

MfG
bnitram

Anna
16.03.2014, 12:30
Ich bekomme wieder dieselben Fehlermeldungen, diesmal mit einem anderen Programm - es ist zum Verzweifeln. Habe die Lib (ich versuche es mit der Lib in C, die bisher wunderbar funktioniert hat) inzwischen schon mehrmals von der CD neu heruntergeladen, macht keinen Unterschied. Wenn ich aber nun z. B. das Programm LineRacer von der CD kompiliere, funktioniert das wunderbar, wenn ich mein eigenes Programm mit derselben Lib kompilieren möchte, erhalte ich wieder dieselben Fehlermeldungen - liegt also vermutlich am Code. Irgendwelche Ideen, was mit dem Code nicht stimmt?

Mein Code:


int T1, T2;

void main(void)
{
PRO_BOT128_INIT(); //System setup
DRIVE_ON(); //Drive setup

while(1)
{
T1 = READ_LINE_LEFT(); //Linken Liniensensor lesen
T2 = READ_LINE_RIGHT(); //Rechten Liniensensor lesen

if (T1 == T2)
{
GO_TURN(5,-25,180);
}

if (T1 < T2)
{
DRIVE_FORWARD(200);
}

if (T1 > T2)
{
GO_TURN(5,25,180);
}
}
}

bnitram
16.03.2014, 12:48
Hallo Anna,
mit dem C-Code vom ProBot habe ich mich nur kurz beschäftigt, daher kann ich so spontan nicht sagen ob das richtig oder falsch ist.

Hier findest du jedenfalls die "richtigen" Codes, in einer Übersicht. Vielleicht hilft es dir ja?!:
http://www.c-control-pro.de/documentation/index.html

MfG
bnitram