PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3x IS471 an C-Control



Roboter n00b
31.01.2005, 20:36
Moin nochmals 8-[
um nicht extra nen neuen Thread aufzumachen, stell ich meine Frage gleich in diesen: Ich hab für meinen bot 3 IS471 angebracht, und möchte sie nun mit dem C-Control verbinden. Das geht ja über die Digitalports, oder? Mein Problem ist nun aber das programmieren. Kann mir jemand kurz ein befehl für den CC tippen, mit einen if (IR empfängt signal) und Then befehl?
Wie kann ich dem CC klar machen, dass er an einem bestimmten digitalport ein Input Signal abwarten soll, und diesen Dann in ein Output signal umwandeln soll?

thx ^^

Serge

Es ist thematisch und von Bezug her ab dieser Stelle völlig neu, deshalb neuer Thread. Manf

ACU
31.01.2005, 20:51
Soweit ich das richtig sehe, liefern diese IS471 ein digitales Signal.
Entweder: Gegenstand oder Kein Gegenstand.


define Sensor1 port[1]
int taste;
If Sensor1=0 THEN GOSUB Taste1

#Taste1
Hier kommt dein Code
Next

Wenn du auf das Ereigniss warten willst, sollte das so gehen:

wait Sensor1=0

Melde dich nochmal, wenns nicht funktioniert.
Ich habe selber lange nichts mit meiner CC1 gemacht.

MfG ACU

Roboter n00b
31.01.2005, 21:06
Hi ACU
Danke für deine rasche Antwort. Ich hab zwar den Code noch nicht ausprobiert, aber ich verstehe ihn nicht genau

define Sensor1 port[1]
-> das ist klar


int taste;
-> Was bedeutet das genau?

If Sensor1=0 THEN GOSUB Taste1
-> Wenn sensor1 kein signal liefert, dann...
Was bedeutet GOSUB?

#Taste1
Hier kommt dein Code
-> das ist klar

wait Sensor1=0
-> wo müsste ich diesen Befehl hinsetzen, damit der CC zB all Sekunde den Zustand des Ports abruft?

Danke und Gruss
Serge

GaronG
01.02.2005, 09:16
Hallo ACU,
sollte in deinem Programmbeispiel statt 'Next' nicht besser ein 'return' kommen? [-o<

MfG
GaronG

GaronG
01.02.2005, 09:21
Hallo roboter n00b,

der Befehl 'wait' wartet solange, bis eine bestimmte Bedingung erfüllt ist. Wenn du einen Port zyklisch abfragen willst, solltest du die timer-Funktion verwenden.

MfG
GaronG

RCO
01.02.2005, 11:24
wait Sensor1=0
hat ja keinen Sinn, wenn mehrere Sensoren überwacht werden sollen.

GoSub ist eine Unterfunktion, wo du schreiben kannst, was passieren soll.

Ansonsten sollte auch in einer SChleife:

port[1]=port[2]

gehen oder?

MFg moritz

Roboter n00b
01.02.2005, 12:12
wait Sensor1=0
hat ja keinen Sinn, wenn mehrere Sensoren überwacht werden sollen.

wieso nicht? Ich müsste halt diese Zeilen für alle 3 Sensoren schreiben oder?


port[1]=port[2]

hä? Sorry, das versteh ich nicht ^^ (*,) , wieso ist Port1=port2?


sorry das ich mich so dämlich anstelle oO

Serge

RCO
01.02.2005, 12:30
wieso nicht? Ich müsste halt diese Zeilen für alle 3 Sensoren schreiben oder?

Das Problem ist, dass die CC soweit ich weiß solange bei einer bedingung hängt, bis sie erfüllt ist, du kannst also nur einen port überwachen, wenn an einem anderen port was passiert, merkt die CC nix davon.
wait sensor=0 wartet halt bis der sensor = 0 ist.

Mit port[1]=port[2] meinte ich, dass Port[1] den Zustand von port[2] erhält.
So wie Variable A = 5

Du programmiert wohl noch nicht alzu lange, oder?
Wenn die Anweisung so richtig ist, könntest du in einer Schleife ständig den Ausgangports die Eingangszustände zuweisen, das wolltest du doch, oder?

Dazu gehört natürlich noch die richtige Definition der ports, aber dafür habeich zu lange nicht mehr mit der CC gearbeitet.

MFG Moritz

Roboter n00b
01.02.2005, 13:30
Hi Moritz


Du programmiert wohl noch nicht alzu lange, oder?
richtig O:)


RCO"]Das Problem ist, dass die CC soweit ich weiß solange bei einer bedingung hängt, bis sie erfüllt ist, du kannst also nur einen port überwachen, wenn an einem anderen port was passiert, merkt die CC nix davon.
wait sensor=0 wartet halt bis der sensor = 0 ist.

ok, also würde folgendes Progi nicht laufen?

#loop
define Sensor1 port[1]
int taste;
If Sensor1=0 THEN GOSUB Taste1

#Taste1
define Led1 port[2]
Led1 = on

define Sensor2 port[3]
int taste;
If Sensor1=0 THEN GOSUB Taste2

#Taste2
define Led2 port[4]
Led2 = on

goto loop




Mit port[1]=port[2] meinte ich, dass Port[1] den Zustand von port[2] erhält.
So wie Variable A = 5

Hmm, also an port[1] und port[2] sind ja 2 sensoren. Und was ist nun genau der Sinn von der sache, dass port[1]=port[2] wird?




Dazu gehört natürlich noch die richtige Definition der ports, aber dafür habeich zu lange nicht mehr mit der CC gearbeitet.

:cry:


ok, thx für eure Mühe =D>

RCO
01.02.2005, 14:09
Hmm, also an port[1] und port[2] sind ja 2 sensoren. Und was ist nun genau der Sinn von der sache, dass port[1]=port[2] wird?

Achso, mir war noch nciht ganz klar, was jetzt wo dran hängt, wenn ich das jetzt richtig sehe, dann so:

Sensor1 --> Port1
Led1 --> Port2
Sensor2 --> Port3
...
Du verwirrst mich echt, im Beispiel schreibst du:

define Sensor1 port[1]
int taste;
If Sensor1=0 THEN GOSUB Taste1

#Taste1
define Led1 port[2]
Led1 = on

und dann:


Hmm, also an port[1] und port[2] sind ja 2 sensoren.

Ich gehe mal davon aus, dass sie jetzt so angeschlossen sind:

Sensor1 --> Port1
Led1 --> Port2
Sensor2 --> Port3
...

Dann müsste es natürlich so heißen:

Hier die ports definieren...

#loop
Led1 = Sensor1
Led2 = Sensor2
Led3 = Sensor3
goto loop

Du brauchst hier keine Unterfunktionen, da sich da nicht lohnt, das bringts nur, wenn da mehr drin steht.

MFG Moritz

ACU
01.02.2005, 14:14
int taste
kann raus!
Das ist noch aus einem alten Programm!

Na klar geht das warten mit Wait!
Du mußt halt eine logische Verknüpfung (zum Beispiel AND) machen.


wait HALLO=1 AND LALA=5
Hier das verbesserte Hauptprogramm:


define Sensor1 port[1]
define Led1 port[2]
define Sensor2 port[3]

#loop
If Sensor1=0 THEN GOSUB Taste1
If Sensor2=0 THEN GOSUB Taste2
goto loop

#Taste1
Aktion für Sensor 1
Next


#Taste2
Aktion für Sensor 2
Led2 = on



Dein Programm war ein wenig chaotisch.
Ich habs ein bischen geordnet.
Bitte mache die Definitionen in den Kopf des Programms.
Nicht in den Programmbereich!

Next ist schon ok.

MfG ACU

Roboter n00b
01.02.2005, 14:33
Hmm, also an port[1] und port[2] sind ja 2 sensoren. Und was ist nun genau der Sinn von der sache, dass port[1]=port[2] wird?

Achso, mir war noch nciht ganz klar, was jetzt wo dran hängt, wenn ich das jetzt richtig sehe, dann so:

Sensor1 --> Port1
Led1 --> Port2
Sensor2 --> Port3
...
Du verwirrst mich echt, im Beispiel schreibst du:

define Sensor1 port[1]
int taste;
If Sensor1=0 THEN GOSUB Taste1

#Taste1
define Led1 port[2]
Led1 = on

und dann:


Hmm, also an port[1] und port[2] sind ja 2 sensoren.

Ich gehe mal davon aus, dass sie jetzt so angeschlossen sind:

Sensor1 --> Port1
Led1 --> Port2
Sensor2 --> Port3
...

ja, so stimmts... Ich hab mich vertippt, sorry




Dann müsste es natürlich so heißen:

Hier die ports definieren...

#loop
Led1 = Sensor1
Led2 = Sensor2
Led3 = Sensor3
goto loop

Du brauchst hier keine Unterfunktionen, da sich da nicht lohnt, das bringts nur, wenn da mehr drin steht.



was meinst du mit unterfunktionen?


int taste
kann raus!
Das ist noch aus einem alten Programm!

Na klar geht das warten mit Wait!
Du musst halt eine logische Verknüpfung (zum Beispiel AND) machen

Also müsste dein Programm so funktionieren. Und anstatt den LED=on könnte ich dann später ein motorenbefehl einsetzen, richtig so?


Nur eins versteh ich noch nicht ganz


Das Problem ist, dass die CC soweit ich weiß solange bei einer bedingung hängatt, bis sie erfüllt ist, du kannst also nur einen port überwachen, wenn an einem anderen port was passiert, merkt die CC nix davon.
wait sensor=0 wartet halt bis der sensor = 0 ist.

Wenn ich das Proggi so machen würde, wie es mir ACU vorgeschlagen hat, wäre das ja kein problem, da ich keinen Wait befehl habe.

Aber kann mir jemand noch sagen, was für eine Zeili ich noch einbringen muss, damit die Sensoren nur alle 2 Sekunden abgerufen werden??

geht das mit einem einfachen Pause 200 befehl?


Merci

O:)

