Hallo, ich bin dabei einen Sketch zu kürzen. Ich weiß bloß nicht genau was fehlt. Vorweg die Funktion. Eingang 1, schaltet Ausgang 1 Eingang 2, schaltet Ausgang 2 Eingang 3, schaltet Ausgang 3 Eingang 4, schaltet Ausgang 4 Eingang 5, schaltet Ausgang 5 Eingang 6, schaltet Ausgang 6 Ist der Eingang HIGH, dann Ausgang HIGH - Ist der Eingang LOW, dann Ausgang LOW Anfangs hatte ich alle Ein/Ausgänge deklariert und 6 variablen genutzt(viel Tippen und kopieren). Fuktionierte ohne Probleme. Dann hatte ich die Überlegung, dass man es bestimmt mit einer for-Variable genau so lösen könnte. Und da ist das Problem. Was fehlt hier noch? Danke für die hilfe. const int TaPin[6] = {8,9,10,11,12,13}; //Eingang festlegen const int LEDPin[6] = {2,3,4,5,6,7}; //Ausgang festlegen void setup() { Serial.begin(9600); for (int i = 0; i<6; i++) // Von 1 bis 6 { pinMode(TaPin[i], INPUT); // Eingang zuordnen pinMode(LEDPin[i], OUTPUT); // Eingang zuordnen } } void loop () { for (int i = 0; i<6; i++) // { if (TaPin[i] == HIGH ) // Taster 1-6 { digitalWrite(LEDPin[i], HIGH); // Ausgang 1-6 } else { digitalWrite(LEDPin[i], LOW); } } }
1 | void loop () |
2 | {
|
3 | for (int i = 0; i<6; i++) |
4 | {
|
5 | digitalWrite(LEDPin[i], TaPin[i]); |
6 | }
|
7 | }
|
Addi S. schrieb: > Ist der Eingang HIGH, dann Ausgang HIGH - Ist der Eingang LOW, dann > Ausgang LOW Wie sieht denn Deine Schaltung /Schaltplan aus?
Danke für die Antwort, ich nutze einen Ardoino Uno und nutze die Digitalen Ports auf dem Board. Als Eingangssignale nutze ich Lichtschranken von Fischertechnik/Selbstgebaute mit Fotodioden(nur 1 oder 0 Signal). Pinbelegung: Pin 2-7 Ausgang Pin 8-13 Eingang Der Schaltplan ist nicht Falsch, da bin ich im ziemlich sicher. Lichtschranke auf Eingang. Ausgang auf Relais. Es lief ja vorher mit dem anderen Code.
Addi S. schrieb: > Der Schaltplan ist nicht Falsch, da bin ich im ziemlich sicher Na, dann muss es ja auch funktionieren ;-)
lass' mal das "const" bei den array deklarationen weg.
:
Bearbeitet durch User
Den Code, den ich hier reingestellt habe (siehe oben) ist die gekürzte Version, die momentan leider noch nicht Funktioniert. Der vorherige Code (funktionsfähig) besteht aus 6 Variablen und viel Text, die ich nun einsparen möchte.
Addi S. schrieb: > if (TaPin[i] == HIGH ) // Taster 1-6 Fehlt da nicht ein DigitalRead() oder so was ähnliches?
Dieter F. schrieb: > Joe F. schrieb: >> lass' mal das "const" bei den array deklarationen weg. > > Warum? Weil const manchmal (Un-)Variablen in den Programspace verschiebt, was u.U. Probleme machen kann. Es war nur als Versuch gemeint, vermutlich macht es keinen Unterschied. Leo C. hat den echten Fehler ja entdeckt. Ist mir auch durch die Lappen gegangen. Nachtrag: Besser wäre natürlich sowieso, den ganzen 8-Bit Port auf einmal umzukopieren. Das sieht das Ardouino-Universum aber vermutlich nicht vor...
1 | PORTD = (PORTB)>>2; |
:
Bearbeitet durch User
Joe F. schrieb: > Das sieht das Ardouino-Universum aber vermutlich nicht vor... > PORTD = PORTB; Besser :-P
1 | PORTD = PINB; |
2 | //
|
:
Bearbeitet durch User
Joe F. schrieb: > Weil const manchmal (Un-)Variablen in den Programspace verschiebt, was > u.U. Probleme machen kann. Wenn er nur liest (lt. Code-Strecke) sehe ich da kein Problem. Wenn er aber nicht den kompletten Code zeigt - bzw. den "bisher funktionierenden" Code auch nicht zeigt und seine Schaltung / seinen Schaltplan nicht offen legt - ist ihm nur schwer zu helfen.
Oh man, danke... Es funktioniert. Gibt es sonst noch Optimierungsbedarf? Ich weiß wohl das ich mit dem Beschreiben // noch Probleme habe. Bin noch nicht so lange mit dem System vertraut. Der Code lautet nun wie folgt: int TaPin[6] = {8,9,10,11,12,13}; //Eingang festlegen int LEDPin[6] = {2,3,4,5,6,7}; //Ausgang festlegen void setup() { Serial.begin(9600); for (int i = 0; i<6; i++) // Von 1 bis 6 { pinMode(TaPin[i], INPUT); // Eingang zuordnen pinMode(LEDPin[i], OUTPUT); // Eingang zuordnen } } void loop () { for (int i = 0; i<6; i++) { int va1_1=(digitalRead(TaPin[i])); if (va1_1 == HIGH) { digitalWrite(LEDPin[i], LOW); } else { digitalWrite(LEDPin[i], HIGH); } } }
Dieter F. schrieb: > und seine Schaltung / seinen > Schaltplan nicht offen legt Braucht man nicht immer. Schon gar nicht als 2 MB Foto vom Steckbrett mit 50 wilden Kabeln... ;-)
:
Bearbeitet durch User
Addi S. schrieb: > Gibt es sonst noch Optimierungsbedarf? Tasten-Entprellung? Aber das ist in der Arduino-Fraktion verpönt :-)
Dieter F. schrieb: > Matthias S. schrieb: >> PORTD = PINB; > > Was ist daran besser? Och, Eingänge liest man besser aus dem PIN Register als aus dem PORT Register - nur deswegen :-)
Dieter F. schrieb: > Tasten-Entprellung? Aber das ist in der Arduino-Fraktion verpönt :-) Fand ich jetzt nicht nötig für die Lichtschranken. Der 10K Widerstand ist jeweils verbaut.
Addi S. schrieb: > Es funktioniert. Gibt es sonst noch Optimierungsbedarf? ja
1 | void setup() |
2 | {
|
3 | DDRD = DDRD | B11111100; |
4 | DDRB = 0; |
5 | Serial.begin(9600); |
6 | }
|
7 | |
8 | void loop () |
9 | {
|
10 | PORTD = PINB << 2; |
11 | }
|
Matthias S. schrieb: > Dieter F. schrieb: >> Matthias S. schrieb: >>> PORTD = PINB; >> >> Was ist daran besser? > > Och, Eingänge liest man besser aus dem PIN Register als aus dem PORT > Register - nur deswegen :-) Liest Du auch den bezogenen Post?
@Autor: Joe F. (easylife) @Autor: Dieter F. (jim_quakenbush) @Autor: Matthias S. (Firma: matzetronics) (mschoeldgen) Ich danke euch für eure Hilfe. Wenn ihr klären wollte was nun besser ist von wegen: Matthias S. schrieb: > Dieter F. schrieb: >> Matthias S. schrieb: >>> PORTD = PINB; >> >> Was ist daran besser? Bitte ich euch ein neues Topic zu erstellen. Mein E-Mail Konto explodiert gleich, Danke.
Addi S. schrieb: > Bitte ich euch ein neues Topic zu erstellen. > Mein E-Mail Konto explodiert gleich, Danke. Dann machst etwas falsch - gerne ...
Dieter F. schrieb: > Addi S. schrieb: >> Bitte ich euch ein neues Topic zu erstellen. >> Mein E-Mail Konto explodiert gleich, Danke. > > Dann machst etwas falsch - gerne ... Dann klärt mich bitte auf, tut mir leid. Dachte das wäre etwas Abseits von meinem Thema.
Addi S. schrieb: > Dann klärt mich bitte auf, tut mir leid. Dachte das wäre etwas Abseits > von meinem Thema. https://www.arduino.cc/en/Reference/PortManipulation
Addi S. schrieb: > Dann klärt mich bitte auf, tut mir leid. Dachte das wäre etwas Abseits > von meinem Thema. Deinen Account muss man sich wohl merken müssen ... :-) Addi S. schrieb: > Und da ist das Problem. > Was fehlt hier noch? > Danke für die hilfe. Welches Thema - wenn Du uns wesentliche Veränderungen nicht transparent machst, wie soll Dir dann qualifiziert geholfen werden? Natürlich wird auch über "Randbedingungen" diskutiert. Interessant ... würde Spock sagen ...
Dieter F. schrieb: > Addi S. schrieb: >> Dann klärt mich bitte auf, tut mir leid. Dachte das wäre etwas Abseits >> von meinem Thema. > > Deinen Account muss man sich wohl merken müssen ... :-) > Ich hoff das ist jetzt nicht negativ gemeint.... Den link werde ich mir genauer zuführen lassen, danke. https://www.arduino.cc/en/Reference/PortManipulation Ansonsten ist für mich im Moment alles geklärt, bin wie gesagt noch nicht so in der Materie.
Dieter F. schrieb: > Tasten-Entprellung? Aber das ist in der Arduino-Fraktion verpönt :-) Woher weisst du, dass die LEDs nicht den direkten Zustand der Eingänge wiederspiegeln sollen, sondern einen gefilterte?
Wolfgang schrieb: > Woher weisst du, dass die LEDs nicht den direkten Zustand der Eingänge > wiederspiegeln sollen, sondern einen gefilterte Di weißt, dass Tasten üblicher Weise prellen?
Dieter F. schrieb: > Liest Du auch den bezogenen Post? Dieter F. schrieb: > Di weißt, dass Tasten üblicher Weise prellen? Anscheinend liest du nicht so alles. Es sind gar keine Taster am Arduino, sondern Lichtschranken: Addi S. schrieb: > Als Eingangssignale nutze ich Lichtschranken von > Fischertechnik/Selbstgebaute mit Fotodioden(nur 1 oder 0 Signal).
Matthias S. schrieb: > Es sind gar keine Taster am > Arduino, sondern Lichtschranken: Ja, dann schreibe ich LiSchraPin statt TaPin oder synonym ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.