- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 44

Thema: Uno R3 mit 128x64 Pixel Display und Dreh-Encoder grafische Anzeigeprobleme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Hast du den Pseudocode aus meinem Post (#24) verstanden und weißt wie er funktioniert?

    Du benötigst 2 Flankenauswertungen, eine zum Einsteigen und eine zum Verlassen der Funktion:
    Code:
    wenn ((Taste == 1) && (Taste_alt == 0)) x=1;
    Taste_alt = Taste;
    
    while (x == 1)
    {
    wenn ((Taste == 1) && (Taste_alt == 0)) x=0;
    Taste_alt = Taste;
    ...
    ...
    ...
    }
    Wenn die Funktion so ist, invertierst du ja "x" einfach, so wie ich es oben geschrieben habe.

    MfG Hannes

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Hast du den Pseudocode aus meinem Post (#24) verstanden und weißt wie er funktioniert?
    Der Code funktioniert auch genau wie gewünscht! Danke für die Hilfe.

    So ganz genau verstehe ich es noch nicht.
    wenn ((Taste == 1) && (Taste_alt == 0)) x=1;
    das ist noch klar:
    Wenn "Taste" gedrückt und "Taste_alt" Variable gleich 0, dann setze "x" auf 1.


    Taste_alt = Taste;
    Diese Zuweisung ist dann aber nicht von der "if" Bedingung abhängig?
    Somit kommt man nach dem ersten Click mit "taste_alt==1" in der "while" an.
    Da die "if" hier nun nicht gültig ist, da "Taste_alt" ja nun "1" ist,bleibt man in der "while" und "Taste_alt" wird erst beim loslassen wieder auf "0" gesetzt?
    Nach dem drücken in der "while" wird "Taste_alt!" wieder "1". Dadurch ist dann die "if" in der "loop" ungültig.
    Auch hier wird "Taste_alt" erst nach dem loslassen des Tasters wieder auf "0" gesetzt??

    Habe ich das so richtig verstanden? Der Code, wie im Post 24 läuft nur wenn man nicht in einer "while" feststeckt, oder?
    Dann wird "x" bei jedem erneuten Tastendruck invertiert?

    Ich denke noch nicht wie mein Arduino es kann. Sehr nett, dass man hier Hilfe von Profis hat.
    So lernt man auch etwas richtig.
    Danke!!

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Die Zeile "Taste_alt = Taste" muss immer sein, weil du so immer den Zustand vom letzten Zyklus hast.

    Die "IF"-Anweisung ist nur war (und wird deswegen ausgeführt) wenn die Taste im letzten Zyklus nicht gesetzt war und du jetzt im aktuellen Zyklus die Taste drückst.
    Der Ablauf:
    - Taste nicht gedrückt und im letzten Durchlauf war sie auch nicht gedrückt
    If Abfrage wird nicht ausgeführt, weil die Taste = 0
    Diesen Zustand musst du zwischenspeichern (Taste_alt=Taste)

    - Jetzt drückst du die Taste (Taste = 1) und der letzte Zyklus war 0
    If Abfrage wird ausgeführt
    Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste jetzt 1 ist, wird auch Taste_alt 1

    - Wenn du auf der Taste bleibst ist der Zustand 1, der vorhergehende Zustand war aber auch 1
    If Abfrage wird nicht ausgeführt, weil Taste_alt = 1
    Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste noch immer 1 ist, bleibt auch Taste_alt 1

    - Wenn du von der Taste heruntergehst wird Taste = 0
    If Abfrage wird nicht ausgeführt, weil Taste 0 ist und Taste_alt 1
    Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste jetzt 0 ist, wird auch Taste_alt 0 (jetzt ist der gleiche Zustand wie oben => Taste = Taste_alt = 0)


    Die Zuweisung "Taste_alt = Taste" musst du in jedem Zyklus machen, unabhängig ob die If Schleife ausgeführt wird oder nicht.


    Die Zuweisung "Taste_alt = Taste" zwischen der Flankenerkennung und dem while muss ebenfalls dort sein, da es sonst nicht funktionieren würde. Wenn du die Zeile entfernen würdest (bzw nach der While-Schleife), bliebe Taste_alt = 0 und würde die While Schleife sofort wieder beenden (weil die Bedingung erfüllt ist).

    MfG Hannes

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Ja , verstanden!
    Ist, wenn mans weiß, ganz einfach und logisch. Genau über solche Dinge bin ich froh.
    Während meiner Übungen habe ich soviel dazu gelernt, dass ich immer geneigt bin
    nochmal ganz von vorn anzufangen, da ich inzwischen viele Probleme ganz anders lösen würde.

    Trotz allem bin ich bei Sketchen von Profis nur teilweise in der Lage alles richtig zu verstehen.
    Das braucht noch Zeit.
    Vielen Dank für Eure Bemühungen.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ist, wenn mans weiß, ganz einfach und logisch. Genau über solche Dinge bin ich froh.
    Während meiner Übungen habe ich soviel dazu gelernt, dass ich immer geneigt bin
    nochmal ganz von vorn anzufangen, da ich inzwischen viele Probleme ganz anders lösen würde.

    Das ist normal. Wenn man nach einer Zeit sich seine Programme anschaut, würde man das Programm immer etwas anders machen. Ich mache aktuell einen Kurs zur S7-Programmierung (SPS-Steuerung von Siemens) und der Ausbildner hat genau das gleiche gesagt.

    Trotz allem bin ich bei Sketchen von Profis nur teilweise in der Lage alles richtig zu verstehen.
    Das braucht noch Zeit.
    Fremden Code zu verstehen ist immer schwer, weil jeder seinen eigenen Stil hat und jeder etwas anders seine Programme schreibt.

    Vielen Dank für Eure Bemühungen.

    Gerne, dafür ist das Forum da.

    MfG Hannes

  6. #6
    HaWe
    Gast
    Trotz allem bin ich bei Sketchen von Profis nur teilweise in der Lage alles richtig zu verstehen.
    Das braucht noch Zeit.
    gerade C ist dafür bekannt, dass es dazu verleitet, völlig unverständlichen Code zu schreiben. Manche machen komplette Wettbewerbe daraus.
    https://en.wikipedia.org/wiki/Intern...C_Code_Contest
    was für den nächsten Valentins Tag:

    Code:
        #include<stdio.h>
        main() 
        {
        int i,l,u;  
         
        char *ilu="STILL THINKING HOW I DID IT?\
        !r/g.g#i.g/g!j/g.g#i.g/g+g!q0g!mag/h(g!m]g+g!p<g!h`i!l`g!k`g!h\
        <g+g!p}g!i}g!i}g!h0g!g]g}g!g}h`g!h}g+g!p<g!h`g}g`g!h}g`h]g`g0g}\
        g0g!g}g`g!h<g+g!q]g!n`g!o0g+g!r]g`h!g]g`g0h!g]g}g!g}g!j0g+g!n`g!\
        i0g!h}g!g}g!g]g`g0g]g`g0g!h0g(g+g!m}g!g]g!h]g0g`g0g]g!n0g(g+g!m]g\
        `g]g}g!g0g!g`h!gag]g!j0g(g+g!p]g0g`g0g`h]g!hag]g0g(g!k/g.h>g(g0g\
        g]g+g!i`j-g`h0g`h-g`k-g`l*g0g!i0g|gg~i+g!i.g-g.k-g.h]g.h-g.k-\
        g.i-g]g(g.g(g!g|hg~h+g!q`h0g]g`g!r(g.h>g/g]g~g0g+g!p0g`g0g!g\
        }g]h+g!u]g0g";
         
            for(i=28;l=ilu[i++];)
                for(u=(*(ilu+++i)-((1<<6)+(1<<5)+(1<<2)+(1<<1)));u--;)
                    putchar(!((l-11)^(1<<5))?l-1-(1<<5):l-1);
         
        }
    [spoiler]
    https://ideone.com/I0HTec
    [/spoiler]

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Nur so aus Neugier, ist so ein Code nun effizienter als ein langer verschachtelter "wenn>dann" Code?
    Was macht der Compiler damit? (Nur ganz grob, Details verstehe ich sowieso noch nicht..)

Ähnliche Themen

  1. Dreh-Encoder gibt "Rückschlag-Impuls" ab - wieso nur?
    Von t0bias im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 03.03.2014, 16:08
  2. Dreh-Encoder und Tasten gleichzeitig abfragen
    Von DerSchatten im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 13.05.2011, 20:16
  3. LCD-Display 128x64 mit dem Controler T6963c
    Von heri im Forum PIC Controller
    Antworten: 8
    Letzter Beitrag: 05.06.2007, 22:04
  4. Funktioniert der Pollin-Dreh-Encoder mit BASCOM?
    Von felack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 27.06.2006, 17:52
  5. Hyundai 128x64 LC-Display
    Von ShadowPhoenix im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 01.12.2005, 21:16

Berechtigungen

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

Solar Speicher und Akkus Tests