Forum: Projekte & Code LED-Gesellschaftspiel "Light Touch"


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde,

ich hab mal das Spiel nachgebaut, das es hier in einem kurzen Video zu 
sehen gibt.

Beitrag "Kennt jemand dieses Spiel?"

Spielbeschreibung

Es besteht auf 8 sternförmig angeordneten Lichtdomen mit ohmschen 
Kontakten (Drahtbügel). Acht Leute stehen im Kreis um den Aufbau herum, 
jedem ist ein Lichtdom zugeordnet. Nach dem Einschalten läuft erstmal 
ein Farbkreis, der bei Berührung von 2 Domen in eine Ampel wechselt. 
Mittels der Verbindung von Weiß zu einer der drei Farben wird der 
Schwierigkeitsgrad gewählt (rot=schwer, gelb=mittel, grün=leicht). Dann 
geht es los. Es erscheinen zufällige Muster mit zufälliger Farbe in 
einem zufälligen Winkel angeordnet. Mit fortschreitender Spieldauer 
werden es komplexere Muster. Dabei ist es das Ziel, daß die Leute, deren 
Lichtdom aufleuchtet sich die Hände geben müssen, sprich mit einer Hand 
den Dom und mit der andern Hand den Mitspieler berühren müssen, um einen 
ohmschen Kontakt herzustellen. Das einfachste Muster sind 2 
gegenüberliegende Dome. Komplexere Muster bestehen aus 3 oder mehr 
Domen, einige haben sogar mehrere Farben. Dort müssen die einzelnen 
Farbgruppen getrennten Kontakt herstellen, d.h. es darf keinen 
"Kurzschluß" der Farben geben. Gelingt es nicht innerhalb einer gewissen 
Zeit von ein paar Sekunden die richtigen Kontakte herzustellen, ist das 
Spiel verloren.

Hardware

Herzstück der Elektronik ist ein ATmega328. Dieser steuert acht 
intelligente LEDs vom Typ WS2812B direkt über 8 IOs an. Die Verbindungen 
der ohmschen Kontakte werden über die acht AD-Wandler Eingänge mittels 
Matrixscan ermittelt. Die passiven Eingänge sind dabei hochohmig (1MOhm) 
auf VCC/2 gelegt. Diese Methode ist außerordentlich empfindlich und 
robust, um den Haut-und Körperwiderstand zu messen. ESD-Schutzdioden an 
jedem Eingang sollen das Schlimmste verhindern, wenn das Spiel in sehr 
trockener Umgebung verwendet wird. Die Stromversorgung erfolgt mit 5V 
über USB bzw. eine Powerbank. Die maximale Stromaufnahme wird in erster 
Linie durch die LEDs bestimmt und liegt bei ca. 480mA. Real sind es im 
Spiel ca. 100 mA, denn es leuchten selten alle LEDs gleichzeitig.

Software

Die Software enthält eine Statemachine, welche den Spielablauf 
steuert. Eine ganze Masse an Hilfsfunktionen zum Auslesen und Auswerten 
der Kontaktmatrix sowie zur Erzeugung der LED-Muster stehen bereit. 
Weitere Funktionen waren in der Testphase von Nöten, um 
Zwischenergebnisse mittel Soft-UART auszugeben. Die Farben und 
Verbindungsmuster liegen als Arrays im Flash, ebenso der Spielplan der 
einzelnen Schwierigkeitsgrade. Dort kann man pro Level vorgeben, aus 
welchem Bereich die Muster ausgewählt werden sollen und wieviel Zeit pro 
Level zur Verfügung steht. Einige Powerbanks brauchen einen 
Mindeststrom, damit sie ihren Ausgang nicht abschalten. Dieser wird hier 
nur pulsartig mittels MOSFET und 2 Widerständen erzeugt (200mA, 100ms 
Pulsbreite, 5s Periodendauer), damit sinkt der mittlere Strom deutlich. 
Damit der Pseudo-Zufallsgenerator "zufälliger" arbeitet, läuft dieser 
immer mit 100Hz im Hintergrund. Damit werden bei jedem Einschalten immer 
andere Muster und Farben erzeugt, da es praktisch unmöglich ist, auf 
10ms genau ein neues Spiel zu starten. Über PB7 können per Soft-UART 
Debugdaten ausgegeben werden, welche mittels passendem Adapterkabel ala 
FTDI am PC empfangen werden können.

Mechanik

Die Lichtdome bestehen aus 12cm Glasschüsseln, die gibt es sehr 
preiswert für ca. 1 Euro auf Ebay. Diese wurden innen mit einer 
speziellen Farbe besprüht, welche einen Milchglaseffekt erzeugt.

Dupli Color 263231

https://www.amazon.de/Dupli-Color-263231-Dupli-Color-Milchglas-Effekt/dp/B007TWNQYY

