PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Bumpern!!



Ich89
05.02.2005, 16:11
Hallo,
vor kurzem habe ich mir auch eine C-unit gekauft und bin nun seit etwa 2 wochen mit meinem eigenen Roboter beschäftigt...
(und dieses Forum hat einiges dazu beigetragen...)
ich bin leider auch im programmieren der C-unit vollkommener Anfänger. Bis vor 2 Tage hab ich das noch mit dem CC-Plus gemacht.
lange Rede kurzer Sinn..
Warum funktioniert mein Porggramm nicht?? ](*,)l
Vielleicht hab ich ja auch einfach nur absoluten Mist gemacht...



define Sensor1 port[1] 'Sensor vorne/links
define Sensor2 port[2] 'Sensor vorne/mitte
define Sensor3 port[3] 'Sensor vorne/rechts
define Motor1v port[4] 'Motor links/vorwärts
define Motor1r port[5] 'Motor links/rückwärts
define Motor2v port[6] 'Motor rechts/vorwärts
define Motor2r port[7] 'Motor rechts/rückwärts

#loop

Motor1v=On 'Beide Motoren an (vorwärts)
Motor2v=On

if Sensor1 then Motor1v=Off 'Wenn Sensor1 schaltet, dann beide Motoren aus
if Sensor1 then Motor2v=Off
if Sensor1 then Motor1r=On 'Anschließend beide Motoren wieder an (rückwärts)
if Sensor1 then Motor2r=On
Pause=100
Motor1r=Off
Motor2r=Off
Motor1v=On
Pause=20
...

flymax
05.02.2005, 16:43
Was macht das Programm denn? Gar nix oder ?
Wenn es beim Compiler schon einen Fehler gegeben hat ... nach meinem Handbuch darf zwischen PAUSE und der Dauer kein = stehen (also PAUSE 100 und nicht PAUSE=100). Das merkt aber die Entwicklungsumgebung normalerweise, wenn auch mit etwas kryptischen Fehlermeldungen.
Hats Du es mal mit dem Simulator laufen lassen? Da sieht man schnell ob die Ports wenigstens einigermaßen was tun.

Ich89
05.02.2005, 16:58
also beim compilieren meldet er keinen Fehler.
und im simulator fangen beide ausgänge für die motoren 1 und 2 an zu laufen, aba wenn man nun ein signal an den sensorport gibt dann hörne sie einfach nich auf??????
danke für die schnelle antwort..
mfg
Ich

Dirk
06.02.2005, 10:25
Hallo "ich",

genau weiss ich nicht, was Dein Prog so machen soll. Nach dem Ausschnitt soll in einer Schleife ...:
1. Der Roboter die Vorwärtsfahrt stoppen, wenn Sensor 1 anspricht.
2. Dann sofort mit der Rückwärtsfahrt beginnen.
3. Er soll 2 Sekunden lang (PAUSE 100) rückwärts fahren.
4. Dann wird die Rückwärtsfahrt gestoppt.
5. Dann geht's links vorwärts für 0,4 Sekunden.
6. Was dann passiert, ist unbekannt.

Das sollte so auch nach deinem Prog passieren, aber in der realen Sensor-Abfrage solltest du nicht dreimal hintereinander den Sensor abfragen, weil das unterschiedliche Ergebnisse erzielen kann. Deine Programmlogik geht aber davon aus, dass dreimal immer der selbe Wert gelesen wird. Du musst also alles was nach "IF Sensor1 then ..." passieren soll, in einen Block ohne neue IF-Abfrage packen.

Gruß Dirk

Ich89
06.02.2005, 10:30
hi
1. genau so soll das programm laufen, laut simulator tut es das aber nicht .
im simulator geht der port für vorwärts fahren nicht aus und der port für rückwärts fahren nicht an!
2. Wie mach ich dass denn alles in einen Block??? wär schön du könntest es mir mal erklären...ich bin ziemlicher anfänger...
danke
Ich

uwegw
06.02.2005, 11:40
also so würdest du theoretisch alles in eine block packen. jetzt wird der sensor nur einmal abgefragt, und dann alle befehle nacheinander ausgeführt

