Dieser Beitrag müsste unter ihrem kritischen Standpunkt sicher als genauso "überflüssig" bewertet werden wie der meine....
Derart belehrt, werde ich mich nun der "Hausübung" widmen und mit eiserne Anstrengung daran arbeiten diesen Beitrag ad absurdum zu führen, um eines Tages einmal wie unserer Freund einmal behaupten zu können: " Ich bin ein Selfmade-man und habe alles alleine gemacht"
In aller Deutlichkeit: Dies ist keine privates Anliegen, sondern vielmehr ein öffentliches ersuchen nach Hilfe, Rat und Synergie in der Gemeinschafft. Wer konstruktives Beitragen kann, sei drum gebeten seinen Senf dazuzugeben.
Klare und offene Darstellung der Aufgabe und des erwarteten Zieles
Auf "Einklagen" der Lösung verzichten (jede Hilfe hier ist freiwillig!)
Den eigenen Einsatz erkennbar aufzeigen (bestätigt Helfende darin, dass sie nicht einfach "benutzt" werden)
Regeln des Forums lernen und anwenden (vereinfacht die Lesbarkeit und Hilfestellungen)
Und hier die längere Ausführung:
Nun, wenn "konstruktiv" bedeutet "Bitte nur melden, wer meine Aufgabe für mich erledigt.", dann ist dieses Forum (und auch kein mir bekanntes anderes) nicht der richtige Ort für Anfragen ...
Das gilt um so mehr, wenn der Sinn einer Aufgabe darin besteht, sich selbst Kenntnisse und Fertigkeiten zu erarbeiten oder deren Stand durch eigene Leistung nachzuweisen. Wer mit erkennbar eigenem persönlichen Einsatz und ohne die Erwartungshaltung, dass einem geholfen werden muss, an die Sache herangeht, hat große Chancen hier fündig zu werden.
Tatsächlich haben diverse Forenteilnehmer unter dem Gesichtspunkt "Hilfe zur Selbsthilfe" bereits einige Beiträge geliefert! Was dabei u.U. zu Verstimmungen führt, ist die Tatsache, dass man als Antwortender nicht unbedingt den Kenntnisstand der Anfragenden kennt und diese mit - aus eigener Sicht ausreichenden - Hinweisen nicht erreicht ... Eine ausführliche Zielgruppen/personen-Analyse ist im Forum nicht vorgesehen
Wenn die hilfesuchende Person dann verärgert reagiert und/oder scheinbar oder auch offensichtlich wenig eigenen Einsatz zeigt, ist dies nicht unbedingt zielführend.
Hält man sich daran (siehe "Kurzer Sinn" oben), ist das zwar auch keine Garantie für eine Lösung, aber zumindest braucht man sich selbst nichts vorwerfen lassen.
Wenn ich mein Leben von irgendeiner Technik abhängig mache, sei es im Auto, mit dem Motorrad oder im Flieger, dann möchte ich dass die Techniker verstanden haben, was sie da tun.
Wenn diese aber zu doof oder zu faul sind, um sich die Kenntnisse zu erarbeiten, sich durch die Prüfung mogeln, dann sehe ich schwarz.
Deshalb ist die Anfrage möglicherweise "ein öffentliches" Ersuchen [also quasi im öffentlichen Interesse] ?!?
Dies ist keine privates Anliegen, sondern vielmehr ein öffentliches ersuchen
Das wäre doch mal eine Geschäftsidee: Statt "teure" Entwickler mit fachlicher Qualifikation und ständiger Fortbildung einzustellen und zu bezahlen, das Produkt einfach in Foren entstehen lassen ... Rechtsanwälte könnten sich dann noch mit der Haftungsfrage ein wenig Geld verdienen: Wer ist der Inverkehrbringer, die postende Person ?
Vielen Dank für die Rückmeldung. Ich muss dann rückblickend doch eingestehen, dass meine Anfrage ein wenig flapsig formuliert war und dass ich zum nächsten Beitrag besserung gelobe bzw. beitrage...
Es freut mich, wenn mein Post seinen Zweck auf diese Weise erfüllt hat! Wir sollten in der Sache hart diskutieren können, dabei aber immer menschlich verträglich miteinander umgehen.
@paulpaulson hat in seinem Post (Nr. 3) schon Hinweise gegeben, wie man die Aufgabe angehen kann. @noiasca konkretisiert das dann in Post Nr. 15, mit loop() und setup().
Nichts bleibt besser im Kopf für die Zukunft hängen, als wenn man eine solche Aufgabe (durchaus mit kleinen Hinweisen Dritter) aber ansonsten weitgehend selbstständig löst.
Mein Tipp: Anfangen, Zwischenergebnisse erarbeiten und posten und dann erklären, wo Du "hängen" bleibst. Dann gibt es bestimmt schnell wieder einen Anschub aus der Community.
Vielleicht
Als erstes die Datenblätter der Komponenten zusammensuchen und das Zusammenwirken der Teile in der Schaltung nachvollziehen
Danach die Software
einmal auf die Zusammenhänge mit den Komponenten untersuchen (z.B. die binären Balken-Konstanten und die Ziffern/Buchstaben-Variablen in der Software und die Ansteuerleitungen zu den 7-Segment-Anzeigen in der Hardware, z.B. die Jumperpins in der Software und dann in der Hardware)
und im weiteren darauf, wo die Konstanten in der Software verwendet werden und wann, wo welche Auswirkungen sie dann auf die Hardware oder den Programmablauf haben .
Dabei nicht unbedingt versuchen, alle Modi auf einmal zu verstehen, sondern stumpf eine Jumperkombination annehmen und durch die Tiefen der Software verfolgen. Hat man das geschafft, ist der Rest (i.d.R.) nur noch "Arbeit"
wobei ich es schon fast amüsant finde: es sind ein paar nette Ansätze drinnen oder Sachen die ich in meinen Libs ähnlich mache und dann wieder Sachen wo man denkt, alter - welcher Held hat das zusammengekleistert...
Wenn man nur die Arduino IDE hat, würde ich es in Notepad++ öffnen, Language C++ wählen dann kann man mit der Function List leichter durch den Code navigieren. Geht aber auch mit Arduino und etwas scrollen...
Das Coding ist für mich absolutes Neuland, wesshalb ich mich fürs Predboard enschieden habe.
Die Versuche die ich bisweilen machen konnte, lassen folgenden Schluss zu:
Bei der Schaltung handelt es sich um eine Art Stoppuhr für die Tartanbahn.
Die Baugruppe A1 ist eine Sensorgruppe mit Gabellichtschranken T7, T8, T9, welche zur genauen Erfassung der Start-, Zwischen- und Endzeit dient. Die Gabellichtschranken werden über einen PNP versorgt, wobei sich der Strom zwischen 32-6 mA über das Poti R5 einstellenlässt. Die Ausgangssignale der Gabellichtschranken werden mit Hilfe eines Spannungskomperators K 1.1-1.3 und eines Impedanzwandlers K 1.4 (Anpassung der Schaltschwelle über Poti R23 3,6 - 6,73 V ) auf die analogen Eingänge des Arduino Uno ausgegeben.
Eine weitere Baugruppe A2 umfasst ein Anzeigeelement mit 4 X 7-Segmentbausteinen mit einem gemeinsamen Anschluss für die Betriebsspannung. Der serielle Code zur Steuerung der Betriebspannung geht über die digitalen Ausgänge 5 u. 6 auf einen Demux. Hierrüber wird das serielle Signal nun paralell ausgegeben und Steuert in einem durch den Code festgelegten Takt die Basis weiterer PNP Transistoren an, welche hier als Schalter für die gemeinsame Betriebsspannung der 7-Segmente verwendet werden.
Die Segmente sind in Reihe geschaltet und werden über ein Darlington-Array betrieben bzw. nach Masse geschaltet, wenn a) Betriebsspannung anliegt und b) die digitalen Pins des Ardunio (7-13) durchschalten. Die stetige Wechselwirkung dieser zweier Takte, sorgt dafür, dass der maximale Strom gering bleibt, da nie alle Segmente gleichzeitig leuchten. Für das menschliche Auge, erscheinen die Zahlen fortlaufend und können daher ohne Probleme erfasst werden.
Allgemein lassen sich Drei bzw. Vier Unterschiedliche Betriebsmodi festhalten, die durch den Wechsel der Jumper XJ1 und XJ2 veränderbar sind. Ich fasse Sie einmal wie folgt Zusammen:
Falls jemand die Wechselwirkungen der Segmentanzeigen anzeigen genauer erläutern kann, beziehungsweise deren Wechselwirkung mit dem Programmcode, würde ich mich sehr freuen.
Für die komplette Auswertung habe ich keine Zeit, aber gerne ein paar Tipps:
Die Balken der 7-Segment-Anzeigen sind wie folgt durch"nummeriert":
Die Inhalte der vier 7Segment-Anzeigen selbst sind mit i = 0 ... 3 in dem Array Anzeigen[i] gespeichert und werden von dort in der Routine "Multiplexen()" und im einzelnen dann in "SetzeSegmente()" regelmäßig gesetzt.
Die über die Jumper vorwählbaren Modi sind dann wie folgt zu lesen (hier nur an einem Beispiel):
void Modus03() {
Anzeigen[0] = 0; // Setzt den Wert der ersten 7Segment-Anzeige auf Null
Anzeigen[1] = Akt_LS1 ? a_Balken : d_Balken; // Schaltet Balken a ein, wenn LS1 aktuell true liefert, sonst Balken d
Anzeigen[2] = Akt_LS2 ? a_Balken : d_Balken; // wie oben, jedoch für LS2
Anzeigen[3] = Akt_LS3 ? a_Balken : d_Balken; // wie oben, jedoch für LS3
if (!Akt_LS1 && !Akt_LS2 && !Akt_LS3 && StartTaste) {
Modus = 1; // Wenn die LS1 bis LS3 alle im Zustand "false" sind und zugleich die StartTaste im Zustand "true" dann wechsele in den Modus 1
}
}