Dadurch wird das Licht gleichmäßiger, man sieht die LED und das Kabel 
nicht. Beim Sprühen wurde 5 mal eine sehr dünne Schicht aufgetragen und 
zwischendurch ca. 30min gewartet, damit diese trocknet. Wenn möglich 
sollte man besser gleich Glas- oder Kunststoffschüsseln mit Milchglas 
kaufen, das spart die Lackierung. Die Kontakte bestehen aus 1mm 
versilbertem Blankdraht, welcher als Kreuz auf die Schüssel geklemmt und 
in der Mitte verlötet wurde. Der Boden besteht aus einer 2mm 
Hartpapierplatte, die mittels Stichsäge kreisförmig ausgesägt wurde. 
Dabei ist auf eine Passung mit minimalem Spiel zu achten, damit klemmt 
sie die Drahtbügel gleich fest. Die LEDs sind an 6pol Flachbandkabel 
direkt angelötet. Achtung! Beim Zerschneiden der LED-Streifen darauf 
achten, daß die Lötkontakte an der EINGANGsseite stehen bleiben! Die LED 
wird mittig auf die Grundplatte geklebt und das Kabel mittels Epoxidharz 
verklebt. Vor dem Schließen der Grundplatte wird das Sensorkabel innen 
an den Drahtbügel angelötet. Zum Schluß verleihen je drei Gummifüße den 
Domen Halt auf einer Tischplatte.

Hinweise

Der Untergrund, auf dem die Spieler stehen, sollte sehr gut isolieren, 
denn sonst kommt es je nach Schuhwerk und dessen Leitfähigkeit zu 
Fehlmessungen bei der Prüfung der Kontaktmatrix. Ein trockener Holz-, 
Stein- oder Kunststofffußboden ist angeraten. Eine feuchte Wiese, 
Erdboden oder gar Schlamm (Festivals, Camping) sind ungeeignet. Ebenso 
dürfen sich nebeneinander stehende Spieler nicht anderweitig berühren, 
das verursacht auch Fehlmessungen.

Die aktuelle Firmware ist mit ~4,5kB relativ klein, sodaß auch ein 
ATmega8 oder ATmega88 nutzbar ist. Die .elf Datei enthält auch schon 
alle Einstellungen der Fuses. Bei der Verwendung der .hex Datei muss die 
DIV_8 Fuse deaktiviert werden (Haken entfernen == auf 1 setzen).

Den Boden der Lichtdome kann man ggf. aus weißem Material herstellen 
oder weiß lakieren, das sieht ggf. besser aus als weißes Milchglas mit 
schwarzem Boden.

Viel Spaß beim Nachbauen und natürlich besonders beim Spielen

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Sehr schöne Umsetzung! Das werde ich auf jeden Fall nachbauen, danke!

Hast Du von der Hauptplatine vielleicht mehrere herstellen lassen und 
hast noch eine übrig? ;-)

von Falk B. (falk)


Lesenswert?

Frank M. schrieb:
> Sehr schöne Umsetzung! Das werde ich auf jeden Fall nachbauen, danke!
>
> Hast Du von der Hauptplatine vielleicht mehrere herstellen lassen und
> hast noch eine übrig? ;-)

Jain, ich hab zwar noch ne 2. Platine, die ist auch schon bestückt und 
getestet, aber ebenso auch verplant.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hmmm, da hat sich wohl beim letzten Aufräumen und hübsch machen ein 
Fehler in die Software eingeschlichen. Schöner Mist! Dabei wurden keine 
Kombinationen mit mehr als 1 Farbe erkannt! Im Anhang das korrigierte 
Projekt.

von Falk B. (falk)


Lesenswert?

To whom it may concern

Ich hab mal 10 Platinen in China bestellt, die sollten so in 2 Wochen da 
sein. Wer welche haben will, bitte melden. Die Rohplatine gibt es bei 
mir für 2,50 Euro incl. Versand im Brief, vollbestückt und programmiert 
für 10 Euro incl. Versand.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Super, ich nehme direkt zwei. Beide gerne in vollbestückt.

Beitrag #5686369 wurde von einem Moderator gelöscht.
von Hans H. (loetkolben)


Lesenswert?

Nehme auch gerne zwei unbestückte, PN ist unterwegs.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Ich hab die Hardware noch mal überarbeitet und dabei die Platine von 70 
auf 64mm Durchmesser geschrumpft. Außerdem gibt es jetzt eine stehende 
Micro-USB-Buchse, damit ist nichts mehr auf der Rückseite bestückt.

Es sind noch 5 Platinen verfügbar, der freundliche Chinese hat 2 mehr 
eingepackt.

von Hans H. (loetkolben)


Lesenswert?

Leiterplatten kamen gestern gut verpackt an.

Vielen Dank dafür.

von Kolja L. (kolja82)


Lesenswert?

Erst einmal ein großen Dank an Falk für die Platine!

Und natürlich möchte ich das Spiel auf unserem Festival, also draußen 
spielen.
Einen isolierenden Untergrund werden wir schon schaffen.

Was sind denn die hellsten LED, die ich dafür verwenden kann?
Oder ist es möglich einzelne WS2812 LED parallel zu betreiben?
(Ohne die Software anpassen zu müssen)

Gruß Kolja

von Falk B. (falk)


Lesenswert?

Kolja L. schrieb:

> Und natürlich möchte ich das Spiel auf unserem Festival, also draußen
> spielen.
> Einen isolierenden Untergrund werden wir schon schaffen.

Holzplatten, Holzpalette, ein alter PVC-Belag etc.

