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
Von BlinkWithoutDelay zu Wechselton...
19.04.2016, 20:43
Beitrag #9
RE: Von BlinkWithoutDelay zu Wechselton...
Hallo hotsystems,

ich habe heute seeendlich mal die Zeit gefunden an meinem Code weiterzubasteln, aktuell habe ich das Phänomen, daß die letzte Tonfolge leider nur "halb" durchläuft, konkret bedeutet daß wenn ich a ==2 setze:

taaatüüüüütaaaa

Und dann ist Ruhe. Huh
Wo ist mein letztes "tüüüü" hin ? WinkRolleyes

Grüße, Clubbi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.04.2016, 08:35
Beitrag #10
RE: Von BlinkWithoutDelay zu Wechselton...
(19.04.2016 20:43)Clubsport schrieb:  ich habe heute seeendlich mal die Zeit gefunden an meinem Code weiterzubasteln, aktuell habe ich das Phänomen, daß die letzte Tonfolge leider nur "halb" durchläuft, konkret bedeutet daß wenn ich a ==2 setze:
taaatüüüüütaaaa
Und dann ist Ruhe. Huh
Wo ist mein letztes "tüüüü" hin ? WinkRolleyes

Wo ist das Problem.

Wie ich geschrieben habe, ist dies ein Beispiel und kein fertiger Sketch.
Den Rest solltest du schon selbst hinbekommen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.04.2016, 21:10
Beitrag #11
RE: Von BlinkWithoutDelay zu Wechselton...
Hallo hotsystems,

ich habe das Problem jetzt lösen können, indem ich die Variable "a" einfach an einer anderen Stelle des Codes hochzählen lasse - damit funktioniert es wie gewünscht. Smile
Danke dafür !
Allerdings bekomme ich es nicht in meinen "Restcode" eingebaut, ohne die Fehlermeldung, daß die Funktion "HornLoop" nicht definiert wäre....?!?!
Ich probiere dies jetzt schon wieder diverse Stunden, aber komme nicht auf den Fehler.... Kann mir jemand sagen, woran das liegt ?

Code:
// English for which bluelight to strobe
#define RIGHT 0x0
#define LEFT 0x1

// Variable to track which bluelight is on
byte whichBL = RIGHT;

// Variable to track which strobe is on
byte whichStrobe = RIGHT;

// Where are the bluelights connected?
const int BL_Right = 6; //Blaulicht rechts Pin 6
const int BL_Left = 7; //Blaulicht links Pin 7
const int Strobe_Right = 8;  //Blitzer rechts Pin 8
const int Strobe_Left = 9; //Blitzer links Pin 9
const int Warnblinker = 10; // Warnblinker an Pin 10
const int HornPin = 11;
const int HornStatus = 13;
const int BlaulichtPin = 2; //Eingang für Blaulichtschalter Pin 2
const int StrobePin = 3; //Eingang für Blitzerschalter Pin 3
const int WarnblinkerPin = 4; //Eingang für Warnblinktaster Pin 4
const int MartinshornPin = 5; //Eingang für Martinshorn Pin 5

//const long interval = 1000;           // interval at which to change frequency (milliseconds)

//Variables will change:
int buttonStateBL = 0;
int buttonStateStrobe = 0;
int buttonStateWarnblinker = 0;
int lastbuttonStateBL = 0;
int buttonStateHorn = 0;
int lastbuttonStateStrobe = 0;
int lastbuttonStateWarnblinker = 0;
int lastbuttonStateHorn = 0;
int buttonPushCounterBL = 1;
int buttonPushCounterStrobe = 1;
int buttonPushCounterWarnblinker = 1;
int buttonPushCounterHorn = 1;
int HornTone = 440;                     // frequency played on the pin (Hz)
unsigned long previousMillisHorn = 0;       // will store last time frequency was updated
unsigned int HornOn = 0;
int a = 0;

// State variables for the bluelights
byte Right_StateBL = LOW;
byte Left_StateBL = LOW;

// State variables for the strobes
byte StrobeRight_State = LOW;
byte StrobeLeft_State = LOW;

