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

Thema: LED Blink-Interval durch Sensor-Wert steuern..

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.06.2010
    Beiträge
    11

    LED Blink-Interval durch Sensor-Wert steuern..

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Zusammen!

    Ich bin neu hier im Forum, bzw. ich hab mich vor 1-2 Jahren mal angemeldet aber bis jetzt nur ein bisschen mitgelesen.
    Habe mir auch mal ein RN-Controll Board zusammengelötet bis jetzt aber noch nichts programmiert.
    Programmieren möchte ich in C da ich das vor mehr als 10 Jahren in der Schule hatte.
    Ist nicht viel hängen geblieben aber es hilft schon ein bisschen beim Verständnis..


    Zu meiner Frage:
    Ich möchte eine LED abhängig vom Sensor-Messwer in einem frei definierbaren Intervall blinken lassen.

    Beispiel:
    Intervall -> 10
    LED blink wenn sich der Sensor-Wert um 10 Einheiten ändert.

    Meine Lösungsansätze:

    1.
    Modulo-Operation -> Sensor-Wert % 10 = Rest
    -> 100 % 10 = 0
    -> 95 % 10 = 5
    -> 90 % 10 = 0
    Entspricht der Rest=0 soll die LED blinken.

    2.
    Einen Messwert speichern und dann den aktuellen Ist-Wert vom gespeicherten Messwert subtrahieren bis die Differenz dem Intervall-Wert entspricht.

    Wert_1 - Ist_Wert = Differenz
    Differenz = 10 -> LED blinkt

    Meines Verständnis nach müsste beides funktionieren, kann mich aber auch irren.
    Welches wäre für so eine Aufgabe die beste Lösung?


    Danke für eure Hilfe!

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hi und willkommen

    eine einfache Methode wäre es z.B. wenn du eine Select-Case Abfrage machst (z.B. in 10% Schritte).
    Und zu jedem Case hast du dann passende Timer-Werte und in der Timer-ISR wird die LED dann getoggled.
    Zum Beispiel so (musst du nur in C übersetzen):

    Select Case Sensorwert
    Case 10 : Timerwert = 100
    Case 20 : Timerwert = 200
    Case 30 : Timerwert = 300
    usw.

    So musst du nur den Sensorwert in eine Zahl zwischen 0 und 100 umrechnen und den Timerwert in das Timer-Register schreiben.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.06.2011
    Beiträge
    158
    Ein Grundproblem, dass ich bei beiden Loesungen sehe: Du gehst davon aus, dass sich der Sensorwert immer nur in Einserschritten aendert. Das tut der nur in den seltensten Faellen (bei mir jedenfalls). Du solltest also mit einer Messreihe 100,97,93,88,81,79 .. rechnen. Modulo taugt da gar nicht (ist sogar falsch: wenn der Wert wieder 100 erreicht ist die Differenz Null und es blinkt ..), ich wuerde die 2. Variante so abaendern, dass auf >= statt auf = 10 getestet wird.
    Ausser Du willst wirklich nur blinken, wenn der Unterschied exakt 10 betraegt (da frag ich mich aber, wozu das gut sein sollte

  4. #4
    Hallo,
    besser wäre es wahrscheinlich, wenn du den CTC-Mode eines Timers verwendest, dann Sensorwert einfach zu skallieren und in das Compare-Register zu schreiben.
    Gruß Jannis

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.06.2010
    Beiträge
    11
    Hallo,
    Ich habe mir jetzt mal ein kleines C-Programm geschrieben (mit TryC auf dem Mac), welches dazu verwendet werden könnte.
    Muss natürlich noch angepasst werden aber vom Prinzip her funktioniert es.
    __________________________________________________ ________________________
    #include <stdio.h>

    int a; //Time (Zeit zwischen Messwert_1 & Messwert_2)
    int b; //Differenz (Messwert_1 - Messwert_2)
    int c; //Zähler_1 (Bestimmt die Time-Differenz)
    int d; //Time-Differenz
    int e; //Zähler_2 (Bestimmt die Anzahl Ausgaben)

    int main (void)
    {
    a = 100; //Zeit zwischen den Messwerten 1 & 2
    c = 0; //Initialisierung von Zähler_1
    e = 0; //Initialisierung von Zähler_2


    printf("Differenz eingeben: "); //Abfrage: Differenz (Messwert_1 - Messwert_2)
    scanf("%d", &b);

    d = a/(b+1); //Berechnet die Zeit zwischen der Ausgabe

    while(e<b+1) //zählt die Zeit ab
    {
    do
    {
    printf("%d\n", c); //Ausgabe der einzelnen Zählerschritte
    c++; //erhöht Zähler_1 um +1
    } while(d>c); //stoppt den Zähler_1
    c = 0; //setzt den Zähler zurück
    e++; //erhöht Zähler_2 um +1
    if(e<b+1) //zählt die Ausgabe
    {
    printf("Ausgabe\n"); //Ausgabe z. B. LED oder Signalton
    }


    }

    return 0;
    }
    __________________________________________________ ________________________

Ähnliche Themen

  1. LPT über C++ durch Internet steuern
    Von Jimmy C im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 11
    Letzter Beitrag: 03.03.2005, 14:13
  2. blink schaltung frage??
    Von k3ks im Forum Elektronik
    Antworten: 18
    Letzter Beitrag: 27.02.2005, 16:09
  3. Programm unterbrechen durch Sensor?
    Von Trabukh im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 07.02.2005, 14:40
  4. 100 LED durch 8 Leitungen steuern ;-) !?
    Von Jimmy C im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 10.01.2005, 18:15
  5. Roboter durch Gedanken steuern
    Von Frank im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 17.04.2004, 22:14

Berechtigungen

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

12V Akku bauen