> Was sind denn die hellsten LED, die ich dafür verwenden kann?

Keine Ahnung. Aber wenn du gegen Sonnenlicht zur Mittagszeit ankämpfen 
willst, wird das eher eng.

> Oder ist es möglich einzelne WS2812 LED parallel zu betreiben?
> (Ohne die Software anpassen zu müssen)

Sollte funktionieren, so 3-5 parallel sollte der AVR noch problemlos 
treiben können.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Ok, hier die letzte kleine Änderung. Die Schlitze für die 
Micro-USB-Buchse waren ein wenig zu groß. Eigentlich werden dort 0,5mm 
Schlitze gefordert, die machen aber viele Hersteller nicht, so auch 
Elecrow. Dort sind 1mm Schlitzbreite das Minimum (mit 0,8mm Fräser + 
Aufkupferung). Also habe ich die beiden seitlichen Schlitze in 0,9mm 
Bohrungen geändert, das sollte passen. Der mittlere Schlitz wurde etwas 
verkürzt. Damit sollte die Buchse einfacher zentriert und gelötet werden 
können.

Außerdem hab ich die Stückliste korrigiert, da war noch die alte, 
horizontale USB-Buchse drin 8-0

Anbei auch das ELF-File für den ATmega88, den hab ich auf den 10 
Platinen verbaut, der reicht. Das ELF-File des großen Bruder läuft dort 
nicht, weil die Interruptvektortabelle nicht paßt!

von Falk B. (falk)


Lesenswert?

Hallo liebe Gemeinde,

es klingt vielleicht albern, aber ich frage mal alle Käufer von damals, 
ob sie alle Platinen verbraucht habe. Denn ich würde EINE brauchen, ich 
will nochmal ein Spiel bauen, dafür aber nicht 10 Platinen in China 
bestellen. Kann einer von euch wieder eine zurückverkaufen? ;-)

MfG
Falk

von bernte (Gast)


Lesenswert?

leg doch ne neue runde auf

bedarf gibt es genugt

einmal voll bestückt bitte  ;-)

von BillX (Gast)


Lesenswert?

Ich hätte auch Interesse an 1...2 Platinen!

von M. P. (phpmysqlfreak)


Lesenswert?

Da würde ich mich auch mit 2 Exemplaren anschließen :D

von Falk B. (falk)


Lesenswert?

OK, ich bestelle wieder welche. Wenn jemand welche will, muss er es bis 
Montag hier kund tun. Allerdings gibt es diesmal nur unbestückte 
Platinen, den Lötaffen mach ich nicht mehr ;-)

von Oliver S. (oliver_s)


Lesenswert?

Hallo Falk,

ich nehme auch eine Platine. PN ist unterwegs.

Gruß
Oliver

von Falk B. (falk)


Lesenswert?

Ok, ich hab mal 20 Platinen bestellt, die sollten in 3-4 Wochen hier 
sein. Wer welche haben will, schreibt mir eine PM mit Postanschrift. 
Kostenpunkt 2 Euro/Platine und 2 Euro Versandkosten. Die Platinen sind 
UNBESTÜCKT!

: Bearbeitet durch User
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Ok, es hat ein "wenig" länger gedauert. Die erste Lieferung per Airmail 
(4-8 Wochen Laufzeit) ist anscheinend auf der Seidenstraße verschollen, 
nach 4 Monaten kam da nix mehr. Also neue Bestellung, diesmal Lieferung 
per DHL. Hat auch alles funktioniert. Aber oh Schreck, DHL wollte 
nochmal extra 23,22 Euro haben, davon über 15 Euro 
Kapitalbereitstellungsprovison + MWst und knapp 9 Euro EU-Steuer! 
WAAAAAAS?

https://tradingshenzhen.com/de/faqs/fragen-zu-bestellung-versand-zoll/dhl-kapitalbereitstellungsprovision.html

Egal, jetzt ist der Kram hier. 20 Platinen waren bestellt, 24 geliefert, 
Danke nach Shenzen.

Damit sind die Platinen leider etwas tuerer geworden. Es gibt nur 
UNBESTÜCKTE Platinen a 3 Euro + 2 Euro Versandkosten. Wer welche haben 
will schreibt eine PM an mich mit seiner Postanschrift. Zahlung per 
PayPal bevorzugt, ggf. auch Überweisung. 20 Platinen sind noch 
verfügbar. Zwei Leute haben schone welche bestellt, oliver_s (1x) und 
phpmysqlfreak (2x), die gehen dann Montag raus.

von Testu (Gast)


Lesenswert?

Was für ein Surface-Finish haben die Platinen (HASL mit oder ohne Blei)?

von Falk B. (falk)


Lesenswert?

HASL, aber ob bleifrei oder nicht kann ich nicht genau sagen. Elecrow 
bietet beides an, das gespeicherte Projekt sagt nur HASL. Vermutlich 
bleihaltig. Sollte für den Hobbybastler aber keine Rolle spielen.

von M. P. (phpmysqlfreak)


Lesenswert?

Die PN von dir kam an, Falk. - Und das Geld ist raus ;)

Auch eine separate Begleit-Email habe ich geschickt, da ich nicht weiß, 
ob das Forum dich bereits wieder kontaktieren kann. - Ich erhalte oben 
ab und an noch immer den Warnhinweise zu GMX, 1und1 und co.

von Pat B. (pat_b)


Lesenswert?

Ist es nicht sehr unverantwortlich, in CORONA-Zeiten ein Spiel 
rauszubringen, wo viele Leute nich nur eng zusammen stehen, sondern sich 
sogar noch BERÜHREN müssen? Hmm...

von Falk B. (falk)


Lesenswert?

Pat B. schrieb:
> Ist es nicht sehr unverantwortlich, in CORONA-Zeiten ein Spiel
> rauszubringen, wo viele Leute nich nur eng zusammen stehen, sondern sich
> sogar noch BERÜHREN müssen? Hmm...

Im Gegenteil! Das wird für viele Menschen eine zwingend nötige Therapie, 
ihre Coronaphobie zu überwinden und wieder Nähe und Körperkontakt mit 
anderen Menschen herzustellen und dabei zu erfahren, daß man dadurch 
NICHT stirbt!

(Leute gibt's)

von Walta S. (walta)


Lesenswert?

Also 3 Wochen Krankenstand mit Geschmacksverlust bis heute hat mir 
gereicht. Da brauch ich kein Spiel um das zu wiederholen und keine 
Menschen die mir sagen ist doch alles nur Einbildung.

Stimmt schon - ich bin nicht gestorben. Aber nochmal brauch ich das echt 
nicht.

walta

von Falk B. (falk)


Lesenswert?

Walta S. schrieb:
> Stimmt schon - ich bin nicht gestorben. Aber nochmal brauch ich das echt
> nicht.

Hmm, wenn jemand mit den Fahrrad einen (schweren) Unfall hat, wird er 
dann wieder Fahrrad fahren? Oder sollte man Fahrradfahren für alle 
besser verbieten?

https://de.wikipedia.org/wiki/Posttraumatische_Belastungsst%C3%B6rung

Oder einfacher gesagt. Wer vom Pferd gefallen ist, muss so schnell wie 
möglich wieder aufsteigen!!!

von Helge (Gast)


Lesenswert?

>Oder einfacher gesagt.

Unglaublich wie unempathisch und egoistisch Leute sind. Schäm dich!

von 2aggressive (Gast)


Lesenswert?

No risk, no fun.

von M. P. (phpmysqlfreak)


Lesenswert?

Pat B. schrieb:
> Ist es nicht sehr unverantwortlich, in CORONA-Zeiten ein Spiel
> rauszubringen, wo viele Leute nich nur eng zusammen stehen, sondern sich
> sogar noch BERÜHREN müssen? Hmm...

Schau mal bitte auf das Datum des ersten Beitrags mit der 
Spiel-Vorstellung - und dann wiederhole bitte nochmal das mit dem 
rausbringen in Corona-Zeiten.

Dazu ist das Nachbauen auch ein schöner Zeitvertreib in Zeiten wie 
jetzt.

Aber Hauptsache wieder was gesagt...

Beitrag #6562057 wurde vom Autor gelöscht.
Beitrag #6562070 wurde vom Autor gelöscht.
von Martin P. (billx)


Lesenswert?

hallo,
Platinen sind heute bei mir angekommen! Vielen Dank Falk!

Viele Grüße Martin

von Matthias 🟠. (homa)


Lesenswert?

Bei mir auch. Dankeschön und schönen Abend.

von Oliver S. (oliver_s)


Lesenswert?

Bei mir auch. Vielen Dank Falk.
Falls du mir auf meine PN schon geantwortet hast, ist sie nicht 
angekommen.

von Falk B. (falk)


Lesenswert?

Oliver S. schrieb:
> Bei mir auch. Vielen Dank Falk.
> Falls du mir auf meine PN schon geantwortet hast, ist sie nicht
> angekommen.

Ich habe nochmal direkt an deine Emailadresse geschrieben.

von Falk B. (falk)


Lesenswert?

Es ist noch Suppe da, ähh, ich meine Platinen ;-)

Beitrag "Re: LED-Gesellschaftspiel "Light Touch""

von Walta S. (walta)


Lesenswert?

Falk B. schrieb:
> Walta S. schrieb:
>> Stimmt schon - ich bin nicht gestorben. Aber nochmal brauch ich das echt
>> nicht.
>
> Hmm, wenn jemand mit den Fahrrad einen (schweren) Unfall hat, wird er
> dann wieder Fahrrad fahren? Oder sollte man Fahrradfahren für alle
> besser verbieten?
>
> https://de.wikipedia.org/wiki/Posttraumatische_Belastungsst%C3%B6rung
>
> Oder einfacher gesagt. Wer vom Pferd gefallen ist, muss so schnell wie
> möglich wieder aufsteigen!!!

Also ist deine Empfehlung sich nach einer Corona Infektion möglichst 
schnell wieder zu infizieren.

walta

von Stefan (Gast)


Lesenswert?

Walta S. schrieb:
> Also ist deine Empfehlung sich nach einer Corona Infektion möglichst
> schnell wieder zu infizieren.
Die "also" Corona-Milben sind mittlerweile dazu gezwungen sich in 
sachfremden Threads auszudrücken. Das Spiel lässt gut an frischer Luft 
spielen, um vor Grippe, Masern etc. geschützt zu sein.

Beitrag #6589751 wurde vom Autor gelöscht.
von Horst G. (horst_g532)


Lesenswert?

Walta S. schrieb:
> Also ist deine Empfehlung sich nach einer Corona Infektion möglichst
> schnell wieder zu infizieren.

Nein; Falks Empfehlung war, sich auch als Corona-Überlebender nicht 
zeitlebens zu Hause einzuschließen, Maske aufzuziehen und 2m Abstand zu 
Jedem einzuhalten (auch im Bett!), sondern möglichst frühzeitig wieder 
zu einem normalen Leben und normaler menschlicher Interaktion (inkl. 
Mimik, Gestik, Berührungen, dicht an dicht) überzugehen.
Er sagte nicht, dass du, nachdem du einmal vom Rad fielst, in der Folge 
permanent regelmäßig vom Rad fallen sollst.

von Pat B. (pat_b)


Lesenswert?

Horst G. schrieb:
> Walta S. schrieb:
>> Also ist deine Empfehlung sich nach einer Corona Infektion möglichst
>> schnell wieder zu infizieren.
>
> Nein; Falks Empfehlung war, sich auch als Corona-Überlebender nicht
> zeitlebens zu Hause einzuschließen

Wobei, wenn ich mir die Sozial-, Empathie-, Interaktionskompetenzen und 
Diskussionsfähigkeiten einiger Teilnehmer hier so ansehe, der Menschheit 
damit wohl fast besser gedient wäre... zuschließen (von außen!) und gut. 
Ruhe im Karton.

Und der Horst ist so eine Art Falk-Versteher, Falk-Orakel oder einfach 
nur ein Falk-Fanboy? :D

Ich könnt euer kleines Blinklicht-Spielchen ja in "CORONA TOUCH" 
umbenennen -  vielleicht wird die Suppe dann doch noch alle.

Der C-Code ist übrigens stark verbesserungswürdig, und ich würde 
empfehlen - besonder über die Kommentare!!! - nochmal rüber zu gehen. 
Das ist nur GANZ KNAPP über der allerunterstent Teppichkante wenn ich 
das mal so sagen darf.

Und dabei sollten wir nicht vergessen: wer austeilt, muss auch 
einstecken können. Der Falk ist immer sehr gut im ersterem.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Pat B. schrieb:
> Der C-Code ist übrigens stark verbesserungswürdig,

In welcher Form? Was ist denn so schrecklich?

> und ich würde
> empfehlen - besonder über die Kommentare!!! - nochmal rüber zu gehen.

Dito. Was ist da in deinen Augen unzureichend?

> Das ist nur GANZ KNAPP über der allerunterstent Teppichkante wenn ich
> das mal so sagen darf.

Darfst du, wenn gleich . . .

> Und dabei sollten wir nicht vergessen: wer austeilt, muss auch
> einstecken können. Der Falk ist immer sehr gut im ersterem.

Jaja. Du bist ja auch das leuchtende Beispiel. Ohne konkret zu werden 
einfach nur von schlechter Qualität zu sprechen ist armseelig.

Beitrag #6590419 wurde von einem Moderator gelöscht.
von Pat B. (pat_b)


Lesenswert?

>  Beitrag #6590419 wurde von einem Moderator gelöscht.

Ach so, wenn die Wahrheit weh tut wird sie gelöscht. Da waren eine ganze 
Menge gute Kommentare drin, wie Du Dein C-Code verbessern kannst!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich bitte darum, auf persönliche Anfeindungen, nur weil man 
augenscheinlich ein persönliches Problem mit dem Gegenüber hat, zu 
verzichten.

Kritik am "Code" (ich bitte hier um korrekte Schreibweise und nicht den 
unangebrachten Griff ins Klo) kann man auch sachlich verfassen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Pat B. schrieb:
> Ach so, wenn die Wahrheit weh tut wird sie gelöscht. Da waren eine ganze
> Menge gute Kommentare drin, wie Du Dein C-Code verbessern kannst!

Dann schreib Deine "guten Kommentare" auch in gutem Deutsch. Fäkalien 
werden gelöscht.

von Pat B. (pat_b)


Lesenswert?

Frank M. schrieb:
> Ich bitte darum, auf persönliche Anfeindungen, nur weil man
> augenscheinlich ein persönliches Problem mit dem Gegenüber hat, zu
> verzichten.
>
> Kritik am "Code" (ich bitte hier um korrekte Schreibweise und nicht den
> unangebrachten Griff ins Klo) kann man auch sachlich verfassen.

Leute, die AUSTEILEN MÜSSEN AUCH EINSTECKEN KÖNNEN.

Vielleicht könntest Du bitte ebenfalls unseren lieben FALK das nächste 
mal mit ebensoviel Liebe zur Diktatur-Zensur korrigieren.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Pat B. schrieb:
> Leute, die AUSTEILEN MÜSSEN AUCH EINSTECKEN KÖNNEN.

