Mehrere Funktionen an einem Arduino

Ich habe dann rumprobiert und nochmal ein Tutorial geschaut und dann ist mir ein Gedankensblitz durch den Kopf gegangen: Könnte es nicht mit der While-Schleife gehen???

Und es ging auch :smiley:

Hier nochmal den Code und vielen Dank für eure Hilfe:

#include "SR04.h"0.
#define TRIG_PIN 3
#define ECHO_PIN 2
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
int LED1 = 4;
int LED2 = 5;
int Wert = 0;

void setup() {
   Serial.begin(9600);
   (3000);
   pinMode(LED1,OUTPUT);
   pinMode(LED2,OUTPUT);
}

void loop() {
   a=sr04.Distance();             //Ab hier beginnt der Ultraschall-Distanzmesser zu messen.
   Serial.print(a);
   Serial.println("cm");
delay(3000);
    if (a >= 10 && a<= 12){       //Wenn die Entfernung eines Gegenstandes zwischen 10cm und 12cm liegt schlatet die erste LED an.
digitalWrite(LED1,HIGH);
   }
while(digitalRead(LED1)==HIGH) {  //Da die erste Aufgabe fertig ist fängt die zweite an, eine Photozelle misst den Widerstand .
  Wert = analogRead(A0);
Serial.println(Wert);
delay(15);
if(Wert<300){                     //Ist der Wert unter 300 also die Photozelle wird verdunkelt schaltet die Zweite LED an.
  digitalWrite(LED2,HIGH);
  delay(100);
}
}
}

PS: Keine Ahnung was dieses 0. hinter der Library macht da das Sketch aber funktioniert hab ich es so gelassen.

Challenger

@challenger

combie:
Bei ordentlicher Einrückung sieht man das auch.

Und dabei ist das so einfach. :wink:
Drücke mal Strg + t in der IDE.

@HotSystem

Danke hab ich nicht gewusst jetzt siehts echt besser aus ;D

#include <TaskMacro.h>
#include <SR04.h>


const byte TRIG_PIN     = 3;
const byte ECHO_PIN     = 2;
const byte LED1         = 4;
const byte LED2         = 5;
const byte LICHTSENSOR  = A0;

SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);


void setup() 
{
   Serial.begin(9600);
   //delay(3000);
   pinMode(LED1,OUTPUT);
   pinMode(LED2,OUTPUT);
}

void SR04Task()
{
  static long distance;
  taskBegin();
  while(1) // endlosschleife
  {
     distance=sr04.Distance();
     Serial.print(distance);
     Serial.println("cm");
     digitalWrite(LED1,distance >= 10 && distance<= 12);
     taskPause(3000);
  }
  taskEnd();
}

void LichtTask()
{
  static int Wert;
  taskBegin();
  while(1) // endlosschleife
  {
     if(digitalRead(LED1))
     {
        Wert = analogRead(LICHTSENSOR);
        Serial.println(Wert); 
        digitalWrite(LED2,Wert>300);
      
     } else digitalWrite(LED2,LOW);
     taskPause(100);
  }
  taskEnd();
}


void loop() 
{
   SR04Task();
   LichtTask();
}

ungetestet

Nicht schlecht ja das geht auch (habs getestet) einfach das meine ich noch wollte das die zweite LED angeht wenn der Wert unter 300 ist und die LED soll an bleiben.

Aber vom Prinzip her hast du das gleiche.

Nur noch ne Frage wie lange hast du für die Schaltung gebraucht??

Ich hab nälich 2 tage gebraucht xD

Nochmals Danke

Challenger

Bei combie würde ich sagen: unter 5 Minuten

xD

Nur noch ne Frage wie lange hast du für die Schaltung gebraucht??

Eine Schaltung habe ich nicht aufgebaut.
Würde aber keine 1/4 Stunde dauern, wenn ich denn einen SR04 da hätte.

Die Umwandlung deines Programms, in meine Variante?
ca 20 Minuten, würde ich mal sagen...

Aber vom Prinzip her hast du das gleiche.

Wie schon gesagt...
Konnte deinem Programm nicht die exakten Anforderungen entnehmen.
Selbst jetzt noch nicht....

Meist fange ich solche "Ablaufsteuerungen" damit an, dass ich mir alle möglichen Zustände und ihre Übergänge auf Papier aufmale.

Parallel laufende (also nebenläufige) Dinge bekommen jeweils ihre eigene Zeichnung.
Und genau so wird das spätere Programm aufgeteilt.
Ich halte nichts davon, alles in eine unübersichtliche Wurst zu quetschen.

Bei combie würde ich sagen: unter 5 Minuten

  1. Danke! 8)
    Hat etwas länger gedauert.....
    Hatte da so meine Probleme.