...und wieder LUA-Programmierung

German
Post Reply
Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

...und wieder LUA-Programmierung

by Stachel » Post

Hallo zusammen,

ich verstehe nicht, woran es liegt. Wenn auf Pin A ein Signal kommt und auf Pin B zeitnah auch, zählt der nur vorwärts, also addiert. Beide kommen im gleichen Takt rein, müßte also innerhalb des Taktes +/-0 ergeben. Aber er addiert eben immer. Wenn allerdings nur auf Pin A ein Signal kommt, dann zieht er 1 ab und wenn nur auf Pin B ein Signal kommt, addiert er 1. Also solange im gleichen Takt nur 1 Signal kommt, macht er alles richtig und wenn zwei Signale kommen, dann addiert er nur.

Kann mir das einer erklären bzw. sagen, wo der Fehler liegt?

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: ...und wieder LUA-Programmierung

by Stachel » Post

Mein Proramm:

if event.type == "program" then
mem.anzahl = 0
port.a = false
port.c = true
port.d = false
elseif event.type == "on" then

if pin.a then
mem.anzahl = mem.anzahl - 1
end

if pin.b then
mem.anzahl = mem.anzahl + 1
end

if mem.anzahl < 100 then
port.c = true
end

if mem.anzahl >= 150 then
port.c = false
end
digiline_send("LCD",mem.anzahl)

end

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: ...und wieder LUA-Programmierung

by Stachel » Post

Habe gerade Anschlüsse A und B getauscht und umprogrammiert, keine Änderung!

User avatar
Desour
Member
Posts: 1473
Joined: Thu Jun 19, 2014 19:49
GitHub: Desour
IRC: Desour
In-game: DS
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.

Re: ...und wieder LUA-Programmierung

by Desour » Post

Signale kommen nie wirklich gleichzeitig an. Sie kommen im gleichen Takt (globalstep), aber nacheinander an. Dementsprechend gibt es zwei "on" events.
In pin stehen die momentanen Zustände der Ports drinnen. Wenn du wissen willst, von welcher Seite das Signal angegangen ist, sieh dir event genauer an (print(event), dann in's terminal sehen ist der leichteste weg).
Ich hoffe das hilft.
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)

User avatar
orwell
Member
Posts: 958
Joined: Wed Jun 24, 2015 18:45
GitHub: orwell96
IRC: orwell96_mt
In-game: orwell
Location: Raxacoricofallapatorius

Re: ...und wieder LUA-Programmierung

by orwell » Post

Was passiert ist folgendes:
-on event für pin a kommt
-pin a ist an, b ist aus
Zählt also runter.
-dann kommt das on event für pin b
-pin b ist an, pin a ist aber auch noch an.
Also +1 und -1
Insgesamt also einmal runtergezählt.

Was du eigentlich machen willst ist bei der sogenannten steigenden Flanke zählen. Was der Code tut ist aber immer wenn irgendein Event eintrifft abhängig vom Zustand (ein oder aus) der Leitung zu zählen.

Wie DS schon meinte, mit event.pin.name kriegst du den Pin( aber auch nur den Pin) der sich gerade geändert hat (dessen Anderung also das Event ausgelöst hat). Diesen musst du statt der Abfrage auf pin.a /pin.b verwenden.
Lua is great!
List of my mods
I like singing. I like dancing. I like ... niyummm...

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: ...und wieder LUA-Programmierung

by Stachel » Post

Danke für eure Hilfe und sorry, dass ich mich erst jetzt melde! Ihr meint bestimmt sowas:

event.pin.name == "A"

Damit würde es funktionieren, wenn ich nicht alles anders gemacht hätte. Jetzt habe ich 2 Microcontroller eingespart und jede Menge Leitungen...

Post Reply

Who is online

Users browsing this forum: No registered users and 6 guests