INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
mehrere Routinen parallel laufen lassen
27.12.2020, 20:03
Beitrag #1
mehrere Routinen parallel laufen lassen
Liebe Foren Mitglieder,

Ich programmier erst seit kurzem mit dem Arduino und mache nur sehr simple Sachen. Oft schaue ich mit Code aus bestehenden Projekten ab und modifiziere ihn zu meinen Gunsten.

Nun habe ich verschiedene einzelne Routinen, die einzeln so laufen wie ich möchte, nur habe ich jetzt das Problem, dass ich nicht weiß wie ich beide gleichzeitig laufen lasse mit einem Arduino.

Das sind die gewünschten Funktionen:
1. Ein RTC Modul prüft jede Sekunde die aktuelle Zeit und gibt diese über ein OLED Display aus. Gleichzeitig wird in dieser Sekunde auch die Temperatur eines Temperaturfühlers abgefragt und ebenfalls auf dem OLED Display aktualisiert.
1. 2 RGB LEDs und ein Buzzer: die LEDs starten rot und wechseln über 5 min hin immer mehr zu grün. Nach den 5 Min blinken sie 5 mal grün, mit jedem Blinken ertönt der Buzzer. Dann stehen die LEDs auf grün und wechseln über 15 min die Farbe wieder langsam zu rot. Sind die 15 min um, blinken Sie 5 mal rot und der Buzzer piept dabei jeweils wieder und das ganze geht von vorne los.

Hier mein Code für das Blinken:
Code:
// Define Pins
#define RED 3
#define GREEN 5
#define BLUE 6

#define delayTime 10 // fading time between colors

int buzzer = 12;


void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);

digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
}

// define variables
int redValue;
int greenValue;
int blueValue;
unsigned long auf = 2550; // 300000 = 5 min
unsigned long zu = 25500; //1500000 = 15 min
unsigned long timerAuf = auf/255;
unsigned long timerZu = zu/255;

// main loop
void loop()
{
  redValue = 0; // choose a value between 1 and 255 to change the color.
  greenValue = 0;
  blueValue = 0;
  

  analogWrite(RED, redValue); // Starte mit rot
  analogWrite(GREEN, greenValue);
  analogWrite(BLUE, blueValue);
  delay(5);
for (int i = 0; i <= 255 ; i+=1){ //wechsle über die Zeit von auf langsam von rot zu grün
  analogWrite(RED, 255 - i);
  analogWrite(GREEN, i);
  delay(timerAuf);
}
  for (int j = 0; j <=5;){ //blinke 5 mal grün
  analogWrite(RED, 0);
  analogWrite(GREEN, 255);
  analogWrite(BLUE, 0);
  tone(buzzer, 1000);
  delay(200);
  analogWrite(RED, 0);
  analogWrite(GREEN, 0);
  analogWrite(BLUE, 0);
  noTone(buzzer);
  delay(200);
  j+=1;  
}
for (int k = 0; k <= 255 ; k+=1){ //Wechsle über die Zeit von Zu langsam von grün zu rot
  analogWrite(RED, k);
  analogWrite(GREEN, 255 - k);
  delay(timerZu);
}
  for (int l = 0; l <=5;){ // blinke 5 mal rot
  analogWrite(RED, 255);
  analogWrite(GREEN, 0);
  analogWrite(BLUE, 0);
  tone(buzzer, 1500);
  delay(200);
  analogWrite(RED, 0);
  analogWrite(GREEN, 0);
  analogWrite(BLUE, 0);
  noTone(buzzer);
  delay(200);
  l+=1;  
}
}

und der Code für die Uhr/OLED Anzeige:

Code:
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include  <virtuabotixRTC.h>


#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define ONE_WIRE_BUS 2  //Sensor DS18B20 am digitalen Pin 2

OneWire oneWire(ONE_WIRE_BUS); //

//Übergabe der OnewWire Referenz zum kommunizieren mit dem Sensor.
DallasTemperature sensors(&oneWire);

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

virtuabotixRTC myRTC(10, 4, 7); //If you change the wiring change the pins here also

int i = 15;
int sensorCount;
float temp = 0;

String myString = String(i);

void setup() {
  Wire.begin();
  Wire.setClock(400000L);
  Serial.begin(115200);


  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
sensors.begin(); //Starten der Kommunikation mit dem Sensor
sensorCount = sensors.getDS18Count(); //Lesen der Anzahl der angeschlossenen Temperatursensoren.

//Funkuhrt
   // Set the current date, and time in the following format:
  // seconds, minutes, hours, day of the week, day of the month, month, year
myRTC.setDS1302Time(00, 25, 1, 3, 23, 12, 2020);  //Here you write your actual time/date as shown above
                                                   //but remember to "comment/remove" this function once you're done
                                                   //The setup is done only one time and the module will continue counting it automatically

}

