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
Funktionsaufruf einer anderen Funktion
10.12.2014, 15:16
Beitrag #1
Funktionsaufruf einer anderen Funktion
Hallo. Ich habe zwei Funktionen geschrieben. Ich erkläre sie kurz:
Diese Funktion ist quasi ein delay(); ohne Verzögerung, wie man das Beispiel auch im Internet findet. Für meinen Zweck habe ich das natürlich etwas abgewandelt. An diese Funktion wird mit dem Aufruf f_interval(); auch der Wert der gewünschten Verzögerung übergeben. Das ganze mache ich, damit ich später in der whileschleife der Funktion einen Status abfragen möchte.
Code:
void f_interval(long interval){
  unsigned long currentMillis = millis();
  while(currentMillis > 0){
    //change_accept();
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval) {
      Serial.print(currentMillis - previousMillis);
      Serial.print("\t");
      delay(20);
      
      // save the last time you blinked the LED
      previousMillis = currentMillis;
      break;
    }
  }
}
Die nächste Funktion ruft die eben gezeigte Funktion auf. Die folgende Funktion ist dafür da, um einen Status eines digitalen Pins abzufragen. Wenn der Status auf 0 geht, dann wird eine Kette von Dingen abgearbeitet. Hierbei sollen einige RGB-LEDs in der Farbe grün für einen gewissen Zeitraum leuchten. Nach dem definierten Zeitraum sollen die LEDs wieder ausgehen und eine Variable wird geändert. Soweit, so gut. Hier erst einmal die Funktion:
Code:
void change_accept(){
  mic_val = digitalRead(inPin);   // read the input pin
  digitalWrite(ledPin, mic_val);    // sets the LED to the button's value
  
  if(mic_val < 1){
     for( int i=0 ; i < num_stripes ; i++){
       for(int j=0; j < NUMPIXELS; j++){ //Schleife für einen normalen Ring mit einer Farbe.
         stripes[i].setPixelColor(j, stripes[i].Color(0, 50, 0)); // Setzt die Farbe eines Pixels an der aktuellen Position aus der Schleife - für den Blinker ist es orange
         stripes[i].show();
       }  
      }
      f_interval(3000);
      for( int i=0 ; i < num_stripes ; i++){
       for(int j=0; j < NUMPIXELS; j++){ //Schleife für einen normalen Ring mit einer Farbe.
         stripes[i].setPixelColor(j, stripes[i].Color(0, 0, 0)); // Setzt die Farbe eines Pixels an der aktuellen Position aus der Schleife - für den Blinker ist es orange
         stripes[i].show();
       }  
      }
      if(mode < max_modus){
       mode = mode + 1;
       f_interval(100);
      }
     else{
       mode = 1;
       f_interval(100);
     }
    }
}
Und zwar rufe ich wieder mit f_interval(); und einem übergebenen Wert die erst genannte Funktion auf um die LEDs für 3000ms leuchten zu lassen. Das funktioniert aber nicht. Die LEDs gehen für den Bruchteil einer Sekunde an, und dann sofort wieder aus. Die in der Funktion aufgerufene Funktion wird also nicht einwandfrei abgearbeitet und ich weiß nicht warum. Könnt ihr mir einen Tipp geben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.12.2014, 15:59
Beitrag #2
RE: Funktionsaufruf einer anderen Funktion
Hi,
Du musst wahrscheinlich vor der while-Schleife erstmal previousMillis setzen, sonst hat das ja noch den Wert vom letzten Mal. Ganz sicher bin ich mir allerdings nicht, da Du uns ja nicht alles zeigst.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.12.2014, 17:24
Beitrag #3
RE: Funktionsaufruf einer anderen Funktion
Ich habe das ganze nun anders gelöst. Dieses Problem hat sich also erledigt, danke Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Funktionen mit der millis() Funktion Zis 3 683 16.05.2018 21:50
Letzter Beitrag: Tommy56
  drei zahlen zu einer zusammen setzen? avoid 10 859 06.05.2018 10:55
Letzter Beitrag: avoid
  Map funktion bei Fernsteuerung marsmännchen 7 597 23.04.2018 12:42
Letzter Beitrag: hotsystems
  Millis verzögern Funktion? malsehen 14 1.220 29.03.2018 21:47
Letzter Beitrag: hotsystems
  Wieder mal einer mit serial Probs :-( Bikandajyo 13 937 03.03.2018 08:35
Letzter Beitrag: Bikandajyo
  While Schleife in einer If abfrage Thorsten_S 4 813 30.12.2017 16:37
Letzter Beitrag: Thorsten_S
  Eine Funktion verlassen Jan5663 8 1.445 18.12.2017 13:49
Letzter Beitrag: Chopp
  Frage zu einer Lichtschrankenmessung - Nullwertabgleich Stargazer 12 1.891 03.11.2017 19:10
Letzter Beitrag: Binary1
  switch case funktion ausser halb loop ??? huber5093 13 2.662 12.04.2017 15:26
Letzter Beitrag: Tommy56
  Verständnisfrage: Instanz innerhalb einer Klasse tuxedo0801 6 971 28.03.2017 19:40
Letzter Beitrag: georg01

Gehe zu:


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