if Sensor1 then
Motor1v=Off
Motor2v=Off
Motor1r=On
Motor2r=On
endif

(ohne gewähr dass die syntax stimmt weil ich schon ewig kein basic mehr geproggt hab...)

Ich89
06.02.2005, 11:57
Wenn ich es so mache...


#loop

Motor1v=On 'Beide Motoren an (vorwärts)
Motor2v=On

if Sensor1 then
Motor1v=Off 'Wenn Sensor1 schaltet, dann beide Motoren aus
Motor2v=Off
Motor1r=On 'Anschließend beide Motoren wieder an (rückwärts)
Motor2r=On
Pause=500
endif


Dann bringt er beim compilieren einen fehler.
und zwar: "Zeile 21: undefiniertes Label ENDIF"
Zeile 21 ist die zeile "endif" (logischer weise)

ich hoffe mir kann jemand helfen...](*,)
danke
Ich

uwegw
06.02.2005, 12:12
also nicht korrekt mein code...
entweder du findest selbst raus wie du mehrere befehle in eine if-abfrage packen kannst (handbuch?) oder du machst es quick+dirty: du setzt in der sensor-if-abfrage eine variable auf 1 oder true, und fragst dann immer dies varaiable ab...

evtl geht es aber auch mit begin... end um die vier motorbefehle herum...

if Sensor1 then
begin
Motor1v=Off
Motor2v=Off
Motor1r=On
Motor2r=On
end

Ich89
06.02.2005, 12:42
danke erstmal!
also mit begin tritt ähnlicher fehler auf udn handbuchmäßig is auch nich viel drin. Ist meiner meinung nahc auch nicht so besonders dokumentiert das ganze.
ich werde mich dann ma wieta auf die suche machen und es probieren selbst rauszubekommmen.
danke
Ich :-k

Ich89
06.02.2005, 13:31
ich habs hinbekommen!!!! \:D/
man muss schreiben

if Sensor1 then goto Rueckwaerts

als beispiel

und in #Rueckwaerts schriebt man dann:
Motor1=On
Motor2=Off

usw.

mfg
Ich

uwegw
06.02.2005, 15:31
stimmt goto ist auch ne möglichkeit sowas hinzubiegen... allerdings muss es da noch was eleganteres geben...

Ich89
06.02.2005, 15:41
???? ka
auf jedenfall funktioniert es so sehr gut! (laut simulator)
In der realität gehts ma wied ganich....irgendwie mahc ich imma irgendwo n fehler ](*,)
mfg
Ich

uwegw
06.02.2005, 16:17
wie sieht eigentlich die hardware aus? ist da irgendwas faul? pullups oder so? um was für eine sensor handelt es sich eigentlich?

Ich89
06.02.2005, 16:20
hi
es sollte ien ganz normaler bumper sein also ein taster.
eben über die digitalports der c-unit ausgewertet.
und die motoren sind im test auch nur Led´s
Ich

uwegw
06.02.2005, 17:35
aha... und der taster ist zwischen dem port und masse angeschlossen? dann dürfte dein sensor nen true liefern, wenn er NICHT gedrückt ist, und nen fasle, wenn er gedrückt ist. um das auszugleichen, musst du zb schrieben
if NOT sensor1...

um zu testen obs hierdran liegt pack eibn fach mal irgendeine aktion in den else teil...

Tappi
09.02.2005, 23:37
stimmt goto ist auch ne möglichkeit sowas hinzubiegen... allerdings muss es da noch was eleganteres geben...

In CCBASIC kann man nur einzeilige IF Abfragen machen. Das einzige was in Blockstruktur machbar ist sind For Schleifen.

Eine Alternative wäre BASIC++, das ist die Programmiersprache für die M Unit 2.0 und Micro, kann aber auch genauso gut für die alte M Unit bzw. C-Control verwendet werden.

Mehrzeilige If Abfragen, Funktionen, Funktionsparameter, Do Loop Schleife, Select Case und vieles mehr kann man damit machen.