void loop()

{
  if(sensorCount ==0){
   display.println("Es wurde kein Temperatursensor gefunden!");
   display.println("Bitte überprüfe deine Schaltung!");
}
//Es können mehr als 1 Temperatursensor am Datenbus angschlossen werden.
//Anfordern der Temperaturwerte aller angeschlossenen Temperatursensoren.

  //delay(1000);
   sensors.requestTemperatures();
   for(int i=0;i<sensorCount;i++){
  temp = sensors.getTempCByIndex(i);
}



display.clearDisplay();

  // display temperature
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperatur: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temp);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  
  myRTC.updateTime();
  
  display.setTextSize(1);
  display.setCursor(0,40);
    Serial.print("Zeit / Datum: ");
  display.print(myRTC.dayofmonth);             //You can switch between day and month if you're using American system
  display.print("/");
  display.print(myRTC.month);
  display.print("/");
  display.print(myRTC.year);
  display.print(" ");
  display.print(myRTC.hours);
  display.print(":");
  display.print(myRTC.minutes);
  display.print(":");
  display.println(myRTC.seconds);
  
  
  display.display();
  delay(1000);
  }

Meine Frage nun: Kann mir jemand ein Beispiel nennen, das ich mir durcharbeiten könnte, damit ich beide loops sozusagen gleichzeitig laufen lassen kann? bisher hat für mich immer eine Hauptroutine gereicht. Ich weiß, dass man viel mit millis() machen kann und theoretisch könnte ich den Farbwechsel der RGB LEDs ja auch einfach in jeder Sekunde machen, aber das Problem ist ja dann das Blinken. Der Einfachheit halber könnte ich einfach das Blinken und Piepen auch pro Sekunde machen, oder zwei pro Sekunde usw. aber mir ist nicht so ganz klar, wie ich das parallel zum Anzeigen der Uhr mache.

Liebe Grüße,
PurpleLightning
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2020, 20:15
Beitrag #2
RE: mehrere Routinen parallel laufen lassen
Echt gleichzeitig geht nicht, Du hast ja nur einen Prozessorkern. Aber so schnell nacheinander, dass es Dir wie gleichzeitig vorkommt geht, aber nicht so, wie Deine Teile programmiert sind.

Du musst Deine Routinen blockadefrei bauen, also so, dass sie nie warten.
Grundlegend langweilt sich der Prozessor bei Deinen Aufgaben immer noch, du blockierst ihn aber.

1. keine delay (außer kleine ca. 20 ms. zum Entprellen von Tastern) - nutze millis(), schaue Dir dazu das Beispiel BlinkWithoutDelay in der IDE an und verstehe es. Das ist die Grundlage.

2. keine for/while und sonstige Schleifen. Du hast eine Schleife: loop

Stlle Dir das so vor: millis() ist die Uhr in Deinem Arduino. Sie zählt die Millisekunden. Wenn Du etwas nach einer bestimmten Zeit tun willst, schaue regelmäßig auf diese Uhr. Muss ich was tun? Ja, tue es, nein - nichts tun.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2020, 11:56
Beitrag #3
RE: mehrere Routinen parallel laufen lassen
Und verwende für das Zusammensetzen Funktionen (in anderen Sprachen sind es Unterprogramme), dann wird es übersichtlicher.
In diese Funktionen kannst du mit neuem Namen deine 2. Loop einbauen. Darauf achten, das keine doppelten Variablen-Namen vorhanden sind.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.12.2020, 08:16
Beitrag #4
RE: mehrere Routinen parallel laufen lassen
Hallo zusammen,

Vielen Dank für die Tipps, das mit den Funktionen habe ich zu spät gesehen, trotzdem danke für den Tipp, das werde ich nächstes mal wieder machen.

Das mit dem Blink without delay war auch ein super Tipp, ich habe mir zwei Videos dazu angesehen und das ganze ist ja eigentlich recht eingängig. Gold wert war der Tipp, dass die Loop jetzt meine einzige Schleife ist, das macht natürlich absolut Sinn.