Du hast offenbar ein persönliches Problem mit Falk. Ich als Leser dieses 
Forums empfinde es als Belästigung, Kleinkriegen, die micht NICHTS 
angehen, ausgesetzt zu sein.

Wenn Du ein persönliches Problem mit Falk ausdiskutieren möchtest, dann 
mache das über PN mit ihm persönlich aus. Bei Missbrauch dieses Forums 
(ja, so sehe ich das, wobei mich Deine harschen Reaktionen ganz klar 
bestätigen), um persönliche Kriege anzuzetteln, wird der Beitrag 
gelöscht, siehe Nutzungsbedingungen.

Also verfasse Deinen Beitrag in einem angemessenen Ton. Die 
Forumssoftware hat Dir Deinen gelöschten Beitrag per Mail zugeschickt, 
so dass Du ihn einfach überarbeiten und und in angemessenem Ton verfasst 
neu einstellen kannst - wenn Du das überhaupt möchtest. Wenn nicht, dann 
war Deine Kritik an Falks C-Code offenbar gar nicht so wichtig - auch 
gut.

> Vielleicht könntest Du bitte ebenfalls unseren lieben FALK das nächste
> mal mit ebensoviel Liebe zur Diktatur-Zensur korrigieren.

Es gibt den Melden-Button, wenn Du meinst, dass ein Beitrag eines 
anderen zu weit geht. So einfach ist das. Du sprachst in Deinem 
gelöschten Beitrag vom Niveau, dass Du nicht erreichen könntest. Frag 
Dich mal, von welcher Seite.

: Bearbeitet durch Moderator
Beitrag #6590632 wurde von einem Moderator gelöscht.
Beitrag #6590670 wurde von einem Moderator gelöscht.
von Pat B. (pat_b)


Lesenswert?