ACU
01.02.2005, 15:07
Mit wait kannst dus auch machen.
Unterprogramme sind diese Dinge
#Programm
BLABLABLA
Next

Später kannst du in diese Unterprogramme auch größere Anweisungsblöcke einfügen (motorsteuerung, etc.).


Im Heft steht:
Der Pause Befehl hält die Programmausführung für Parameter*20Milisekunden an.

Damit du auch mal was machst:
Was mußt du eingeben?

RCO
01.02.2005, 15:13
geht das mit einem einfachen Pause 200 befehl?

Ja im Grunde schon, Pause 200 wäre aber 4 sek. oder hast du übertaktet?


Wenn ich das Proggi so machen würde, wie es mir ACU vorgeschlagen hat, wäre das ja kein problem, da ich keinen Wait befehl habe.

Genau, obwohl es mit "wait x and wait y" wohl auch geht.


Also müsste dein Programm so funktionieren. Und anstatt den LED=on könnte ich dann später ein motorenbefehl einsetzen, richtig so?

Was du außen dranhängst spielt für das Programm keine Rolle, aber du darfst den motor natürlich nicht direkt dran schalten.


was meinst du mit unterfunktionen?
na GOSUB
Sub --> unter ;-)

Nimm einfach mal ACUs code ;-)

