- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: Arduino Interrupt Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Die ganzen Probleme kenne ich.

    Aber es ist ein Prüfungsaufgabe und da steht nur etwas von einer Lichtschranke.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #2
    HaWe
    Gast
    richtig, wie die Aufgabe praktisch / technisch zu lösen ist, ist nicht gefragt.

    Einen Startzeitpunkt braucht man ntl, vielleicht gibt es einen Start-Button, der die Kugeln auf der Rampe startet? Muss man abklären!
    wenn, dann wäre das der Startzeitpunkt. Man wartet solange, bis der button gedrückt wurde: gedrückt = high = true (pulldown gegen Masse, wenn gedrückt dann auf Vc hochgeschaltet), dann liest man die Systemzeit mit millis() aus.
    Code:
    #define startbtn 3 // wenn der Startbutton auf pin 3 liegt.
    uint32_t t0;
    
    while ( !( digitalRead(startbtn) ) );
    t0 = millis();
    in diesem Moment ist die Lichtscharnke lt. Aufgabenstellung noch auf LOW (niedriger Wert), wenn der Ball durchläuft, geht sie auf HIGH (5V, hoher Wert).
    Sagen wir, die LS liegt auf pin A0:
    Code:
     #define LSpin A0
    
    int  ls;
    ls = analogRead( LSpin );
    Das ergibt im Moment des Kugel-Durchlaufs also einen Pinchange, und dafür gibt es bei Arduino einen Pinchange-Interrupt (LOW => HIGH)

    Vermutlich (!) geht sie nach dem Durchlauf automatisch wieder auf LOW, aber auch das musst du rauskriegen.


    Ich darf dir hier sicher nicht die Lösung für den Interrupt verraten, denn es ist ja eine Prüfungsaufgabe, aber dazu gibt es diesen Link:
    http://playground.arduino.cc/Main/PinChangeInterrupt

    Sobald dieser ausgelöst wird, wird wieder mit millis() die Zeit gemessen, diesmal t1.
    Nun hast du 2 Systemzeiten, die Differenz ist die Laufzeit:

    Code:
    uint32_t  t1, dt;
    
    t1 = millis();
    dt = t1 - t0;


    da hier in der Aufgabenstellung aber nichts über einen Startbutton gesagt wurde, kann es auch sein, dass der Laufzeitunterschied zwischen 2 und mehreren darauf folgenden Bällen gemessen werden soll, dann geht es etwas anders:

    t0 : Zeit millis() 1.Pinchange -Interrupt (LOW ->HIGH)
    t1 : Zeit millis() beim darauffolgenden Pinchange interrupt (LOW ->HIGH)

    dt = t1-t0;

    jetzt die letzte Zeit als t0 speichern und dann wieder t1 beim 2. Ball lesen:
    t0 = t1;
    t1 : Zeit millis() beim darauffolgenden Pinchange interrupt (LOW ->HIGH)

    usw.

    wie gesagt, die Start-Bedungung für die Stoppuhr musst du rauskriegen!



    klar soweit?

Ähnliche Themen

  1. Arduino Interrupt
    Von Cysign im Forum Arduino -Plattform
    Antworten: 13
    Letzter Beitrag: 30.01.2017, 17:47
  2. Antworten: 13
    Letzter Beitrag: 07.11.2015, 01:21
  3. Rosenkrieg: Arduino zahlt Arduino keine Lizenzgebühren
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 20.03.2015, 08:00
  4. Erfahrungen/Tutorial: Programmierung von Arduino Due + entspr. IDE?
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 18.06.2014, 10:07
  5. Antworten: 9
    Letzter Beitrag: 31.03.2010, 09:26

Berechtigungen

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

12V Akku bauen