Taster und LED-Modi

Guten Tag liebe Arduinos und Arduinas ( :stuck_out_tongue: ), mein Paket ist nun letzte Woche endlich angekommen und nat√ľrlich habe ich direkt einige Sachen damit angestellt.
Nun bin ich bei meinem ersten Problem angekommen und wollte fragen wie ich es lösen könnte, bzw. wo genau denn mein Fehler liegt.
Ich habe 6 LEDs, einen Taster und einen Poti und möchte diese LEDs mit zwei Modi beschalten, der eine wäre ein Lauflicht und der zweite Modus ist, das einzelne Beschalten der LEDs mit dem Poti(den 10Bit Wert mappen zu den Werten 2-7).
Bei dem ersten Modus möchte ich die Laufgeschwindigkeit mit dem Poti einstellen, im einzelnen Funktioniert dies auch wunderbar, jedoch möchten sich die Modi nicht umstellen lassen schnief.
Vielen Dank im vor raus Joshi.

int pot = 0;
int led = 0;
int tastMode = 0;
int tast = 12;
boolean status;

void setup() {  
  Serial.begin(9600);
  for(int i = 2; i <=7; i++){
    pinMode(i, OUTPUT);  
  }

  pinMode(tast,INPUT);
  digitalWrite(tast,HIGH);
}

void loop() {
  pot = analogRead(0);
  led = map(pot,0, 1023, 2, 7);
  //Serial.println(led);

  int val = digitalRead(tast);
  if(status != val) {
    if(val) {
      tastMode = !tastMode;
    }
    status = val;
    delay(50);
  }
  
  if(tastMode == 0){
    for(int l = 2; l <= 7; l++){
      digitalWrite(l, LOW);
      if(l==led){
        digitalWrite(l, HIGH);
      }
    }
  }else{
    for(int i = 2; i <= 7; i++){
      digitalWrite(i, HIGH);
      delay(pot);
      digitalWrite(i, LOW);  
    }

    for(int i = 7; i >= 2; i--){
      digitalWrite(i HIGH);
      delay(pot);
      digitalWrite(i, LOW);
    }
  }
}

Exwarilor:
mein Paket ist nun letzte Woche endlich angekommen

Gl√ľcklicher Mensch Du, ich bekomme seit drei Wochen nichts.

Es w√§re wohl n√ľtzlich, wenn du Dich mit den Datentypen besch√§ftigen w√ľrdest. Beispiel:

int tastMode = 0;
...
tastMode = !tastMode;

Ich habe das noch nicht ausprobiert, es ist aber zumindest unsauber.

int val = digitalRead(tast);

Das m√ľ√üte boolean val sein.

Hängt an tast ein Taster?

Ja an "tast" hängt ein Taster, welchen ich mit folgendem "Code-Abteil" zu einem prophylaktischem Schalter umfunktioniert habe:

  int val = digitalRead(tast);
  if(status != val) {
    if(val) {
      tastMode = !tastMode;
    }
    status = val;
    delay(50);
  }

Okay ich probiere es morgen mit dem anderen Datentyp aus.
Ich habe es nach anderthalb Wochen Verspätung bekommen.
Ich w√ľnsche dir viel Gl√ľck und hoffentlich kommt deine Bestellungen bald bei dir an!

Noch mal eine Frage zu einem ganz anderem Thema, f√ľr welches ich nicht unbedingt einen neuen Thread er√∂ffnen m√∂chte, gibt es Distanz-Sensoren welche weiter messen k√∂nnen und dabei pr√§ziser bleiben als solch billige Schallsensoren?

MfG Joshi

Exwarilor:
Noch mal eine Frage zu einem ganz anderem Thema, f√ľr welches ich nicht unbedingt einen neuen Thread er√∂ffnen m√∂chte, gibt es Distanz-Sensoren welche weiter messen k√∂nnen und dabei pr√§ziser bleiben als solch billige Schallsensoren?

MfG Joshi

Ja, aber die sind einiges teuer.

In welchem Verhältnis teurer?
Zum allgemeinem Sensor-Kauf, lohnen sich seiten wie SparkFun und Adafruit? Oder sollte man ausschließlich bei Ebay schauen?

Weder noch, da musst du schon wohl eher bei Herstellern anfragen, ggf. haben die Elektronik-Gro√üh√§ndler (digikey, Mouser, farnell) etwas. Such mal in Richtung Lasermessung. Preise beginnend bei ~100‚ā¨

Jedoch w√ľrde ich von dem Verfahren abraten und versuchen mit den US-Sensoren gl√ľcklich zu werden. Um das System der Messung zu verstehen und vorallem anwenden zu k√∂nnen, bedarf es schon eines recht guten Sketches, denn die Zeitmessungen sind sehr kritisch im Timing.

Okay vielen Dank schonmal f√ľr die Antwort, ich denke, dass es auch nicht so relevant ist, war nur der Interesse halber.
Eine letzte Frage habe ich noch, wo kriege ich am g√ľnstigsten RGB-LEDs egal ob diffused oder nicht, ist auch nicht wichtig welche Gr√∂√üe oder Form.

Nochmal zum Sketch: Der optimierende Compiler ist auch tolerant, so daß Deine Typdefinitionen keinen Einfluß auf den Programmablauf haben. Auch das Umschalten von tastmode funktioniert. Dazu habe ich tastmode auf einer LED ausgegeben und delay(pot); auskommentiert. Bei jeder LOW-HIGH Flanke des Tasters wird tastmode umgeschaltet.

Urs√§chlich f√ľr das unerwartete Verhalten ist also delay(pot);. Eine schnelle Reaktion auf einen Taster und delay() passen halt nicht zueinander.

Lösungen dazu mit millis() wurden schon mehrfach im Forum vorgestellt, eine Anleitung Endlicher Automat mit millis() auch von mir.

Ich hoffe, dies hilft Dir weiter :slight_smile: