- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: "fremde" zeichen

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180

    "fremde" zeichen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo allerseits,

    in einem der erklärungsbeispiele für "blink without delay" stiess ich auf folgenden code:

    Code:
    /*
    /*
    Blink Without Delay - anhand von Beispielen erklärt
    fünf parallel laufende, voneinander unabhängige, unterschiedliche Zeiten
    
    
    https://www.arduinoforum.de/arduino-Thread-Blink-Without-Delay-mal-anders-erkl%C3%A4rt
    
    
    
    
    !!! Variablen zum speichern von Zeiten aus millis() und micros() immer 'unsigned long' deklarieren !!!
    
    
    */
    
    
    
    
    // Variablen deklarieren in denen die Startzeiten
    // der einzelnen Zeitfunktionen gespeichert werden
    unsigned long startzeit_1 = 0;
    unsigned long startzeit_2 = 0;
    unsigned long startzeit_3 = 0;
    unsigned long startzeit_4 = 0;
    unsigned long startzeit_5 = 0;
    
    
    // Definitionen der einzelnen Schaltzeiten
    #define        laufzeit_1   1234UL
    #define        laufzeit_1   1234UL
    #define        laufzeit_2   2345UL
    #define        laufzeit_3  54321UL
    #define        laufzeit_4   1111UL
    #define        laufzeit_5     22UL
    
    
    // Die Anschlusspins der einzelnen LEDs festlegen
    const int led_1 = 10;
    const int led_2 = 11;
    const int led_3 = 12;
    const int led_4 = 13;
    
    
    // Pins als Ausgang
    void setup()
    {
    pinMode(led_1, OUTPUT);
    pinMode(led_2, OUTPUT);
    pinMode(led_3, OUTPUT);
    pinMode(led_4, OUTPUT);
    }
    
    
    
    
    
    
    void loop()
    {
    
    
    
    
    // laufzeit_1 EIN, laufzeit_1 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
    if (millis() - startzeit_1 >= laufzeit_1)
    {
      startzeit_1 = millis();
      digitalWrite(led_1, digitalRead(led_1) ^ 1);
    }
    
    
    
    
    
    
    
    
    // laufzeit_2 EIN, laufzeit_2 AUS - LED schalten in Funktion - Schaltzeiten in Millisekunden
    if (millis() - startzeit_2 >= laufzeit_2)
    {
      startzeit_2 = millis();
      led2();
    }
    
    
    
    
    
    
    
    
    // laufzeit_3 EIN, laufzeit_3 AUS - LED schalten in loop - Schaltzeiten in Microsekunden
    if (micros() - startzeit_3 >= laufzeit_3)
    {
      startzeit_3 = micros();
      digitalWrite(led_3, digitalRead(led_3) ^ 1);
    }
    
    
    
    
    
    
    
    
    // asymetrische Zeiten - laufzeit_5 EIN, laufzeit_4 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
    if (!digitalRead(led_4) && millis() - startzeit_4 >= laufzeit_4 )
    {
      startzeit_5 = millis();
      digitalWrite(led_4, digitalRead(led_4) ^ 1);
    }
    if (digitalRead(led_4) && millis() - startzeit_5 >= laufzeit_5 )
    {
      startzeit_4 = millis();
      digitalWrite(led_4, digitalRead(led_4) ^ 1);
    }
    
    
    
    
    
    
    }
    
    
    // Unterprogramm für Led 2
    void led2()
    {
    digitalWrite(led_2, digitalRead(led_2) ^ 1);
    }
    was bedeutet z.b. hier: #define "laufzeit_1 1234UL" das "UL"?

    oder hier: "digitalWrite(led_4, digitalRead(led_4) ^ 1);" das "^ 1"?
    Geändert von inka (19.09.2017 um 16:19 Uhr)
    gruß inka

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    ^: Bitweises exklusives Oder.
    UL: Die Konstante hat explizit den Typ unsigned long.

  3. #3
    HaWe
    Gast
    Zitat Zitat von inka Beitrag anzeigen
    hallo allerseits,

    in einem der erklärungsbeispiele für "blink without delay" stiess ich auf folgenden code:

    Code:
    /*
    /*
    Blink Without Delay - anhand von Beispielen erklärt
    fünf parallel laufende, voneinander unabhängige, unterschiedliche Zeiten
    
    
    https://www.arduinoforum.de/arduino-Thread-Blink-Without-Delay-mal-anders-erkl%C3%A4rt
    
    
    
    
    !!! Variablen zum speichern von Zeiten aus millis() und micros() immer 'unsigned long' deklarieren !!!
    
    
    */
    
    
    
    
    // Variablen deklarieren in denen die Startzeiten
    // der einzelnen Zeitfunktionen gespeichert werden
    unsigned long startzeit_1 = 0;
    unsigned long startzeit_2 = 0;
    unsigned long startzeit_3 = 0;
    unsigned long startzeit_4 = 0;
    unsigned long startzeit_5 = 0;
    
    
    // Definitionen der einzelnen Schaltzeiten
    #define        laufzeit_1   1234UL
    #define        laufzeit_1   1234UL
    #define        laufzeit_2   2345UL
    #define        laufzeit_3  54321UL
    #define        laufzeit_4   1111UL
    #define        laufzeit_5     22UL
    
    
    // Die Anschlusspins der einzelnen LEDs festlegen
    const int led_1 = 10;
    const int led_2 = 11;
    const int led_3 = 12;
    const int led_4 = 13;
    
    
    // Pins als Ausgang
    void setup()
    {
    pinMode(led_1, OUTPUT);
    pinMode(led_2, OUTPUT);
    pinMode(led_3, OUTPUT);
    pinMode(led_4, OUTPUT);
    }
    
    
    
    
    
    
    void loop()
    {
    
    
    
    
    // laufzeit_1 EIN, laufzeit_1 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
    if (millis() - startzeit_1 >= laufzeit_1)
    {
      startzeit_1 = millis();
      digitalWrite(led_1, digitalRead(led_1) ^ 1);
    }
    
    
    
    
    
    
    
    
    // laufzeit_2 EIN, laufzeit_2 AUS - LED schalten in Funktion - Schaltzeiten in Millisekunden
    if (millis() - startzeit_2 >= laufzeit_2)
    {
      startzeit_2 = millis();
      led2();
    }
    
    
    
    
    
    
    
    
    // laufzeit_3 EIN, laufzeit_3 AUS - LED schalten in loop - Schaltzeiten in Microsekunden
    if (micros() - startzeit_3 >= laufzeit_3)
    {
      startzeit_3 = micros();
      digitalWrite(led_3, digitalRead(led_3) ^ 1);
    }
    
    
    
    
    
    
    
    
    // asymetrische Zeiten - laufzeit_5 EIN, laufzeit_4 AUS - LED schalten in loop - Schaltzeiten in Millisekunden
    if (!digitalRead(led_4) && millis() - startzeit_4 >= laufzeit_4 )
    {
      startzeit_5 = millis();
      digitalWrite(led_4, digitalRead(led_4) ^ 1);
    }
    if (digitalRead(led_4) && millis() - startzeit_5 >= laufzeit_5 )
    {
      startzeit_4 = millis();
      digitalWrite(led_4, digitalRead(led_4) ^ 1);
    }
    
    
    
    
    
    
    }
    
    
    // Unterprogramm für Led 2
    void led2()
    {
    digitalWrite(led_2, digitalRead(led_2) ^ 1);
    }
    was bedeutet z.b. hier: #define "laufzeit_1 1234UL" das "UL"?

    oder hier: "digitalWrite(led_4, digitalRead(led_4) ^ 1);" das "^ 1"?

    UL hinter einer Zahl heißt, dass sie den Datentyp UL = unsigned long hat (wird z.B. für millis() benötigt)
    und ^ ist ein logischer Operator und bedeutet XOR (edit: bitweise)
    ( x ^ 1 ) ergibt mit x=0 eine 1 und mit x=1 eine 0, invertiert also x.

    andere Operatoren der Sprache C(++) findest du z.B. hier:
    https://www.tutorialspoint.com/cprog..._operators.htm

    HTH!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    danke (auch an sisor) es hat geholfen...

    dann bedeutet es, dass:

    mit: " digitalWrite(led_4, digitalRead(led_4) ^ 1);"

    der zustand von "led_4" gelesen und mit einem invertierten wert vom gelesenen wieder beschrieben wird...
    gruß inka

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von inka Beitrag anzeigen
    danke (auch an sisor) es hat geholfen...

    dann bedeutet es, dass:

    mit: " digitalWrite(led_4, digitalRead(led_4) ^ 1);"

    der zustand von "led_4" gelesen und mit einem invertierten wert vom gelesenen wieder beschrieben wird...
    Ja, genau. Folgendes hätte den gleichen Effekt:
    digitalWrite(led_4, !digitalRead(led_4));

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 01.11.2017, 13:53
  2. Verkaufe Verkaufe jede Menge 2x16 Zeichen LCDs "Truly MCC162A4-5" ohne Backlight
    Von JensBE im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 6
    Letzter Beitrag: 10.06.2013, 20:03
  3. Antworten: 2
    Letzter Beitrag: 15.06.2011, 22:18
  4. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 11.06.2008, 00:02
  5. ASM: was machen "swap" und "cbr" genau?
    Von RHS im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 18.08.2004, 18:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen