Moin Miteinander, seit längerem versuche ich Schaltbefehle mit mehr als einer LED anzeigen zu lassen. Bisher habe ich es nur mit 2 LED´s geschafft.Aber ich komme dabei nicht weiter um mehr als nur über 2 LED´s anzeigen zulassen.Davon ist die erste LED dir Interne beim Nano.
MfG
Crazydiver
const int absetzenPin = 2;// die Nummer des Schalterpins
const int aufnahmePin = 3;
const int sabfragePin = 4;
const int LED1 = 13; // die Nummern der LEDpins
const int LED2 = 12;
int absetzenStatus = 0; // Variable für das Lesen des Schalterstatus
int aufnahmeStatus = 0;
int sabfrageStatus = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(absetzenPin, INPUT);
pinMode(aufnahmePin, INPUT);
pinMode(sabfragePin, INPUT);
}
void loop() {
absetzenStatus = digitalRead(absetzenPin);
if (absetzenStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}
aufnahmeStatus = digitalRead(aufnahmePin);
if (aufnahmeStatus == HIGH) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}
sabfrageStatus = digitalRead(sabfragePin);
if (sabfrageStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}}
Auch mir ist nicht klar, was Du eigentlich möchtest und Deinen Code habe ich erst gar nicht gelesen (schon weil er nicht in Code-Tags steht). Beschreibe bitte etwas genauer, was Du erreichen möchtest und setze Deinen Code in Code-Tags.
du musst dir Funktionen bauen zum einfacheren Umgang, Erweiterungen und Änderungen.
Letztlich baust du dir einen endlosen Automaten. Danach kannste googeln, gibt auch hier viel zu dem Thema.
Ein Bsp. für Steuerzustände.
typedef enum { nichts, absetzen, aufnehmen, abfrage
} states;
states Schaltzustand = nichts;
void setup() {
}
void loop() {
LED_Anzeige();
}
void LED_Anzeige ()
{
switch (Schaltzustand) {
case nichts: alle LEDs aus; break;
case absetzen: 1. LED an, andere aus, what ever; break;
case aufnehmen: 2. LED an, andere aus; break;
case abfrage: 3. LED an, andere aus; break;
default: alles aus; break; // sollte nicht passieren
}
}
Warum das auch funktioniert, darüber kannse dich mal schlau machen ... und testen, probieren ...
case 0: alle LEDs aus; break;
case 1: 1. LED an, andere aus; break;
case 2: 2. LED an, andere aus; break;
case 3: 3. LED an, andere aus; break;
Falls Du mehr LEDs haben möchtest, dann nimm doch eine LED pro Statusvariable, dann reicht jeweils sowas wie
digitalWrite(absetzenPin, absetzenStatus);
Dann reicht es, nur bei einer Änderung der Variablen auch die zugehörige LED zu ändern. Siehe StateChangeDetection Beispiel, oder was auch immer Du zum Entprellen der Schalter benutzen möchtest.
Moin Miteinander,also nochmal damit alle es verstehen.Es sind 3 Schaltbefehle in dem Sketch,kann dies aber nur über 2 LED`s anzeigen lassen. Möchte aber das es 3 LED´s werden
MfG
Crazydiver
#include <Servo.h>
const int absetzenPin = 2;// die Nummer des Schalterpins
const int aufnahmePin = 3;
const int sabfragePin = 4;
const int LED1 = 13; // die Nummer des LEDpins
const int LED2 = 12;
//und zwar hier
int absetzenStatus = 0; // Variable für das Lesen des Schalterstatus
int aufnahmeStatus = 0;
int sabfrageStatus = 0;
Servo pumpe;
Servo stellzylinder;
Servo scherenheber;
Servo sicherungsstangen;
Servo druecker;
Servo fuehrungsstangen;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(absetzenPin, INPUT);
pinMode(aufnahmePin, INPUT);
pinMode(sabfragePin, OUTPUT);
pumpe.attach(A0);
pumpe.write(7);
stellzylinder.attach(A1);
stellzylinder.write(90);
scherenheber.attach(A2);
scherenheber.write(90);
sicherungsstangen.attach(A3);
sicherungsstangen.write(90);
druecker.attach(A4);
druecker.write(90);
fuehrungsstangen.attach(A5);
fuehrungsstangen.write(90);
}
void loop() {
absetzenStatus = digitalRead(absetzenPin);
if (absetzenStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
pumpe.write(35);
fuehrungsstangen.write(90);
druecker.write(90);
stellzylinder.write(55);
scherenheber.write(70);
sicherungsstangen.write(110);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
scherenheber.write(90);
sicherungsstangen.write(90);
}
aufnahmeStatus = digitalRead(aufnahmePin);
if (aufnahmeStatus == HIGH) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
pumpe.write(50);
scherenheber.write(70);
sicherungsstangen.write(110);
druecker.write(70);
fuehrungsstangen.write(70);
delay(90);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}
sabfrageStatus = digitalRead(sabfragePin);
if (sabfrageStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
scherenheber.write(90);
sicherungsstangen.write(90);
fuehrungsstangen.write(110);
druecker.write(110);
stellzylinder.write(10);
pumpe.write(20);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}
absetzenStatus = digitalRead(absetzenPin);
aufnahmeStatus = digitalRead(aufnahmePin);
if (absetzenStatus && aufnahmeStatus == LOW) {
if (sabfrageStatus == HIGH);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
fuehrungsstangen.write(90);
druecker.write(90);
pumpe.write(7);
delay(90);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}}
Crazydiver:
... if (absetzenStatus && aufnahmeStatus == LOW) ...
Ich habe Deinen Code jetzt nur sehr schnell überflogen und bin dabei über diese Zeile gestolpert. Ich nehme an, dass Du damit meinst „wenn absetzenStatus und aufnahmeStatus LOW sind, dann ...“. Das ist allerdings nicht, was passiert. Um das zu erreichen, musst Du sowohl absetzenStatus als auch aufnahmeStatus auf LOW prüfen. Obendrein solltest Du IMO Klammern benutzen, um die Logik deutlich zu machen:
if ((absetzenStatus == LOW) && (aufnahmeStatus == LOW))
Was die Sache mit den zwei statt drei LEDs angeht: Mir ist aufgefallen, dass Du in setup() nur zwei Pins als Ausgänge definierst. Vielleicht fehlt da einfach nur ein drittes pinMode().
Gegen später gucke ich mir den Sketch noch einmal etwas genauer an, jetzt muss ich erstmal auf die Jagd und ein Brötchen erlegen.
gregorss:
Was die Sache mit den zwei statt drei LEDs angeht: Mir ist aufgefallen, dass Du in setup() nur zwei Pins als Ausgänge definierst. Vielleicht fehlt da einfach nur ein drittes pinMode().
Ups, da habe ich eine Zeile übersehen. Die ist aber auch mindestens ungünstig, weil sie IMO ungünstig „gruppiert“ ist.
Meiner Meinung nach solltest Du die Variablen verständlicher benennen und den Code deutlicher strukturieren (z. B. alle Output-Pins in aufeinander folgenden Zeilen konfigurieren und danach eine Leerzeile einfügen). Dann ist der Code wesentlich leichter zu lesen und zu verstehen. Außerdem solltest Du auch dort Klammern verwenden, wo sie vielleicht überflüssig sind. Z. B.:
if (bla==blubb)
digitalWrite(foo, bar);
digitalWrite(foo1, bar1);
und
if (bla==blubb)
{ digitalWrite(foo, bar); }
digitalWrite(foo1, bar1);
haben die gleiche Bedeutung, was man im ersten Fall aber nur versteht, wenn man weiß, dass die Klammern überflüssig sind, wenn auf ein if nur ein dazu gehörender Befehl folgt. Zwar ist die Klammer nur dann nötig, wenn sich das if auf mehrere Befehle bezieht, aber auch bei nur einem folgenden Befehl zu klammern ist syntaktisch korrekt.
Crazydiver:
Moin Miteinander, seit längerem versuche ich Schaltbefehle mit mehr als einer LED anzeigen zu lassen. Bisher habe ich es nur mit 2 LED´s geschafft.Aber ich komme dabei nicht weiter um mehr als nur über 2 LED´s anzeigen zulassen
Was hast Du an Hardware? Drei Schalter? Und drei LEDs? Und sonst noch oder war's das?
Und wie soll die Schaltlogik sein?
Beschreibe mal in Worten!
Crazydiver:
... geänderten Sketch mit 3 LED´s von die die 3te in der Version 1.7.10 nicht angeht.
Der lässt sich sehr viel besser lesen!
Wahrscheinlich ist mir auch deshalb gleich aufgefallen, dass Du den Pin für LED3 in setup() gar nicht als Ausgang definierst. Schreib' noch ein pinMode(LED3, OUTPUT); in setup(), dann sollte es funktionieren.
Soweit ein erster schneller Überflug Deines Codes. Gib Bescheid, ob es jetzt geht.
Crazydiver:
Moin Gregorss,das funktioniert nicht sonst würde ich hier nicht im Forum nach Hilfe suchen.
Dass LED3 in setup() Deines Sketches nicht als Ausgang definiert ist, ist eine Tatsache. Oder meinst Du dass schon der pinMode-Befehl nicht funktioniert?!
Moin Jurs, damit Du dich auch mal in den Sketch einarbeiten kannst,nenne ich Dir erstmal die Hardware dazu.
Es werden die ersten beiden Befehle über eine Fernsteuerung an den Arduino Nano übermittelt.Dazu nutze ich einen 3 stufigen Schalter der in jeder Position einrastet.Davon ist die Mittelstellung des Schalters ohne Belegung.Die Anschluß sind alle entprellt mit einem Vorwiderstand von 10 kOhm. Die Abfrage im Sketch , als sabfrage defeniert , wird ebenfalls über ein entprellten Reedkontakt durchgeführt. Alle Schaltzuständen werden über LED´s angezeigt ( brauche ich um eine Einstellungsanpassung der Wege für die Hydraulikventilservos vornehmen zu können ). Auf Grund dessen das das Modell mit Wasser in Kontakt kommt kann ich keine Actoren verwenden da es die noch nicht wasserdicht gibt in dem Maßstab. Anbei wirst Du auch den Sketch finden.
MfG
Crazydiver
#include <Servo.h>
const int absetzenPin = 2;// die Nummer des Schalterpins
const int aufnahmePin = 3;
const int sabfragePin = 4;
const int LED1 = 13; // die Nummer des LEDpins
const int LED2 = 12;
const int LED3 = 11; // hier ist die 3te LED hinterlegt aber funktioniert nicht bei der Version 1.7.10 !
int absetzenStatus = 0; // Variable für das Lesen des Schalterstatus
int aufnahmeStatus = 0;
int sabfrageStatus = 0;
Servo pumpe;
Servo stellzylinder;
Servo scherenheber;
Servo sicherungsstangen;
Servo druecker;
Servo fuehrungsstangen;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(absetzenPin, INPUT);
pinMode(aufnahmePin, INPUT);
pinMode(sabfragePin, OUTPUT);
pumpe.attach(A0);
pumpe.write(7);
stellzylinder.attach(A1);
stellzylinder.write(90);
scherenheber.attach(A2);
scherenheber.write(90);
sicherungsstangen.attach(A3);
sicherungsstangen.write(90);
druecker.attach(A4);
druecker.write(90);
fuehrungsstangen.attach(A5);
fuehrungsstangen.write(90);
}
void loop() {
absetzenStatus = digitalRead(absetzenPin);
if (absetzenStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED3, LOW);
pumpe.write(35);
fuehrungsstangen.write(90);
druecker.write(90);
stellzylinder.write(55);
scherenheber.write(70);
sicherungsstangen.write(110);
}
else {
digitalWrite(LED1, LOW);
scherenheber.write(90);
sicherungsstangen.write(90);
}
aufnahmeStatus = digitalRead(aufnahmePin);
if (aufnahmeStatus == HIGH) {
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
pumpe.write(50);
scherenheber.write(70);
sicherungsstangen.write(110);
druecker.write(70);
fuehrungsstangen.write(70);
delay(90);
}
else {
digitalWrite(LED2, LOW);
}
sabfrageStatus = digitalRead(sabfragePin);
if (sabfrageStatus == HIGH) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
scherenheber.write(90);
sicherungsstangen.write(90);
fuehrungsstangen.write(110);
druecker.write(110);
stellzylinder.write(10);
pumpe.write(20);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
absetzenStatus = digitalRead(absetzenPin);
aufnahmeStatus = digitalRead(aufnahmePin);
if ((absetzenStatus == LOW) && (aufnahmeStatus == LOW)) {
if (sabfrageStatus == HIGH);
digitalWrite(LED3, HIGH);
fuehrungsstangen.write(90);
druecker.write(90);
pumpe.write(7);
delay(80);
sabfrageStatus = sabfrageStatus !=LOW;
digitalWrite(LED3, LOW);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
}}