- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 17

Thema: Pause mit millis wenn geschaltet wird.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke HaWe,
    ich nehme es als Lektüre für die dunklen Monate. Momentan ist Draußen zuviel anderes los.
    Zum Glück kann man sich hier ja immer wieder die alten Beiträge ansehen. Davon habe ich schon zig Mal profitiert.
    Interessant ist das Thema schon, obwohl ich immer noch gerne Analog und dazu mit Logik Gattern spiele. Aber zuverlässiger, was Störimpulse betrifft, sind die Controller auf jeden Fall. Wir haben z.B. ein Stallgebäude mit 4 Türen =4x Reedkontakt. Ein "4082 AND" checkt das und steuert 2 NE555 an. Trotz Entstörung und Pufferung gibt es immer wieder Fehlalarm. Wenn Leuchtstofflampen starten oder abschalten. Aber das ist auch ein Thema für Später!

    Nein, i_make_it,
    ich sehe das nicht so Schwarz.
    Auch habe ich in diesem doch kurzen Tread sehr viele Hinweise bekommen.

    Es wird schon was werden.

    Dankeschön

    Achim

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Nochmal Danke,
    das ist einfach Spitze, was habe ich schon erfolglos probiert.
    Und so einfach ohne "else" und so.
    Und current heißt nicht Strom sondern derzeitiger Zeitstempel.
    Und while heißt: Solange der Zustand wahr ist. In dem Fall: Bist 1000ms vergangen sind. Deshalb auch <.
    Total übersichtlich.


    Ich bin aber auch ein Dösel
    Geändert von achso (29.06.2017 um 19:43 Uhr)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Das nächste Problem?

    Das mit den millis funktioniert super. Jetzt habe ich einen Roboter mit 2 Rädern gebaut.
    Erstmal nur 2 LDR Messbrücken angebaut. Das funktioniert gut. Das Problem ist, das er nicht unbedingt weiß wo vorne ist.(Die Sonne) Wenn er sich aus dem Schatten dreht fährt er von der Sonne weg, wenn das Licht gleichmäßig ist und weder rechts noch links der Grenzwert zum Drehen erreicht wird, fährt er geradeaus. Also wenn es sehr hell ist und eine weiße Wand in der Sonne glänzt fährt er darauf zu.
    Ich wollte noch eine LDR Messbrücke vorne/hinten installieren.
    Nur laufen jetzt ja die Millis immer eigenständig weiter. Wenn ich jetzt bedingt durch den neuen vorderen/hinteren LDR eine Wende programmiere, weiß der Arduino doch nicht, was er mit dem MotorPin machen soll. Die eine Messbrücke sagt rechtsrum, die andere linksrum!

    Mit delay wäre das kein Problem.
    Dann liefe ja alles der Reihe nach.
    Aber dann würde, wenn er geradeaus in den Schatten fährt, nur die erste verdunkelte Messbrücke befehlen, das ihr Motor wendet. Mit Millis sind beide ja unabhängig.

    Hier der Code bis jetzt.
    Code:
    const int motorPin_1 = 10; // Motor rechts
    const int motorPin_2 = 9; // Motor rechts
    const int motorPin_3 = 12; // Motor links
    const int motorPin_4 = 13; // Motor links
    int messPin_1 = A2; // Ir Brücke--Links
    int messPin_2 = A3; // Ir Brücke--Rechts
    
    
    
    void setup()
    {
    
      pinMode(4, INPUT);// IR Sensor
      pinMode(3, INPUT);  //IR Sensor
      pinMode(10, OUTPUT); //Zum 74 AC14
      pinMode(9, OUTPUT); //Zum 74 AC14
      pinMode(12, OUTPUT); //Zum 74 AC14
      pinMode(13, OUTPUT); //Zum 74 AC14
    
    }
    
    void loop()
    {
      unsigned long currentMillis ;
      
      int val = analogRead (A2);
    
      messPin_2 = map(val, 0, 1023, 0, 100);//Ir Links
      if (messPin_2 < 50)
      {
        digitalWrite(motorPin_1, HIGH);//Motor Rechts Vor
        digitalWrite(motorPin_2, LOW);//Motor Rechts Vor
        currentMillis = millis();//Zeitstempel
        while(millis()-currentMillis <1200); //warten xxx millis
      }
      else
      {
         digitalWrite(motorPin_1, LOW);//Motor Rechts Rück
        digitalWrite(motorPin_2, HIGH);//Motor Rechts Rück
      }
      {
        int val = analogRead (A3);
    
        messPin_1 = map(val, 0, 1023, 0, 100);//IR Rechts
        if (messPin_1 < 50)
        {
          digitalWrite(motorPin_3, HIGH);//Motor Links VOR
          digitalWrite(motorPin_4, LOW);//Motor Links VOR
         currentMillis = millis();//Zeitstempel
        while(millis()-currentMillis <1200); //warten xxx millis
        }
        else
        {
          digitalWrite(motorPin_3, LOW);//Motor Links Rück
          digitalWrite(motorPin_4, HIGH);//Motor Links Rück
        }
          
      }
    }
    Ich möchte erreichen, dass wenn die vorne/hinten Messbrücke den Robot drehen will obiger Loop ohne Funktion ist. Nach dem Drehen aber wieder läuft??

    Achim

  4. #4
    HaWe
    Gast
    geht es, wenn du eine Variable spendierst, z.B.
    bool DrehungAktiv=false;

    wenn nicht gedreht werden soll, steht sie auf false, dann darf gemessen werden;
    wenn aber gedreht werden soll, wird sie auf true gesetzt, und dann darf nicht mehr gemessen werden.
    Das musst du vor dem Messen nur vorher abfragen per
    if(DrehungAktiv) {...}

    Das ist im Prinzip dann ein sog. "Zustandsautomat", wenn ich mich nicht irre...

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hallo HAWE,
    dankeschön!
    Das muss ich mir im gesamten nochmal überlegen..
    Das steht auch in dem Arduino Kochbuch, aber für mich unverständlich.
    Dann kann ich am Anfang des Loop also eine weitere IF Abfrage machen.

    Auf jeden Fall weiß ich jetzt den Weg und wo ich suchen muß.

    Achim

Ähnliche Themen

  1. Lovotics: Wenn der Roboter eifersüchtig wird
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 30.06.2011, 16:50
  2. Spannungsregler wird heiß, wenn ISP angesteckt wird
    Von loukumas im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 11.02.2008, 16:53
  3. Was Passiert wenn die Last zu groß wird.
    Von Süße Hexe im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 13.09.2007, 21:20
  4. Led leuchtet, wenn Strom entnommen wird
    Von Christoph2 im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 23.09.2006, 19:38
  5. Simulator wird langsam wenn beim ATtiny2313 PB0=1 ist
    Von felack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 10.10.2005, 14:52

Berechtigungen

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

Labornetzteil AliExpress