Wechselblinker mit einer If-Variable (Bascom)

  • Hallo,


    da mein Pollin-Evalutionsboard vor kurzem angekommen ist hab ich natürlich sofort gelötet und dann programmiert.
    Ich habe keine Vorkenntnisse in Programmiersprachen, hab mich also in die Bascom-Flut geworfen. Es gibt ja gute Tutorials, mit denen man, das denke ich, gut in die Programmiersprache einsteigen kann.
    In diesem Thread möchte ich immer wieder ein paar Fragen stellen, es soll also nicht für mein derzeitiges Problem sein, welches wäre:


    Auf dem Board möchte ich, dass alle drei Schalter gedrückt werden müssen, dass die LEDs mit einer bestimmte Frequenz blinken. Das hab ich bereits. Wenn jedoch nur einer oder zwei der Schalter gedrückt werden, soll es einen Piepston geben.
    Das soweit der Code:



    Wie man vielleicht sieht, piepst es auch, wenn man gar nichts am Board macht. Ich hab grad gar keine Idee, wie ich das anstellen soll, dass in diesem Fall nichts passiert.
    Ach, und falls am Grundgerüst oder auch im Programm irgendwas komplett falsch ist oder etwas fehlt: Ich hab gestern angefangen, aber viel gelesen. Trotzdem hab ich beinahe keine Erfahrung damit. Also nicht lachen :D


    So, ich hoffe hier gibts Microcontroller-Spezialisten (ich glaube zwar, das muss man hier nicht sein), die mir weiterhelfen können.


    Schönen Abend noch :thumbup:

  • nur so als Idee
    if portd = &b00000001 then ....
    if portd = &b00000100 then ....
    if portd = &b00000010 then ....
    if portd = &b00000111 then ....


    sowas sollte doch auch gehen


    EDIT: und vielleicht gleich strukturiert programmieren:


    do
    [...]
    if portd = &b00000111 then gosub machwas
    [...]
    Loop


    machwas:
    toggle portx.x
    waitms 100
    return

  • Snowfly: Danke, schaut übersichtlicher aus, ich werd das mal ausprobieren.


    strenter:
    Erstmal danke, das klappt...fast.
    Meine Schleife sieht jetzt so aus:


    Jetzt hab ich noch das Problem, dass es immer in kurzen Abständen piepst, wenn alle 3 Taster gedrückt werden.
    Muss ich dann noch ein If-Schleife einfügen?
    Also so:

    Code
    If Pind.2 = 1 Or Pind.3 = 1 Or Pind.4 = 1 Then
      Sound Portd.7 , 100 , 100
      Else 'mach jetzt nichts'
     End If


    Passt das so, oder ist das völliger Schwachsinn? Wenn ja, hab spontan keinen Befehl gefunden, mit dem man ein "Nichtsmachen" ausdrückt (das gibt es wahrscheinlich wieder nicht :D )

  • Einfach das "Else" weglassen... ;)


    dass es in kurzen Abständen piepst ist ja klar, weil "If Pind.2 = 1 Or Pind.3 = 1 Or Pind.4 = 1 Then" auch erfüllt ist, wenn alle drei Taster gedrückt sind...


    also müsstest Du Zeile 12-14 in eine "Else"-Bedingung der oberen If-Abfrage reinpacken, also entweder alle drei sind gedrückt, dann blinken, oder wenn nicht alle drei gedrückt sind, dann wird wieder gefragt, ob überhaupt einer gedrückt ist, falls ja, dann piepsen, falls nein, dann gar nix machen....

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ich meinte es so:


    Die oben angesprochene Lösung von snowfly halte ich übrigens nicht für gut, denn schließlich fragt er ja auch noch nicht an der Schaltung beteiligte Eingänge auf '0' ab. Und die könnten ja eine Funktion haben... Da müßte man schon vorher mittels ver-UND-ung die benötigten Bits maskieren. Halte ich jetzt für etwas mehr Aufwand, und das Ganze wird unübersichtlich.


    Apropos: Gibt es in der Sprache eigentlich keine Kommentarfunktion?


    Danke, Paule. Jetzt mit Kommentaren versehen. ;)

  • So, mit dem Code von strenter hats jetzt funktioniert und ich habs sogar verstanden. Wahrscheinlich ist es einfach eine Sache des Denkens...
    Der Vollständigkeit halber:
    Reiner Code ohne Kommentare für einen ATmega16 auf dem Pollin Evalutionsboard:


  • Wenn Du Code schreibst empfehle ich Dir, diesen auch mit Kommentaren auszustatten. Kommentare nehmen im Chip nämlich keinen Platz weg, da der Compiler diese nicht beachtet, und Du wirst dann in Jahren noch wissen, was Du da eigentlich zusammengeschrieben hast.
    Oder um es anders auszudrücken: How to write good code (flowchart) :D