Go Down

Topic: Sketch erweitern  (Read 90 times) previous topic - next topic

simons_arduinoprojects

Sep 24, 2020, 05:10 pm Last Edit: Sep 24, 2020, 05:13 pm by simons_arduinoprojects
Hallo zusammen,
ich bin an meinen ersten Arduino Projekten und möchte gerne einen sketch um ein paar funktionen erweitern, momentan funktioniert der Sketch so das ich wenn ich das erste mal den Taster drücke LED1 für eine bestimmte Zeit angeht, wenn ich ihn ein zweites mal drücke LED2 für eine bestimmte Zeit angeht.

jetzt soll der Sketch um folgendes erweitert werden:

Code: [Select]

Wenn Taster 1. mal gedrückt:

LED1 - für 1000MS an

LED3 - blinkt für 1000MS, soll nach 1000MS blinken auf HIGH bleiben



Wenn Taster 2. mal gedrückt

LED2 - für 2000MS an

LED3 - blinkt für 2000MS, danach soll sie auf LOW bleiben


ich hoffe es ist logisch was ich meine :)

anbei der Code den ich bis jetzt hab, er funktioniert auch, jedoch leuchtet/blinkt noch keine LED weil ich nicht weiß wie ich den Taster nochmal abfragen kann. :(

Würde mich über hilfe sehr freuen.

Code: [Select]

#include <Bounce2.h>
#define NUM_BUTTONS 4

// Pins in Array ablegen
const byte btnpin[] = {A0, A1, A2, A3};
const byte ledApin[] = {6, 8, 10, 12};
const byte ledBpin[] = {7, 9, 11, 13};

bool toggle[NUM_BUTTONS];
bool btnflag; // Flanke Taster gedrückt

// mehrere Instanzen von Bounce in einem Array anlegen
// siehe Beispiel aus der Lib
Bounce * button = new Bounce[NUM_BUTTONS];

void setup() {
  // put your setup code here, to run once:

  for (int i = 0; i < NUM_BUTTONS; i++) {
   // pins einstellen
    button[i].attach(btnpin[i], INPUT_PULLUP);
    button[i].interval(20);
    pinMode(ledApin[i], OUTPUT);
    pinMode(ledBpin[i], OUTPUT);
  }
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < NUM_BUTTONS; i++) {
    button[i].update();

    btnflag = button[i].fell();
    if (btnflag) {
      toggle[i] = !toggle[i]; // Wert toggeln
      //Serial.print(toggle[i]);Serial.println(i);
    }
    timer(i, btnflag, toggle[i]);
  }
 
}

void timer(int gruppe, bool flag, bool tog) {
  // Speicher für die Zeiten hier static damit sie nicht
  // verloren gehen.
  uint32_t static altzeitA[NUM_BUTTONS];
  uint32_t static altzeitB[NUM_BUTTONS];

  if (flag) { // starten
    Serial.print("starten Gruppe "); Serial.print(gruppe);
    if (tog) { // LED A
      altzeitA[gruppe]=millis();
      digitalWrite(ledApin[gruppe], HIGH);
      Serial.println(" LED A");
    }
    else { // LED B
      altzeitB[gruppe]=millis();
      digitalWrite(ledBpin[gruppe], HIGH);
      Serial.println(" LED B");
    }
  }
  // Zeit abgelaufen LED A
  if (millis() - altzeitA[gruppe] >= 1000){
    digitalWrite(ledApin[gruppe],LOW);
}

// Zeit abgelaufen LED B
  if (millis() - altzeitB[gruppe] >= 2000){
    digitalWrite(ledBpin[gruppe],LOW);
}
}


das ganze soll dann natürlich für 4 LEDs funktioniern,

Code: [Select]

z.B. soll A0 - an pin2 die led ansteuern.
A1 - an pin3
& so weiter..

HotSystems

Quote
LED3 - blinkt für 1000MS, soll nach 1000MS blinken auf HIGH bleiben
Und was genau heißt "auf HIGH bleiben" ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

noiasca

#2
Sep 24, 2020, 05:30 pm Last Edit: Sep 24, 2020, 05:32 pm by noiasca
war alles was wir in
https://forum.arduino.cc/index.php?topic=704200.msg4733123#msg4733123

geschrieben haben umsonst?

beschreibe die Logik besser:

Schreibe klare Logiktabellen!
Weniger Text mehr Logik und Grafik!
Dein Controller kann mit Freitext auch nichts anfangen.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

simons_arduinoprojects

Und was genau heißt "auf HIGH bleiben" ?

einfach nur das sie dauerhaft leuchten soll

simons_arduinoprojects

#4
Sep 24, 2020, 05:42 pm Last Edit: Sep 24, 2020, 05:43 pm by simons_arduinoprojects
war alles was wir in
https://forum.arduino.cc/index.php?topic=704200.msg4733123#msg4733123

geschrieben haben umsonst?

beschreibe die Logik besser:

Schreibe klare Logiktabellen!
Weniger Text mehr Logik und Grafik!
Dein Controller kann mit Freitext auch nichts anfangen.
Moin Noiasca, auf keinen Fall, es hat funktioniert, wie ich es jetzt kombinieren kann ist nur mein Problem.

Vielleicht hast du ja gleich eine Lösung für mich :)

Das mit der Tabelle hab ich schon wieder verdrängt vielen Dank für den Tipp, hier ist sie:

Code: [Select]

Status                                        zu tun                                 verlassen bei           nächster Status
------------------------------------------------------------------------------------------------------------------
AUS                                            button lesen                       button gedrückt       BLINKEN
BLINKEN + LED1 1000MS AN      LED2 blinken + LED1 an     Zeitablauf 1sec         LED2 EIN
LED2 EIN                                    button lesen                       button gedrückt       BLINKEN
BLINKEN + LED3 2000MS AN      LED2 blinken + LED3 an     Zeitablauf 2sec         LED2 AUS       
       

ich hoffe so ist es logischer was passieren soll.

HotSystems

#5
Sep 24, 2020, 06:18 pm Last Edit: Sep 24, 2020, 06:24 pm by HotSystems
einfach nur das sie dauerhaft leuchten soll
Dann schreibt man das auch "einfach" so, da unter deiner Beschreibung etwas anderes zu verstehen ist.

Auch weil eine Led je nach Beschaltung durch HIGH oder LOW zum Leuchten gebracht werden kann.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up