// Variablen für den Warnblinker
byte WarnblinkerState = LOW;
unsigned long previousMillis = 0;        // will store last time Warnblinker was updated
unsigned long currentMillis = 0;
// Some delay values to change flashing behavior of bluelights
unsigned long BLswitchDelay = 600;
unsigned long BLstrobeDelay = 100;

// Some delay values to change flashing behavior of strobes
unsigned long StrobeswitchDelay = 200;
unsigned long StrobestrobeDelay = 30;

// Seed the initial wait for the strobe effect of bluelights
unsigned long BLstrobeWait = BLstrobeDelay;

// Seed the initial wait for the strobe effect of strobes
unsigned long StrobestrobeWait = StrobestrobeDelay;

// Variable to see when we should switch LEDs
unsigned long BLwaitUntilSwitch = BLswitchDelay;  // seed initial wait

// Variable to see when we should switch strobes
unsigned long StrobewaitUntilSwitch = StrobeswitchDelay;  // seed initial wait

// konstantes Intervall für den Warnblinker
const long interval = 500;

void setup() {
  pinMode(BlaulichtPin, INPUT);
  pinMode(StrobePin, INPUT);
  pinMode(WarnblinkerPin, INPUT);
  pinMode(MartinshornPin, INPUT);
  pinMode(HornPin, OUTPUT);
  pinMode(BL_Right, OUTPUT);
  pinMode(BL_Left, OUTPUT);
  pinMode(Strobe_Right, OUTPUT);
  pinMode(Strobe_Left, OUTPUT);
  pinMode(Warnblinker, OUTPUT);
  pinMode(HornStatus, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}





void loop() {

  // Ansteuerung Martinshorn
  //=========================
  {
  //buttonStateHorn = digitalRead(MartinshornPin);                //read the Martinshorn Button input pin:
  //if (buttonStateHorn != lastbuttonStateHorn) {                 // compare the buttonState to its previous state
  if (digitalRead(MartinshornPin) == HIGH) {                              // if the state has changed, increment the counter
    HornOn = 1;
    a = 0;
  }

  if (HornOn == 1) {
    HornLoop();
  }
  else {
    noTone(HornPin);
    digitalWrite (HornStatus, LOW);
  }

void HornLoop() {

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you changed the frequency
    previousMillis = currentMillis;
    // if the frequency is 440Hz change to 585Hz and vice-versa:
    if (HornTone == 585) {
      HornTone = 440;
    } else {
      HornTone = 585;
    }
    a++;
    if (a == 4) {         // Anzahl max. Toene
      HornOn = 0;
    }
  }
  // set the tone with the actual frequency:
  tone(HornPin, HornTone);
  digitalWrite (HornStatus, HIGH);
} //else {
noTone(HornPin);
digitalWrite(HornStatus,LOW);
}

// Ansteuerung Warnblinker
//=========================

{
  buttonStateWarnblinker = digitalRead(WarnblinkerPin);         //read the Warnblinker Button input pin:
  if (buttonStateWarnblinker != lastbuttonStateWarnblinker) {   // compare the buttonState to its previous state
    if (buttonStateWarnblinker == HIGH) {                       // if the state has changed, increment the counter
      buttonPushCounterWarnblinker++;                           // if the current state is HIGH then the button went from off to on:
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounterWarnblinker);
    } else {
      Serial.println("off");                                    // if the current state is LOW then the button went from on to off:
    }
    delay(50);                                                  //Delay a little bit to avoid bouncing
    lastbuttonStateWarnblinker = buttonStateWarnblinker;        // save the current state as the last state, for next time through the loop
  }
  if (buttonPushCounterWarnblinker % 2 == 0)  {
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval)
    {
      previousMillis = currentMillis;                           // save the last time you blinked the Warnblinker
      if (WarnblinkerState == HIGH)  {                          // if the Warnblinker is off turn it on and vice-versa:
        WarnblinkerState = LOW;
      } else  {
        WarnblinkerState = HIGH;
      }
    }
    digitalWrite(Warnblinker, WarnblinkerState);                // set the LED with the ledState of the variable:
  } else  {
    digitalWrite(Warnblinker, LOW);
  }
  //digitalWrite(Strobe_Right, WarnblinkerState);
}

// Ansteuerung Blaulicht
//=========================

{
  buttonStateBL = digitalRead(BlaulichtPin);                    //read the Blaulicht Button input pin:
  if (buttonStateBL != lastbuttonStateBL) {                     // compare the buttonState to its previous state
    if (buttonStateBL == HIGH) {                                // if the state has changed, increment the counter
      buttonPushCounterBL++;                                    // if the current state is HIGH then the button went from off to on:
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounterBL);
    } else {
      Serial.println("off");                                    // if the current state is LOW then the button went from on to off:
    }
    delay(50);
    lastbuttonStateBL = buttonStateBL;
  }
  if (buttonPushCounterBL % 2 == 0) {
    unsigned long currentMillis = millis();
    digitalWrite(BL_Right, Right_StateBL);                      // each iteration of loop() will set the IO pins,
    digitalWrite(BL_Left, Left_StateBL);                        // even if they don't change, that's okay
    if ((long)(millis() - BLwaitUntilSwitch) >= 0) {            // Toggle back and forth between the two bluelights
      Right_StateBL = LOW;                                      // time is up!
      Left_StateBL = LOW;
      whichBL = !whichBL;                                       // toggle LED to strobe
      BLwaitUntilSwitch += BLswitchDelay;
    }
    if ((long)(millis() - BLstrobeWait) >= 0) {                 // Create the strobing effect
      if (whichBL == RIGHT)                                     // compare the buttonState to its previous state
        Right_StateBL = !Right_StateBL;
      if (whichBL == LEFT)
        Left_StateBL = !Left_StateBL;
      BLstrobeWait += BLstrobeDelay;
    }
  } else {
    digitalWrite(BL_Left, LOW);
    digitalWrite(BL_Right, LOW);
  }
}

// Ansteuerung Frontblitzer
//=========================

{
  buttonStateStrobe = digitalRead(StrobePin);                   //read the Strobe Button input pin:
  if (buttonStateStrobe != lastbuttonStateStrobe) {             // compare the buttonState to its previous state
    if (buttonStateStrobe == HIGH) {                                // if the state has changed, increment the counter
      buttonPushCounterStrobe++;                                    // if the current state is HIGH then the button went from off to on:
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounterStrobe);
    } else {
      Serial.println("off");                                    // if the current state is LOW then the button went from on to off:
    }
    delay(50);
    lastbuttonStateStrobe = buttonStateStrobe;
  }
  if (buttonPushCounterStrobe % 2 == 0) {
    unsigned long currentMillis = millis();
    digitalWrite(Strobe_Right, StrobeRight_State);                      // each iteration of loop() will set the IO pins,
    digitalWrite(Strobe_Left, StrobeLeft_State);                        // even if they don't change, that's okay
    if ((long)(millis() - StrobewaitUntilSwitch) >= 0) {                // Toggle back and forth between the two bluelights
      StrobeLeft_State = LOW;
      StrobeRight_State = LOW;
      whichStrobe = !whichStrobe;                                       // toggle LED to strobe
      StrobewaitUntilSwitch += StrobeswitchDelay;
    }
    if ((long)(millis() - StrobestrobeWait) >= 0) {                     // Create the strobing effect
      if (whichStrobe == LEFT)
        StrobeLeft_State = !StrobeLeft_State;
      if (whichStrobe == RIGHT)
        StrobeRight_State = !StrobeRight_State;
      StrobestrobeWait += StrobestrobeDelay;
    }

  }

  else {
    digitalWrite(Strobe_Left, LOW);
    digitalWrite(Strobe_Right, LOW);
  }
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.04.2016, 21:32 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2016 21:44 von hotsystems.)
Beitrag #12
RE: Von BlinkWithoutDelay zu Wechselton...
(22.04.2016 21:10)Clubsport schrieb:  Hallo hotsystems,

ich habe das Problem jetzt lösen können, indem ich die Variable "a" einfach an einer anderen Stelle des Codes hochzählen lasse - damit funktioniert es wie gewünscht. Smile
Danke dafür !
Allerdings bekomme ich es nicht in meinen "Restcode" eingebaut, ohne die Fehlermeldung, daß die Funktion "HornLoop" nicht definiert wäre....?!?!
Ich probiere dies jetzt schon wieder diverse Stunden, aber komme nicht auf den Fehler.... Kann mir jemand sagen, woran das liegt ?

Die Funktion "HornLoop" ist ja eine eigenständige Funktion und die darf nicht innerhalb der "Loop" stehen. Setze die davor oder ans Ende.

Und mir ist noch aufgefallen, am Ende der Funktion hast du das "else" auskommentiert, da wird dann ein Fehler auftreten.

Das muss dann sicher so aussehen.
Code:
//  else {
//    noTone(HornPin);
//    digitalWrite(HornStatus, LOW);
//  }

Es sei denn, du brauchst die Anweisungen noch, dann müssen die Klammern "{}" weg.

Und am Ende der Loop fehlt dann eine Klammer "}".

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2016, 10:03
Beitrag #13
RE: Von BlinkWithoutDelay zu Wechselton...
Vielen Dank für die Anmerkungen ! Fehler sind korrigiert und jetzt läuft es auch Cool
Allerdings bis auf eine Ausnahme:
Das Blinkverhalten des Blaulichts ändert sich von sehr schnell wechselnd auf den normalen Zeitablauf, und zwar abhängig vom letzten Reset, unabhängig davon ob man das Blaulicht schon mal ein- und ausgeschaltet hat.
Scheint also irgendein Timing-Problem zu sein...

Ich werde nochmal den Blaulicht-Part separat testen, aber mir ist es dort nicht aufgefallen.... Gebe dann nochmal Bescheid. Wink

Danke und Grüße,

Clubbi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2016, 18:26
Beitrag #14
RE: Von BlinkWithoutDelay zu Wechselton...
Super das es soweit läuft und danke für die Rückmeldung.
Ich denke, die letzte Hürde schaffst du auch noch.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.04.2016, 10:04
Beitrag #15
RE: Von BlinkWithoutDelay zu Wechselton...
Hi,

sollte eigentlich zum guten Ton gehören daß WENN man schon Hilfestellung bekommt, auch Rückmeldung gibt ob alles funktioniert hat Cool Wie gesagt, beim letzten Codeschnipsel von dir war ich nur leider beruflich im Ausland unterwegs.

Aaaaalso, mein Blaulichtpart funktioniert auch separat nicht... Ich hab den Arduino über Nacht mal bestromt stehen lassen und heut morgen eingeschaltet:
Erst leuchteten beide Blaulichter gleichzeitig dauerhaft, dann irgendwann fingen Sie langsam an wechselseitig zu blinken, und erst nach einer Weile gingen Sie dann in den normalen wechselseitigen Blitzmodus über....
Da ist also iiiirgendwo noch der Wurm drin. Dodgy

Grüße, Clubbi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.04.2016, 12:47 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2016 12:49 von hotsystems.)
Beitrag #16
RE: Von BlinkWithoutDelay zu Wechselton...
(24.04.2016 10:04)Clubsport schrieb:  Hi,

sollte eigentlich zum guten Ton gehören daß WENN man schon Hilfestellung bekommt, auch Rückmeldung gibt ob alles funktioniert hat Cool Wie gesagt, beim letzten Codeschnipsel von dir war ich nur leider beruflich im Ausland unterwegs.

Ja, stimmt, aber leider ist das nicht immer so.
Und dass wir mal etwas warten müssen, ist auch kein Problem.
Alles gut.
Immerhin haben bei einer Rückmeldung alle etwas davon. Wink

Zitat:Aaaaalso, mein Blaulichtpart funktioniert auch separat nicht... Ich hab den Arduino über Nacht mal bestromt stehen lassen und heut morgen eingeschaltet:
Erst leuchteten beide Blaulichter gleichzeitig dauerhaft, dann irgendwann fingen Sie langsam an wechselseitig zu blinken, und erst nach einer Weile gingen Sie dann in den normalen wechselseitigen Blitzmodus über....
Da ist also iiiirgendwo noch der Wurm drin. Dodgy

Grüße, Clubbi

Das ist dafur umso ärgerlicher, wenn du hier hilfe benötigst, lass es hören (lesen).

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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