MFG Moritz

Roboter n00b
01.02.2005, 15:17
Mit wait kannst dus auch machen.
Unterprogramme sind diese Dinge
#Programm
BLABLABLA
Next

Später kannst du in diese Unterprogramme auch größere Anweisungsblöcke einfügen (motorsteuerung, etc.).


Im Heft steht:
Der Pause Befehl hält die Programmausführung für Parameter*20Milisekunden an.

Damit du auch mal was machst:
Was musst du eingeben?

2000 Millisec = 2 Sec
2000/20 = 100

-> Pause 100



edit: Heisst sensor1 = 0, dass der sensor einen Gegenstand erkannt hat? 1 wär für mich etwas logischer^^

Noch was: Brauch ich nun den Wait befehl nicht?

RCO
01.02.2005, 15:27
Ich kenn mich mit dem IS471 nicht aus, es kann auch sein, dass es davon abhängt, wie man ihn anschließt. Grundsätzlich kann man aber nicht sagen, dass "=1" immer etwas erkannt heißt, das hängt echt vom Sensor und Anschluss ab.

Pause 100 ergibt eine 2 sekündige Pause genau.

MFG Moritz

ACU
01.02.2005, 15:33
Ja du hast Recht, dass mit dem 0 oder 1 ist immer etwas tückisch.
Im Zweifellsfall heißt es ausprobieren.

Ich hatte zum Beispiel mal einen Schalter an einem Digiport und sobald ich geschaltet habe ist er von 1 auf 0 gesprungen.
Ist einige Zeit vergangen, bis ich darauf gekommen bin.


ACU

Roboter n00b
01.02.2005, 18:21
Ok, ich habs nun Theoretisch glaubs begriffen, werde es heute abend wohl noch praktisch ausprobieren. Danke Erstmal für eure Hilfe!!! O:)

Nur eine kleine frage hät ich noch, bezüglich dem wait befehl:



Wenn ich das Proggi so machen würde, wie es mir ACU vorgeschlagen hat, wäre das ja kein problem, da ich keinen Wait befehl habe.

Genau, obwohl es mit "wait x and wait y" wohl auch geht.


Bei "wait x and wait y" wartet der Controller ja auf 2 ereignisse, aber auf welche?

Also, würde das fertige Proggi so aussehen, mit jeweils 2 Sec Pause?:

define Sensor1 port[1]
define Led1 port[2]
define Sensor2 port[3]
define Led2 port[4]

#loop
If Sensor1=0 THEN GOSUB Taste1
If Sensor2=0 THEN GOSUB Taste2
goto loop

#Taste1
Led1=on

Next (brauchts dieses next)?

#Taste2
Led2=on

pause 100

goto loop

Ach ja, ihr fragt euch vielleicht, was ich mit diesen 2 Sec bezwecken will:
Es ist so, das die Control LED meiner IR schaltung, bei einer gewissen distanz zur Wand flakert, und ich könnte mir vorstellen, das der Controller dadurch iritiert wird. MIt diesen 2 sec gedenke ich dieses Problem zu umgehen. Clever was?? 8-
uote="RCO"]
Was du außen dranhängst spielt für das Programm keine Rolle, aber du darfst den motor natürlich nicht direkt dran schalten.


ja, weiss ich, ich hab den RN Motor O:)

Serge

ACU
01.02.2005, 20:47
Nein der wait Syntax ist anders.
Er lautet:
wait True
das bedeutet er wartet so lange, bis die wait Bedingung erfüllt ist.
Wenn du eine Mehrfachverknüpfung machen willst, dann so:
wait A=5 AND B=3
Dann wartet er solange, bis A5 UND B3 ist.
Wenn du nur wait A machst, dann wartet er darauf, dass A 1 (TRUE,Wahr) wird.


MfG ACU