Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundlegende Frage zu SUB's
PhoenixTS82
13.07.2008, 20:46
kann mir einer agen warum das nicht geht ?
zur info: einfache 6x5 led matrix an porta 0-5 und portc 0-4
declare sub led(x as byte, y as byte)
call led(1,1)
sub led(x as byte, y as byte)
porta = 0 'erstmal alle leds auf 0 setzen
portc = 0
x = x - 1
y = y - 1
porta.x = 1
portc.y = 1
end sub
dabei sagt er immer ich soll byval benutzten, wenn ich das mache läuft aber auch nicht!
es leuchtet immer 2,2 egal was ich einstelle
edit: kan mir einer mal byval und byref näher erklären die hilfe kapier ich nciht so ganz....
python_rocks
13.07.2008, 21:36
edit: kan mir einer mal byval und byref näher erklären die hilfe kapier ich nciht so ganz....
Hallo PhoenixTS82!
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/20_ausgaenge_mit_computer/
Suche nach "byval".
mfg
Gerold
:-)
Che Guevara
13.07.2008, 21:37
hallo phoenix,
du möchtest wahrscheinlich, dass immer eine led leuchtet?!?!
dazu benötigst du erstmal eine schleife..... entweder du machst das mit einer do-loop schleife (was bei bascom allerdings schwierig wird, da du nur 1 eine schleife gleichzeitig laufen lassen kannst) oder du machst es mit einer bestimmten anzahl an durchläufen, z.b.:
local i as word
for i = 1 to 10 '10 durchläufe
porta = &b00000000 'alle pins von porta auf 0
portc = &b00000000 'alle pins von portc auf 0
x = x - 1
y = y - 1
porta.x = 1
porta.y = 1
next i
das "porta = 0" funzt so nicht, du kannst entweder alle ports einzeln auf 0 setzen:
porta.0 = 0
porta.1 = 0
porta.2 = 0
usw.
oder aber so wie ich es gerade in dem beispiel gemacht habe:
porta = &b00000000
gruß
chris
PhoenixTS82
13.07.2008, 21:50
hallo che, danke erstmal für deine antwort aber ich meinte eher was anderes.
also porta = 0 fuktioniert,
porta = 0 ist gleich porta = &B00000000
porta = 7 ist gleich porta = &B00000111
das übersetzt er automatisch
mein problem lag eher dadran, das er die werte der aub nciht übernimmt, ich weiss nciht wie das byval funktioniert...
ohne gibt es ne fehlermeldung....
btw: was ist/ macht local ?
Che Guevara
13.07.2008, 22:03
local ist im prinzip fast das gleiche wie dim , nur das local eine variable nur innerhalb einer sub declariert, das bedeutet, du kannst i in mehreren subs unabhängig voneindander verwenden!!
ich würde das so machen:
x = 1
y = 1
call led( x , y )
gruß
python_rocks
13.07.2008, 22:21
declare sub led(x as byte, y as byte)
call led(1,1)
sub led(x as byte, y as byte)
porta = 0 'erstmal alle leds auf 0 setzen
portc = 0
x = x - 1
y = y - 1
porta.x = 1
portc.y = 1
end sub
Hallo PhoenixTS82!
Mir ist gerade eingefallen, dass ich auch mal so ein Problem hatte. Ich glaube das liegt an Bascom und man muss das Problem über eine **externe** Variable (unschön) lösen.
dim tmp as byte
sub led(x as byte, y as byte)
tmp = x - 1
porta.tmp = 1
...
end sub
Probier es mal aus. Vielleicht funktioniert es.
mfg
Gerold
:-)
PhoenixTS82
13.07.2008, 22:32
ok es funktioniert, der fehler war recht banal
ich hatte im haupt programm nur geschireben
call led(1,1)
OHNE do und loop, deswegen hat er sich aufgehangen, weil er nur einmal das programm und die sub durchgelaugen ist und danach stehen blieb.
funktioniert also so wie oben beschrieben.....
p.s. gibt es einen befehl wie INPUT, den ich NICHT mit enter bestätigen muss ?
ich wil quasi mit w,a,s,d die led wandern lassen
Che Guevara
13.07.2008, 23:55
du möchtest also mit 4 tastern(für die vier richtungen) die led, die leuchten soll, auswählen?!?!
wenn ich das so richtig verstanden habe, dann probiers mal so:
if pind.0 = 0 then
waitms 200
if x < 6 then
x = x + 1
else
x = 1
endif
elseif pind.1 = 0 then
waitms 200
if x > 1 then
x = x - 1
else
x = 6
endif
endif
if pind.2 = 0 then
waitms 200
if y < 5 then
y = y + 1
else
y = 1
endif
elseif pind.3 = 0 then
waitms 200
if y > 1 then
y = y - 1
else
y = 5
endif
endif
gruß
PhoenixTS82
14.07.2008, 00:04
hmm ok, ich hab mich falsch ausgedrückt...
nicht über pins sondern tasten auf der tastatut (entweder courortasten oder w,a,s,d)
im moment muss ich
w (enter)
s (enter)
ect. tippen
ich will gerne ohne mit enter zu bestätigen die aktion ausführen.
bei pascal hiess das mal readkey oder so, geht das auch überhaupt mit nem terminal fenster oder muss ich doch auf tasten umsteigen ???
python_rocks
14.07.2008, 09:42
eadkey
Hallo Phoenix!
Entweder mit INKEY, ISCHARWAITING:
- http://halvar.at/elektronik/kleiner_bascom_avr_kurs/uart_rs232_vom_computer/
- http://avrhelp.mcselec.com/index.html?inkey.htm
- http://avrhelp.mcselec.com/index.html?ischarwaiting.htm
oder mit CONFIG SERIALIN (BYTEMATCH=ALL):
- http://halvar.at/elektronik/kleiner_bascom_avr_kurs/uart_rs232_vom_computer_2/
- http://avrhelp.mcselec.com/index.html?config_serialin.htm
mfg
Gerold
:-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.