Wie sag ich dem Arduino was falsch und richtig ist(Kabeltester)?

Hallo, ich habe ein Problem. Ich möchte Y-Verdrahtungen ermöglichen aber wie sag ich dem Arduino ob etwas richtig oder falsch Verdrahtet ist bei einer variierender Eingabe. Bisher erkennt er schon Fehlverdrahtungen aber noch keine Y-Verdrahtung die so richtig sein sollen. Ich muss das ganze bis Freitag fertig haben und brauche dringen Hilfe, Befehl von ganz oben :frowning: .

Wenn alles klappt sollte sollte der Sketch in der TXT Datei und Bilder zu sehen sein
Die Bilder sollen das ganze nur ein bisschen Veranschaulichen:

Kabeltester.txt (11.1 KB)

(deleted)

Hay Peter,
hab das ganze mit deiner Anleitung probiert aber ich bekomm die Fehlermeldung nicht weg:
Deswegen auch die txt datei

The message has the following error or errors that must be corrected before continuing:
The message exceeds the maximum allowed length (9000 characters).

Es kann aber gut sein, dass das Ganze nicht geht, weil ich im Firmennetzwerk bin. Wäre meine Überbelegung. Ich kann von hier keine Bilder hoch laden. Jedoch von zu Hause. Sollte eigentlich nicht daran liegen aber was anderes scheint mir nicht plausibel. Bin auch auf dem Laptop hier Administrator.

Warum suchst Du nicht mal im Forum nach "Kabeltester", da wird fast jeden Monat ein neuer durchdiskutiert.

Trenne erst mal die Funktionalität vom GUI, dann läßt sich das Programm viel leichter analysieren.
Und verzichte auf tone(), das macht die Sache nur komplizierter.

Und wenn es immer noch Probleme gibt dann beschreibe bitte, wie Du testest und welche Fehler festgestellt werden sollen.

Hallo,
der Sketch stammt doch nicht von Dir, das erkennt man an Deiner Fragestellung. Dann Frage doch den der den Sketch geschrieben hat der kann Dir sicher besser erklären wie die Messung funktioniert und wie DU das Erweitern kannst.

Heinz

Doch doch wir sind ein Team aus 2 Azubis und haben den zusammen geschrieben.

Dr. Dietrich: was würdest du anstatt von tone nehmen um eine Frequenz zu erzeugen. Die Frequenz ist allein dafür da um schlechte Verbindung(wackler, kalte Lötstellen, Kabelbrüche) zu prüfen und zu erkennen.

Ansich funktioniert ja auch das mit der Y-Verdrahtung. Wir sind daran beide verzweifelt haben auch mehrere Kabeltester aus dem Forum ausprobiert. Daher kommt ja auch die Idee des Kabeltesters. Ich schau natürlich auch immernoch nach solchen codes.

Wackelkontakte findet man nur durch Wackeln an den Kabeln, nicht durch eine Frequenz. Deshalb reicht es normalerweise, alle Pins auf INPUT_PULLUP zu schalten und nur einen als Ausgang auf 0 zu legen. Dann kann man ablesen, an welchen Pins eine 0 herauskommt, die sind dann mit dem Ausgang verbunden.

wenn du 1toN Verbindungen erkennen möchtest und du einen "Sollzustand" vorgeben möchtest,
würde ich für jeden Eingang definieren mit welcher Ausgang er Verbunden werden soll.

bei 16 pins reicht ja sogar eine 2 Byte variable wo du die entsprechenden bits setzt

z.B. wenn ein Eingang mit Ausgänge 2 und 3 verbunden sein soll

0b0000000000000110

Kannst auch schön verknüpfen wenn du es nicht binär schreiben willst:

sollzustand[0]= bit(2) | bit(3);

das für jeden Eingang separat, daher am besten ein Array dann kannst du schön durch iterieren.

Messen,
übprüfen ob es gesetzt sein soll oder nicht
Meldung ausgeben

Hallo “jiggijaggajuggujesse”,

wenn ich mir mal eine Anmerkung zu so einem Usernamen erlauben darf:
Das macht den Eindruck “ganz schnell etwas in die Tastatur gehackt - weil man ganz schnell das erste Posting absetzen will”

Das Programm sieht ja schon ganz ordentlich aus.
Ihr habt auch Kommentare eingefügt. Das ist gut. Noch besser als Kommentare sind selbsterklärende Namen
Beispiel

int x = 0; //Variable zum "erinnern" der Tasterstellungen;
int z = 0; //Variable zum Reseten von Taster und Anzeigeleuchte
int TasterStellung = 0; 
bool ResetAll; 
const byte gedrueckt = LOW;

und dann erklären sich code-Zeilen selbst ohne dass man noch einen Kommentar braucht

  if (digitalRead(Taster) == gedrueckt && ResetAll == false) {
    digitalWrite(LEDtestlaeuft, LOW);
    ResetAll = true;
  } else {
    delay(10);
  }

Keine Ahnung ob die Logik jetzt so rum oder genau entgegengesetzt sein soll.
Wenn du einen Variablennamen wie “z” im Programm mit der Suchen-Funktion finden willst dann bekommst du 200 Fundstellen. Weil z nun mal ganz oft in allen möglichen Worten vorkommt

Beispiel
void setOutputPin(byte pinNumber) { //Zu testende Leitung wird ausgewählt
// Zuerst in einer Schleife alle Pins auf INPUT_PULLUP setzen
for (int i = 0; i < sizeof(pinsKabelAnfang); i++)

Y-Kabel heißt ein einzelner Kontakt an einem Ende ist mit zwei Kontakten am gegenüberliegenden Ende verbunden
Das ergibt bestimmte Bitmuster Wenn am “Eingang” an bestimmten Stellen Spannung angelegt wird dann soll an bestimmten “Ausgängen” Spannung anliegen an anderen nicht. Und das wird geprüft.
Wenn ihr den bisherigen code einfach von irgendwoher übernommen habt ohne zu verstehen wie er funktioniert
dann ist jetzt der Zeitpunkt gekommen genau das zu tun. Und ob du es glaubst oder nicht als Hobbyprogrammierer der seit 35 Jahren mal mehr mal weniger programmiert nehme ich mir zum analysieren Papier und Bleistift
zeichne mir das Y-Kabel auf benenne die ganzen Ein/Ausgänge und schaue mir an wenn man da am Eingang Spannung anlegt dann sollte an den und den Ausgängen Spannung anliegen und an den anderen nicht.
Und daraus ergibt sich dann welche Bits am “Eingang” gesetzt werden und welches Bitmuster am “Ausgang” ermittelt werden soll.

Als Pseudo_code
EingangsBitMuster1 an Eingänge “anlegen” Bitmuster am Ausgang in Variable speichern
Ist-Bit-Muster mit Soll-AusgangsBitmuster1 vergleichen.

vgs

Vielen Dank für die hilfreichen Kommentare. Jetzt haben wir auch einen Ansatz wohin wir gehen müssen, das ist genau das was ich wollte.

So nun zu der Aussage das das nicht unsere Programm wäre:

  1. Wir sind Azubis und haben gerade das erste Lehrjahr geschafft. Diese Aufgaben hatt uns unser Betrieb erteilt und ich denke jeder der einmal Azubi war freut sich über Hilfe.

  2. Dieser Code ist das erste was wir programmiert haben mit der Arduino IDE und das innerhalb von ca 2Wochen. Es fing an bei der Geräte Planung bis hin zur Konstruktion und zur Programmierung. Es wäre schön jemanden zu fragen der den Code geschrieben hätte aber außer meine Partnerin gibt es da keinen. Ich wäre doch blöd wenn ich nicht den Entwickler des Codes gefragt hätte.

  3. In jeder Frage die ich hier gestellt haben kommt irgendwer an beschimpft oder beleidigt einen. Schön das nur die wenigsten sehen das hinter dem PC auch noch Menschen sitzen. Und wenn ich sowas sehe wie aus meinem Namen könnte man irgendwas herauslesen da Platz mit glatt der Kragen. Ist jetzt blöd das das eh vom Moderator gelöscht wird aber die die denken sie wären was besseres, weil sie mehr wissen und Erfahrung haben sollten sich schämen. Ich bin mir sicher das es nicht Sinn und Zweck dieses Forums ist auf den unwissenden drauf rum zu hacken, oder?

Ich danke allen, die sich von diesem Teil der Leute im Forum abheben und einen wirklich behilflich sind. Tut mir leid wenn die, die wirklich der Community helfen sich jetzt auch angegriffen fühlen

MfG

Von einem Azubi wird wohl kaum verlangt, daß er das Rad völlig selbständig neu erfindet. Zumindest ist es zielführender wenn man ihm beibringt, wo und wie er nach Lösungen für seine Aufgaben suchen kann, z.B. hier im Forum.

Ich kann nicht sagen wo wir arbeiten aber das war unsere Projekt Aufgabe:
Zwischendurch haben sich manche Aufgabenstellungen erweitern aber das war die Grundlage.
Ich mein Arduino kommt ja auch noch in der Schule dran aber erst im nächsten Jahr.

Hallo,

ich wollte Dich nicht irgendwie angreifen, es war schon ernst gemeint. Nicht zuletzt geht es ja auch um die Frage der Messmethode, wie Du ja aus dem Thema "Ton" ja, nein bereits festgestellt hast. Geht es um die Messug einer ohmischen Verbindung oder sollen kapazitive Widerstände ebenfalls gemessen werden. Da gehe ich jetzt jedoch nicht von aus. Also einen Ansatz von mir.

Laut Deiner Aufgabenstellung geht es ja um den Test von Konfektionierten Kabel 1:1 . Test einer ohmschen Verbinung von Leitung 1 und keine Verbindung zu den übrigen 9 Leitungen. Also Ausgang 1 auf H schalten dann muss Eingang1 ein H erkennen , alle übrigen Eingänge müssen L sein. Dann Ähnliches für Ausgang 2 usw. Das kann in einer verschachtelten Schleife ablaufen. Wenn ein Fehler erkannt wir kann man über die Scheifenvariablen erkennen bei welcher Leitung das passiert ist. Ausgänge nacheinander auf H schalten , Eingänge abfragen. Die Auswertung erfolgt mittels logischer Verknüpfungen.

Wenn jetzt zusätzich eine Y Verdrahtung dazu kommt gibt es letzlich ebenfalls je Leitung einen Ausgang jedoch zwei Eingänge. Wenn Ausgang 1H ist muß der Eingang 1a H sein und der Eingang 1B ebenfalls. Zusätzich darf kein andere Eingang ein H Signal haben.

obiges Schleifen-Konstrukt könnte man also durch eine Abfrage der Eingänge 1A bzw 1B erweitern. Abfrage auf falsch oder richtig erfolgt wieder mittels logischem AND . siehe #1

Programmtechnisch würde ich die Ausgänge und Eingänge in Array´s anlegen, aber das habt Ihr ja schon so gemacht.

Nu erlaube mir noch eine Anmerkung.

Bei solchen Projektarbeiten geht es ja nicht zuletzt auch darum ob der Kandidat die Aufgabenstellung verstanden hat, ist sein Lösungsansatz richtig , und wie wird der Ansatz umgesetzt. Ist die Lösung praxistauglich. Zusätzlich gibt es dann die Möglichkeit von Fleißpünktchen. Letztlich gibt es eine Bewertung und da wir der Bewertende sich an diese oder ähnliche Kriterien halten und jeweils werten.

Zudem werden hier auch Lehrer und Ausbilder mitlesen, insofern kann es für einen Kandidaten ehr kontraproduktiv sein wenn er hier fertige Lösungen bekommt.

Heinz