www.fdos.de/ccbpp

Gruß,

Stefan

Ich89
10.02.2005, 06:14
Vielen Dank erstmal für den Tipp!
Ich werde es heute mittag gleich mal ausprobieren.
Kann man denn die alten basic begriffe verwenden??
mfg
Ich

Tappi
10.02.2005, 09:59
Hallo,

teils teils, ich habe versucht einen Kompromiss zwischen altem und neuen Syntax zu schaffen. Die Standartfunktionen etc. sind aber ganz normal implementiert.

Gruß,

Stefan

Ich89
10.02.2005, 13:33
Auf jeden fall schonmal danke!!!
Werde mich gleich mal dranmachen!
eine dokumentation gibts ja auch...
und wenn ich fragen hab....ist dieses forum ja immer eine gute Hilfe!
Ich

Ich89
10.02.2005, 14:25
hmmmm....
leider shcon das erste problem...
wenn ich etwas auf die c-control übertragen möchte dunktioniert es nicht.
er sagt: das programm konnte nicht zu c-control übertragen werden!.
woran liegt das?? :-k
mfg
Ich

Tappi
10.02.2005, 14:38
Richtigen Com Port eingestellt (Optionen)? C-Control richtig verbunden? Richtige Einstellungen des Com Ports?

Ich89
10.02.2005, 14:56
was heist richtige optionen des com-ports???
richtigen com-port ja
und verbindung is auch mit normalem basic gehts...
Ich

Tappi
10.02.2005, 15:43
Hmmm,

also wenn es mit dem normalen CCBasic geht ist der COM Port unter Windows (Einstellungen) richtig konfiguriert. Und Du bist sicher, dass der richtige Com Port unter Optionen eingestellt ist (Optionen > Optionen anzeigen und ändern)? Achte auch auf Autostart Jumper und der gleichen.

Wirklich komisch, bei mir gehts selbst mit dem USB Adapter.

Sollte das nicht klappen kannst Du auch eine alternative Entwicklungsumgebung nutzen (da ist der BASIC++ Compiler mit drin):

http://www.csslabs.de/ccontrol/

Gruß,

Stefan

GaronG
11.02.2005, 07:59
Hi ICH89,

mein Tipp: bleib erst mal bei der mitgelieferten Software. Sie ist vielleicht nicht die beste, aber bis auf den bekannten ON...GOSUB Fehler gut ausgetestet und die mitgelieferten Beispiele funktionieren auch. Üb dich an den Beispielen, es fördert das Verständnis und du bekommst einen besseren Überblick und eine gewisse Routine. Wenn du mehrere Programme erfolgreich zum Laufen gebracht hast, kannst du dich anderen Verbesserungen zuwenden. Wenns dann mal nicht klappt, weißt du wenigestens, dass der Fehler nicht zwischen den Kopfhörern lag... 8)

MfG
GaronG

Ich89
11.02.2005, 09:58
ich werde wohl auch erstmal dabei bleiben und mich richtig einarbeiten...
bin ja auch noch ziemlicher anfänger.
danke für den rat!
(auch wenn das vielleicht nich ganz ins thema passt...)
Ich hab da noch ien sehr großes problem ](*,)
ich schaffe es einfach nciht ein relais mit der c-unit zu schalten!
so wie es in der anleitung steht funktioniert es einfach nicht!
Woran leigt das!!!
wäre sehr dankbar wenn mir jemand helfen könnte!
mfg
Ich

GaronG
11.02.2005, 13:55
Hallo Ich89,

ich versuche gerne zu helfen. Wo liegt denn das Problem ? Hardware oder Software?

MfG
GaronG

Ich89
11.02.2005, 14:22
das ist schön....
also an was es genau liegt....
kann eigentlich nur die hardware sein, weil softwaremäßig hab ich alle möglichkeiten ausprobiert und so schwer is das ja nauch nicht.
ich hab es hardwaremäßig genauso gemacht wie es in der anleitung steht!es funktioniert nur nicht!!
ich hab keine ahnung warum...vielleicht kannst du mir ja weiterhelfen
mfg
Ich

Tappi
11.02.2005, 15:02
Hallo,

sicher, dass Du den Transistor richtig beschaltet hast? Bei den mir bekannten Transistoren muss UBE = 0,6 V sein (bzw. ein anderer Wert fällt nicht ab), spricht am Basis Widerstand müssen 5-0,6=4,4V abfallen (achte hier auf den maximal zulässigen Strom!). Wofür die Diode so gut sein soll weiss ich gar nicht? Soll die einfach nur dazu dienen bei falscher Polung den Strom nicht durch das Relais zu schicken? *Grübel* Schalte erstmal das Relais weg und prüfe, ob du überhaupt einen Schaltvorgang hast.

Gruß,

Stefan

GaronG
11.02.2005, 15:51
Hallo Ich89,

die Schaltung ist richtig so, genau wie im Anleitungsheft. Sie funktioniert auch, ich habe sie schon 8 mal gebaut und jedesmal gings auf Anhieb. Die Transistorbeschaltung wäre tatsächlich eine Fehlerquelle:

Wenn du die Aufschrift des Transistors siehst und die Drähte nach unten zeigen, ist links der Collektor, rechts der Emitter zur GND und in der Mitte die Basis. (Wahrscheinlich weisst du es eh, aber ich sags einfach nochmal)

Hast du ein Voltmeter, dann hänge es einmal zwischen Masse und vor den Basiswiderstand. Wenn du die CC schaltest, muss ein deutlicher Spannungsunterschied zwischen beiden Zuständen zu sehen sein.

MfG
GaronG

Ich89
11.02.2005, 16:24
aaaaalsoo.....
der transistor ist richtig angeschlossen.
wenn ich messe kann ich keinen unterschied feststellen(es sind auch nur 0,3V anwesend...)
habe auhc shcon eine LED anstatt relais probiert, geht aber auch nicht!! ](*,)
vielleicht bin ich ja einfach zu dösig um einen schaltplan zu lesen....(bin wirklich anfänger!!!..also wenn, dann verzeiht es mir)
ich poste mal ein foto von dem versuchsaufbau, ich hoffe man kann dort etwas erkennen. vielleicht könnt ihr mir ja dann den fehler verraten...
ich hoffe!!
Ich

Manf
11.02.2005, 16:28
Die Port -Masse habe ich im Aufbau nicht gefunden!
Manfred

Ich89
11.02.2005, 16:36
ömmmm.... :oops:
ich befürchte es gibt auch keine...
wo genau muss ich die denn anschließen???
sorry für die blöden fragen..
mfg
Ich

GaronG
11.02.2005, 16:44
es sieht so aus, als wenn die Diaode falsch herum sitzt. Masse vom CC und Masse vom Versuchsaufbau müssen miteinander verbunden werden

MfG
GaronG

Ich89
11.02.2005, 17:01
juhuuuuu!!!! \:D/
vielen vielen dank erstmal....
also
das ganze funktioniert shconmal halb...
eine led wird geschaltet, aba ein relais klappt immer noch nicht!!
ist es normal das bei 5V nur 2,6V an der LED ankommen??
bauteile sind alle in ordnung! ( ist ja auch shcon der 3. transistor.... :-b )
hoffentlich könnt ihr mir helfen
Ich

GaronG
11.02.2005, 18:51
Hallo,

die 2,6 V an der LED sind OK, der Rest geht an den Widerstand. Das Relais braucht wahrscheinlich eine etwas höhere Spannung. Leg mal 6 V an das Relais an. Dann müsste es schalten.

MfG
GaronG

Und außerdem gibts keine blöden Fragen, nur blöde Antworten ... \:D/

Ich89
11.02.2005, 19:18
jaa es geht!!!
mit einer höheren spannung läuft es! ( hatte ich vorhin shconmal ausprobiert da gings nich...)
aba hauptsache es geht jetzt.
also nochmals vielen vielen dank!!!
ich meld mich wieda wenn ich ein problem! *gg*
und das wird bestimmt vorkommen
mfg
Ich