Hier also Kommentare zu Falks C-Code - alles Anfängerfehler.
Bei Google würdest Du mit Deiner Schlamperei keine 2 Wochen überleben.
Na, für Dein kleines Blinklichtspielchen ist das ja ohnehin egal. Hoffe, 
dass Dein professioneller Code anders aussieht. Code REviews scheint's 
bei Dir in der Firma (ach so, DU bist ja sicherlich selbständig... was 
einiges erklären würde...) nicht zu geben.
1
void generate_pattern(int difficulty, int level, matrix_t set_pattern, led_t led_data) {
2
3
    uint8_t new_colors[5];
4
    uint8_t new_pattern;
5
    uint8_t new_shift=0;
6
    uint8_t i, j, k, l, m, n, min, max;
7
    uint8_t is_same, is_allowed;
8
    static uint8_t old_pattern, old_shift;
9
10
    // generate random pattern, colors and phase shift

Z.B. inkonsistente Typenverwendung (int im Kopf, uint's im Body). Und 
Zählvariablen wie "i" werden am Beginn der Prozedur definiert... und 
wiederverwendet. Selbst mit nem ATtiny solltest Du genügend Platz haben, 
um sowas in einen Block lokal in bzw. vor der entsp. for-Schleife zu 
machen. Das halte ich für ganz schlechten Stil. Alle Variablen am 
Prozedurbeginn deklariert / definiert. Dann kannst auch gleiche ganz auf 
globale Variablen umsteigen. BASIC vielleicht?

Die Kommentare der Art:
1
// make a light show
2
3
void light_show(void) {

sind relativ redundant. Zumal, für Prozeduren empfiehlt es sich, Verben 
zu verwenden. Also "run_light_show", "show_light_show", usw.
1
/*
2
3
LED game with 8 LED powered light domes with ohmic contact sense
4
5
"Light touch" (tm)
6
7
8
*/

Im Header - ist das alles??? Keine Lizenz, keine Version, kein Author... 
kein Datum.

Und und und.
1
// F_ISR ~100 Hz
2
3
ISR(TIMER0_COMPA_vect) {
4
    static uint8_t cnt100ms;
5
6
    cnt100ms++;
7
    if (cnt100ms == 10) {
8
        cnt100ms=0;
9
        flag_100ms=1;
10
    }
11
}

Geht's auch genauer??? ~100 Hz? Oder 101 Hz?

: Bearbeitet durch User
Beitrag #6590695 wurde von einem Moderator gelöscht.
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Pat B. schrieb:
> Hier also Kommentare zu Falks C-Code - alles Anfängerfehler.

Ich bin zwar nicht Falk, aber bei Deiner Kritik zieht's mir die Schuhe 
aus, denn ich persönlich kann keinen Fehler erkennen.

> Z.B. inkonsistente Typenverwendung (int im Kopf, uint's im Body).

Das ist in C erlaubt. Wenn man weiß kann, dass kein ungewollter Overflow 
auftritt, hat man durchaus die Freiheit, den Typ für die Variablen zu 
wählen, der den Anforderungen genügt. Daher: kein Fehler. Die Verwendung 
von verschiedenen Typen wird dieses Programm nicht in der Funktionalität 
einschränken oder gar zum Crash bringen.

> Und Zählvariablen wie "i" werden am Beginn der Prozedur definiert...
> und wiederverwendet.

Auch das ist in C ausdrücklich erlaubt - und damit kein Fehler. Das ist 
lediglich Geschmackssache. Manchmal kann es auch der Übersicht dienen, 
alle verwendeten lokalen Variablen auf einen Blick zu sehen. Das ist 
also lediglich persönliche Vorliebe - mehr nicht.

Die spätere Wiederverwendung einer lokalen Schleifenvariable kann zu 
einem ungewollten Fehler führen - muss es aber nicht, wenn man weiß, was 
man tut.

> Die Kommentare der Art: .... sind relativ redundant.

Auch das ist kein Fehler. Ich habe noch nie ein Programm gesehen, 
welches wegen seiner Kommentare crasht.

> Keine Lizenz, keine Version, kein Author... kein Datum.

Auch das ist kein Fehler. Wenn keine Lizenz angegeben ist, gilt das 
deutsche Urheberrecht.

> Geht's auch genauer??? ~100 Hz? Oder 101 Hz?

Das kann man dem Quelltext einwandfrei entnehmen. Außerdem kann ich Dich 
beruhigen, das Spiel würde auch mit 101 Hz korrekt laufen. Was Falk mit 
"~100Hz" lediglich sagen wollte: Die ISR sollte mit ungefähr 100 Hz 
laufen, damit das Spiel wie vorgesehen spielbar ist. Diese Bedingung ist 
durch den nachfolgenden Code einwandfrei erfüllt.

Fazit: Ich sehe keinen einzigen Fehler - schon gar keine Anfängerfehler. 
Wo sind bloß bei Dir die Prioritäten bei der Programmierung? Schöne 
Kommentare, Angabe des eigenen Namens oder die prinzipielle Korrektheit 
des Programms?

Nenne doch bitte mal einen(!) Fehler. Ein Fehler ist dann gegeben, 
wenn das Programm die beschriebene Funktionalität nicht erfüllt.

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

Pat B. schrieb:
> Hier also Kommentare zu Falks C-Code - alles Anfängerfehler.

jaja.

> Bei Google würdest Du mit Deiner Schlamperei keine 2 Wochen überleben.

Ich bin weder Softwerker, noch Hipster noch Elite-Coder. Ist keine 
Ausrede, nur Fakten.

> Na, für Dein kleines Blinklichtspielchen ist das ja ohnehin egal.

Ufff, Glück gehabt!

> Hoffe,
> dass Dein professioneller Code anders aussieht.

Nur wenig. Aber Programmieren macht bei mir bestenfalls 10% meiner 
Tätigkeit aus. Bin Hardwerker. Die Jungs mit dem Lötkolben und 
Seitenschneider.

> Code REviews scheint's
> bei Dir in der Firma (ach so, DU bist ja sicherlich selbständig... was
> einiges erklären würde...) nicht zu geben.

Bin kein Softwerker, Code Reviews mögen sinnvoll sein, ich hab seltenst 
welche gemacht, mangels Masse und Wichtigkeit meiner 
Programmiertätigkeiten. Ich arbeite weder für Google, die NASA noch 
sonstige hochkarätige Institutionen.

> void generate_pattern(int difficulty, int level, matrix_t set_pattern,
> led_t led_data) {
>     uint8_t new_colors[5];
>     uint8_t new_pattern;
>     uint8_t new_shift=0;
>     uint8_t i, j, k, l, m, n, min, max;
>     uint8_t is_same, is_allowed;
>     static uint8_t old_pattern, old_shift;
>     // generate random pattern, colors and phase shift
>
> Z.B. inkonsistente Typenverwendung (int im Kopf, uint's im Body).

Akzeptiert, ist eine Nachlässigkeit. Oder ich habs mal an einer Stelle 
geändert und dann nicht nachgezogen.

> Und
> Zählvariablen wie "i" werden am Beginn der Prozedur definiert... und
> wiederverwendet. Selbst mit nem ATtiny solltest Du genügend Platz haben,
> um sowas in einen Block lokal in bzw. vor der entsp. for-Schleife zu
> machen. Das halte ich für ganz schlechten Stil.

Du hast es erfaßt. Es ist eine Stilfrage. Mein Stil ist zugegebenermaßen 
etwas Pascal-lastig. Lokale Variablen in Schleifen und ähnliche Dinge 
sind nicht mein Ding.

> Alle Variablen am
> Prozedurbeginn deklariert / definiert. Dann kannst auch gleiche ganz auf
> globale Variablen umsteigen. BASIC vielleicht?

Nö, Turbo-Pascal. Abi 95, da war das noch hipp!

> Die Kommentare der Art:
> // make a light show
> void light_show(void) {
>
> sind relativ redundant.

Sind sie, ich halt manchmal stehen gelbieben bzw. ich war ein wenig zu 
geschwätzig.

> Zumal, für Prozeduren empfiehlt es sich, Verben
> zu verwenden. Also "run_light_show", "show_light_show", usw.

Stimmt.

> /*
> LED game with 8 LED powered light domes with ohmic contact sense
> "Light touch" (tm)
> */
>
> Im Header - ist das alles??? Keine Lizenz, keine Version, kein Author...
> kein Datum.

Häää? Das ist Beerware(tm)! Kein Witz.

>
> Und und und.
> // F_ISR ~100 Hz
> ISR(TIMER0_COMPA_vect) {
>     static uint8_t cnt100ms;
>     cnt100ms++;
>     if (cnt100ms == 10) {
>         cnt100ms=0;
>         flag_100ms=1;
>     }
> }
>
> Geht's auch genauer??? ~100 Hz? Oder 101 Hz?

Nö, denn das Ding läuft mit RC-Oszillator. Außerdem dem Problem 
angepaßt, eine exakte Frequenz ist hier schnuppe.

Geht's dir jetzt besser?

von Falk B. (falk)


Lesenswert?

Frank M. schrieb:
> Nenne doch bitte mal einen(!) Fehler. Ein Fehler ist dann gegeben,
> wenn das Programm die beschriebene Funktionalität nicht erfüllt.

Willkommen in Zeitalter der Social Justice Warrior. Deren "Werte" 
orientieren sich GANZ woanders, meistens nicht an der Realität oder gar 
relevanten Dingen. Daß die aber schon in den Bereich der 
Hobbyprogrammierung vorgestoßen sind, war mir bis jetzt nicht bekannt.

von Pat B. (pat_b)


Lesenswert?

Frank M. schrieb:
> Ich bin zwar nicht Falk, aber bei Deiner Kritik zieht's mir die Schuhe
> aus, denn ich persönlich kann keinen Fehler erkennen.

Korrekt, ich hätte schreiben sollen: "Schlechter Anfänger-Stil".

Dazu möchte man bitte im Hinterkopf behalten, dass C-Programme in erster 
Linie für Menschen, nicht für Maschinen, geschrieben werden. D.h., alles 
was es lesbarer, wartbarer, konsistenter, und verständlicher macht, ist 
wichtig.

Sonst könnten wir ja wieder Maschinensprache machen...

> Auch das ist in C ausdrücklich erlaubt

Erlaubt ist vieles. Ich kann mir auch ne Frikadelle an die Backe nageln, 
das ist auch erlaubt. Ob es gut, stilvoll oder sinnvoll ist, ist eine 
andere Frage.

Die einfachen (syntaktischen) "Fehler" findet der Compiler ohnehin, 
dafür braucht es kein Code Review. Lese mal nach, worum es bei einem 
Code Review geht... Du scheinst nicht zu wissen, was das ist, oder warum 
man das macht.


> Nenne doch bitte mal einen(!) Fehler. Ein Fehler ist dann gegeben,
> wenn das Programm die beschriebene Funktionalität nicht erfüllt.

Dafür bräuchte man erst mal 'ne Beschreibung / Spezifikation der 
Funktionalität. Was ist die Funktionalität? Wie krieg' ich möglichst 
schnell Corona? :D

: Bearbeitet durch User
von 2aggressive (Gast)


Lesenswert?

OT und SCNR
"Schlechter Anfänger-Stil" - selten über eine Frechheit so gestaunt.-(

Pat B. schrieb:
>> Nenne doch bitte mal einen(!) Fehler. Ein Fehler ist dann gegeben,
>> wenn das Programm die beschriebene Funktionalität nicht erfüllt.
>
> Dafür bräuchte man erst mal 'ne Beschreibung / Spezifikation der
> Funktionalität. Was ist die Funktionalität?
Wenn Unfreundlichkeit nicht reicht, dann muss man eben unsachlich 
werden, oder wie???
Die Funktionalität ist doch damals im Eröffnungspost beschrieben, hat 
was mit Spass und Geselligkeit zu tun. Beim Thema Unterhaltung scheinst 
du wohl ein Anfänger zu sein, aber immerhin sportlich; taugen doch deine 
Kritiksel dazu die Leute zum weglaufen zu animieren.
Naja, wer will in Zeiten von Corona schon Freunde. Geht besser ohne, 
gell?


@Falk: jetzt haste es endlich mal schriftlich: Anfänger!
Im Header: Keine Lizenz, keine Version, kein Author, kein Datum... 
hättest du dort mal besser "Vorsicht Anfänger" reingeschrieben, die 
Eliteprogrammierer dieser Welt (also die besten der besten der besten) 
hätten dich mit Bier aufgewogen :D

von Pat B. (pat_b)


Angehängte Dateien:

Lesenswert?

2aggressive schrieb:
> hätten dich mit Bier aufgewogen :D

ja manchmal läuft es eben dumm hier. anders als man denkt. da hilft nur 
noch das getränk im anhang! und viel davon! :D

na hoffen wir mal dass das falk-beispiel einige mal zum nachdenken 
anregt hier, wie man miteinander umgeht und wie nicht.

> Naja, wer will in Zeiten von Corona schon Freunde. Geht besser ohne, gell?

neeee, geht besser mit corona - ich sage mal:

"lieber das corona-bier, als freunde bei mikrocontroller hier" :D

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Falk B. schrieb:
> Damit sind die Platinen leider etwas tuerer geworden. Es gibt nur
> UNBESTÜCKTE Platinen a 3 Euro + 2 Euro Versandkosten. Wer welche haben
> will schreibt eine PM an mich mit seiner Postanschrift. Zahlung per
> PayPal bevorzugt, ggf. auch Überweisung.

 7 Platinen sind noch verfügbar.

Wer will, wer will, wer hat noch nicht?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.