Ich habe jetzt meinen Code bereinigt und neu geschrieben, Grundsätzlich durchlaufe ich in der Loop ein mal pro Sekunde das Update der Uhrzeit, des Temperatursensors und deren Anzeige auf dem OLED und für die Sache mit den LEDS einen switch-case, der 4 Phasen durchläuft:
1. von Rot zu grün wechseln (5 min)
2. 5 mal grün blinken & piepen
3. Von Grün zu rot wechseln (15 min)
4. 5 mal rot blinken & piepen

Hier der Code:

Code:
//Bibliotheken

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include  <virtuabotixRTC.h>

//Sensor

#define ONE_WIRE_BUS 2  //Sensor DS18B20 am digitalen Pin 2

OneWire oneWire(ONE_WIRE_BUS); //

//Übergabe der OnewWire Referenz zum kommunizieren mit dem Sensor.
DallasTemperature sensors(&oneWire);

//Display

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

//Uhr

virtuabotixRTC myRTC(10, 4, 7); //If you change the wiring change the pins here also

//RGB LEDs & Buzzer

// Pins
#define RED 3
#define GREEN 5
#define BLUE 6
#define buzzer 12

//UHR

//Variablen
const unsigned long sec = 1000;
const unsigned long zeit_auf = 300000;
const unsigned long zeit_zu = 900000;

unsigned long letzte_zeit_1 = 0;
unsigned long letzte_zeit_2 = 0;

int buzzer_delay = 200;

int i = 15;
int sensorCount;
float temp = 0;

String myString = String(i);

//Laufvariablen
int k = 0;

//Status Variablen
int phase = 1; //Starte mit Phase 1
// 1 = Phase 1: Fenster ist offen und Timzer zählt runter
// 2 = Phase 2: Fenster soll geschlossen werden, es blinkt grün
// 3 = Phase 3: Fenster ist zu und der Timer zählt herunter
// 4 = Phase 4: Fenster ist zu und soll geöffnet werden, es blinkt rot

bool starter  = true; // Boolean, der angibt ob eine Phase gerade das erste mal startet
bool buzzer_an = false;

void setup() {
  //LEDs
  pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);

digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);

    analogWrite(BLUE, 0);
    analogWrite(RED, 0);
    analogWrite(GREEN, 0);
int k = 0;
//Uhr, Sensor, Display
Wire.begin();
  Wire.setClock(400000L);
  Serial.begin(115200);


  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  //delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
sensors.begin(); //Starten der Kommunikation mit dem Sensor
sensorCount = sensors.getDS18Count(); //Lesen der Anzahl der angeschlossenen Temperatursensoren.

//Funkuhrt
   // Set the current date, and time in the following format:
  // seconds, minutes, hours, day of the week, day of the month, month, year
//myRTC.setDS1302Time(00, 41, 7, 2, 29, 12, 2020);  //Here you write your actual time/date as shown above
                                                   //but remember to "comment/remove" this function once you're done
                                                   //The setup is done only one time and the module will continue counting it automatically


}

void loop() {
  //akutelle Zeit speichern
  unsigned long aktuelle_zeit = millis();

  //aktualisierung der Uhr

  if(aktuelle_zeit - letzte_zeit_1 >= sec){
    
    //aktualisiere Temperaturvariable & erneuere Display mit Uhrzeit
if(sensorCount ==0){
   display.println("Es wurde kein Temperatursensor gefunden!");
   display.println("Bitte überprüfe deine Schaltung!");
}
//Es können mehr als 1 Temperatursensor am Datenbus angschlossen werden.
//Anfordern der Temperaturwerte aller angeschlossenen Temperatursensoren.

  //delay(1000);
   sensors.requestTemperatures();
   for(int i=0;i<sensorCount;i++){
  temp = sensors.getTempCByIndex(i);
}



display.clearDisplay();

  // display temperature
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperatur: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temp);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  
  myRTC.updateTime();
  
  display.setTextSize(1);
  display.setCursor(0,40);
    Serial.print("Zeit / Datum: ");
  display.print(myRTC.dayofmonth);             //You can switch between day and month if you're using American system
  display.print("/");
  display.print(myRTC.month);
  display.print("/");
  display.print(myRTC.year);
  display.print(" ");
  display.print(myRTC.hours);
  display.print(":");
  display.print(myRTC.minutes);
  display.print(":");
  display.println(myRTC.seconds);
  
  
  display.display();
    
    letzte_zeit_1 = aktuelle_zeit;
  }

  switch(phase){
    case 1:
    if(starter == true){
      unsigned long zeit_seit_zu = aktuelle_zeit; // Zeit speichern, seit dem die Phase 1 läuft
      //fehlt: servo ausfahren
      starter = false;
    }
    if ((aktuelle_zeit - letzte_zeit_2)>= zeit_auf/255){ //timer (5 min) herunter zählen & farbe zu grün ändern
    analogWrite(BLUE, 0);
    analogWrite(RED, 255 - k);
    analogWrite(GREEN, k);
    k+=1;
    letzte_zeit_2 = aktuelle_zeit;
    if(k > 255){
      k = 0;          // Laufvariable zurücksetzen
      phase = 2;     // am Ende zu phase 2 wechseln
      starter = true;
      //fehlt: Servo einfahren
    }
    }
    
    break;

    case 2:
    // buzzer & LED Blinken lassen
    // zu Phase 3 wechseln
    
    if((aktuelle_zeit - letzte_zeit_2) >= buzzer_delay){
      if(buzzer_an == false){ //wenn der buzzer noch nicht an ist, schlate ihn & die LEDs an
        //buzzer_an = true;
        analogWrite(RED, 0);
        analogWrite(GREEN, 255);
        analogWrite(BLUE, 0);
        tone(buzzer, 1000);
      }
      if(buzzer_an == true){ //wenn der buzzer schon an ist, schalten ihn & die LEDs aus
        //buzzer_an = false;
        analogWrite(RED, 0);
        analogWrite(GREEN, 0);
        analogWrite(BLUE, 0);
        noTone(buzzer);
        k+=1;
      }  
       buzzer_an = !buzzer_an;  
    }
    if(k >= 5){
      phase = 3;
      k = 0;
        buzzer_an = false;
        analogWrite(RED, 0);
        analogWrite(GREEN, 0);
        analogWrite(BLUE, 0);
        noTone(buzzer);
    }

    letzte_zeit_2 = aktuelle_zeit;
    

    break;

    case 3:
    // timer (15 min) herunterzählen und LEDs zu rot ändern
    // am Ende zu Phase 4 wechseln

        if ((aktuelle_zeit - letzte_zeit_2)>= zeit_zu/255){ //timer (15 min) herunter zählen & farbe zu grün ändern

    analogWrite(RED, k);
    analogWrite(GREEN, 255 - k);
    k+=1;
    
    if(k > 255){
      k = 0;          // Laufvariable zurücksetzen
      phase = 4;     // am Ende zu phase 2 wechseln
    }
    letzte_zeit_2 = aktuelle_zeit;
    }
    break;
    case 4:
    // 5 mal rot blinken und zu Phase 1 wechseln
    if((aktuelle_zeit - letzte_zeit_2) >= buzzer_delay){
      if(buzzer_an == false){ //wenn der buzzer noch nicht an ist, schlate ihn & die LEDs an
        //buzzer_an = true;
        analogWrite(RED, 255);
        analogWrite(GREEN, 0);
        analogWrite(BLUE, 0);
        tone(buzzer, 1500);
      }
      if(buzzer_an == true){ //wenn der buzzer schon an ist, schalten ihn & die LEDs aus
        //buzzer_an = false;
        analogWrite(RED, 0);
        analogWrite(GREEN, 0);
        analogWrite(BLUE, 0);
        noTone(buzzer);
        k+=1;
      }  
      buzzer_an = !buzzer_an;    
    }
    if(k >= 5){
      phase = 1;
      k = 0;
        buzzer_an = false;
        analogWrite(RED, 0);
        analogWrite(GREEN, 0);
        analogWrite(BLUE, 0);
        noTone(buzzer);
    }
  letzte_zeit_2 = aktuelle_zeit;

  break;
    
  }

}

An sich läuft alles super, nur drei kleine Probleme:

1. meine RTC hinkt genau 2 Minuten hinterher, hat jemand eine Erklärung dafür?
2. Das Gerät ist ja ein Timer zum Lüften in Klassenräumen, d.h. es wird immer wieder angeschlossen und wieder von von der Steckdose getrennt. Jetzt hab ich aber das Phänomen, dass das Gerät, wenn ich es wieder anschließe den ersten Countdown (LEDs färben sich in 5 Minuten von Rot zu Grün) irgendwann abbricht und von vorne startet, es sieht für mich aber eher danach aus als würde das ganze Arduino sich reseten... Ich habe leider gar keine Erklärung dafür.


Ich dachte es liegt vielleicht daran, dass die Laufvariable nicht zurück auf Null gesetzt wird, wenn ich den Code durch das Abstöpseln unterbreche, daher eine Frage: wenn ein Arduino wieder neu an eine Stromversorgung angeschlossen wird, wird dann das Setup (und der Code davor) durchlaufen, oder wird das nur beim ersten Kompilieren & Hochladen auf das Arduino gemacht?

Denn im Setup setze ich meine Laufvariable k, die im Prinzip die Durchläuft zählt, extra noch mal auf null zurück.

3. Obwohl mein Buzzer_delay auf 200 ms steht, blinkt & piept es in den Phasen 2 und 4 im 1 Sekunden-Takt

Wäre dankbar für Tipps woran es liegen könnte von euch Fortgeschrittenen Smile

Liebe Grüße,
Purple Lighrning
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.12.2020, 10:10
Beitrag #5
RE: mehrere Routinen parallel laufen lassen
Hallo,
dein Problem 1.) liegt an der "sehr ungenauen" RTC. Nimm da besser die DS3231, die ist temperaturkompensiert und läuft über lange Zeit sehr genau.

Was die anderen Punkte betrifft, kann ich diese am Tablet nicht nachvollziehen, da die vielen verschachtelten if-Abfragen sehr unübersichtlich sind. Da muss ich mich später am PC noch mal schlau lesen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.12.2020, 10:13 (Dieser Beitrag wurde zuletzt bearbeitet: 29.12.2020 10:13 von Tommy56.)
Beitrag #6
RE: mehrere Routinen parallel laufen lassen
Dein Code ist schwer zu lesen. Du solltest mehr mit Funktionen arbeiten und sauberer einrücken.
Dann musst Du die Uhr nochmal richtig stellen. Bedenke einen Vorlauf zwischen Code erstellen und Start.
Was ist "vor Setup"?
Evtl. bricht Deine Spannungsversorgung (welche?) zusammen und der Arduoino startet neu.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.12.2020, 18:51
Beitrag #7
RE: mehrere Routinen parallel laufen lassen
(29.12.2020 10:13)Tommy56 schrieb:  Dein Code ist schwer zu lesen. Du solltest mehr mit Funktionen arbeiten und sauberer einrücken.

Sorry dafür, ich bin noch Anfänger... Funktionen hab ich bisher eigentlich nur genutzt, wenn ich etwas "complexes" mehrfach machen muss. Aber danke für den Hinweis, sehe ich ein!

(29.12.2020 10:13)Tommy56 schrieb:  Was ist "vor Setup"?

Man schreibt ja einiges an Code vor das Setup, z.B. die Definition der Pins und Variablen. Da es vor dem Setup steht, meinte ich das so Wink

Liebe Grüße,
Purple Lightning
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.12.2020, 19:17
Beitrag #8
RE: mehrere Routinen parallel laufen lassen
(29.12.2020 18:51)PurpleLightning schrieb:  Man schreibt ja einiges an Code vor das Setup, z.B. die Definition der Pins und Variablen. Da es vor dem Setup steht, meinte ich das so Wink

Definitionen werden aber nicht ausgeführt, die werden zur Compilezeit aufgelöst.
Das erste von Deinem Code, was ausgeführt wird, ist setup().

Bei der Einrückung und Formatierung hilft Dir <Strg>+T in der IDE.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Variable in for-Schleife volllaufen lassen. gutschy 7 160 09.04.2021 17:54
Letzter Beitrag: Tommy56
  Mehrere If-Schleifen werden grundlos immer wieder durchlaufen LK2567 3 343 18.02.2021 15:41
Letzter Beitrag: LK2567
  Mehrere Delays nacheinander Jojo58 5 463 13.01.2021 23:14
Letzter Beitrag: Jojo58
Sad nrf24L01: ein Sender mehrere Empfänger louard 6 639 11.01.2021 22:25
Letzter Beitrag: louard
  Mehrere LED's mit versch. Farben ansteuern Daiminium 15 1.836 06.08.2020 07:50
Letzter Beitrag: MicroBahner
  Mehrere Aktionen unterschiedlich oft mit While ausführen dreikommasieben 3 996 19.05.2020 17:11
Letzter Beitrag: dreikommasieben
  Wie mehrere Bedingungen in if-Definition einbauen? Gelegenheitsbastler 7 34.229 18.05.2020 09:53
Letzter Beitrag: SimonTau
  Frage zu Uhrzeit auf Display (schneller laufen lassen) ThorstenP 3 972 07.04.2020 14:52
Letzter Beitrag: hotsystems
  8 Bit als Variable Parallel einlesen Holzauge 4 1.960 24.03.2020 20:18
Letzter Beitrag: Holzauge
  pinMode-Befehle parallel ablaufend baerenboldi 23 3.102 21.03.2020 11:41
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste