Bascom LCD Menü Lüfter u. leds ansteuern und dimmen

drake18

Neues Mitglied
18. Jan. 2013
9
0
0
Sprachen
wie schon oben beschrieben suche ich ein programm mit dem ich lüfter und auch leds ansteuern kann mit einem microprozessor.gibt es dazu irgendwelche guten how to´s,tutorials oder eventuell auch brauchbare fertige programme?
könnte dabei jede unterstützung gut gebrauchen :rolleyes:
 
Es ist immer wieder geil, was für Vorstellungen manche Menschen auf diesem Planeten haben.

Wie wäre es, wenn Du Dich mal hinpflanzt, Dir Gedanken machst, vielleicht sogar was zusammen bekommst und uns erst dann nach Hilfe fragst?

Keiner hier wird Dir was fertiges vor die Nase halten.
 
ja man könnte ja auch mal nen lernbuch vorschlagen z.B. wo einiges beschrieben ist zum thema lcd programmierung und co :p

naja sowas hab ich bereits schon mal:

Code:
$regfile "m8def.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 20 * 4

Dim A As Byte
Dim Menuflag As Bit

Config Portd.0 = Input
Config Portd.1 = Input
Config Portd.7 = Output
Config Portd.6 = Output


Menuflag = 0

Cursor Off
Cls
Locate 1 , 1

Lcd "Led 7 <-- "

Locate 2 , 1
Lcd "Led 8"

Locate 4 , 1
Lcd "Auswahl treffen"
Do

   If Pind.0 = 0 Then
      Menuflag = Not Menuflag
      If Menuflag = 0 Then
         Locate 1 , 6
         Lcd " <-- "
         Locate 2 , 6
         Lcd "     "
      Else
         Locate 1 , 6
         Lcd "     "
         Locate 2 , 6
         Lcd " <-- "
      End If
      Waitms 1000
   End If

   If Pind.1 = 0 Then
      If Menuflag = 0 Then
         Portd.6 = 0
         Portd.7 = 1
      Else
         Portd.6 = 1
         Portd.7 = 0
      End If
   End If
Loop
End

nur frag ich mich jetz wie man noch sowas wie sub menüs hinein bekommt
 
Hallo drake18!

Erst einmal.....
Willkommen im AVR-Praxis Forum! :ciao:


Nimm es den Beiden bitte nicht krum, aber es gibt immer wieder mal neue User die ohne große "Einleitung" gleich nach fertigen Programmen fragen. :(
Ich denke mal, das Hemi und Dino das so verstanden haben......
und deswegen auch gleich so reagierten. :wink:


Deinem ersten Beitrag nach wusste ich auch nicht so recht, was ich davon halten sollte.
Vielleicht suchst du ja wirklich nur nach Info`s, wie Bücher, Webseiten, oder Beispielprogramme? :hmmmm:
Hätte aber auch sein können, dass du einfach nur auf der Suche nach fertigen Lösung bist.... um diese dann nur noch etwas modifizieren zu müssen. :wink:

Egal......
ich werde mir dein Beispielprogramm gleich mal anschauen und dann sehen wir weiter.
Was für Sub-Menü´s möchtest du denn realisieren?


Ach, eine Frage noch:
LED`s zu dimmen geht via PWM ja recht einfach zu erklären.
Bei einem Lüfter ist das dann schon etwas anders.
Um was für einen Lüfter handelt es sich denn?
Ein 5V-DC oder ein 12V-DC oder ein 24V-AC oder gar einen 230V-AC ? :hmmmm:
Für präzise Informationen und Fragen, bekommt man auch präzise Antworten bzw. Hilfe. :cool:

Ansonsten könnte ich auch genauso oberflächlich Antworten wie du gefragt hast:
Beides kannst du mit PWM realisieren. :D


Grüße,
Cassio
 
um einen pc 12v gehäuse lüfter handelt es sich hierbei :D

und ja ein programm beispiel für menüs und untermenüs würde mich schon mal ein großes stück weiter bringen hierbei.
habe zwar mal ein lcd menü designer programm gefunden aber wenn ich das in bascom compeliere kommen schon bei dem beispiel programm nur fehlermeldungen bei raus.

zum menü sollte es z.b so aus sehn. leds dann darunter z.b led 1 2 u. 3 und jeweils darunter an oder aus und so änlich auch beim lüfter.
beim lüfter würde ich auch gern so ne grafische prozentanzeige haben.
 
Hi Drake,

das sieht doch schon besser aus :cool: Leider sind hier (wie Cassio geschrieben hat) ab und zu mal Schnorrer unterwegs denen selber machen einfach zu blöd ist. Nach dem Motto: Warum soll ich mir Arbeit machen? Das können ja die anderen erledigen :p

Also auch von mir herzlich willkommen im Forum :flowers:

ja man könnte ja auch mal nen lernbuch vorschlagen z.B. wo einiges beschrieben ist zum thema lcd programmierung und co :p

Kühnel, Claus;
Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR
Preis: 34.95 Euro (Ladenpreis)
2010, 3., bearbeitete und erweiterte Auflage 444 S. PB 170x220 mm
Skript Verlag Kühnel
3-907857-14-3
ISBN-13: 9783907857144


Walter, Roland;
AVR-Mikrocontroller-Lehrbuch
Einführung in die Welt der AVR-RISC-Mikrocontroller am Beispiel des ATmega8
Preis: 39.00 Euro (Ladenpreis)
2009, 3., aktualisierte Aufl. 232 S. GB 155x220 mm 500 gr
Denkholz Buchmanufaktur
3-9811894-4-2
ISBN-13: 9783981189445


Hoffmann, Stefan
Einfacher Einstieg in die Elektronik mit AVR-Mikrocontroller und BASCOM
Systematische Einführung und Nachschlagewerk mit vielen Anregungen
Preis: 54.00 Euro (Ladenpreis)
2010, 676 Seiten
Books on Demand
3-8391-8430-4
ISBN-13: 9783839184301


Die hab ich mir letztens mal zusammengesucht. Das sind die drei Bücher die eigentlich bei Bascom als "Standardliteratur" angesehen werden können.

habe zwar mal ein lcd menü designer programm gefunden aber wenn ich das in bascom compeliere kommen schon bei dem beispiel programm nur fehlermeldungen bei raus.
Dies "ich klick mir was zusammen"-Dinger kann man normalerweise in die Tonne hauen. Du wirst immer selber noch Hand anlegen müssen. Es kann sogar sein das es mehr Arbeit ist diese zusammengeklickten Dinger zum laufen zu bekommen als wenn man es gleich komplett selber gemacht hätte. Außerdem lernt man beim selbermachen mehr.

Die PC-Lüfter kann man denn nicht komplett auf Null fahren. Du kannst die nicht auf niedrigster Stufe anlaufen lassen. Außerdem benötigt die Steuerelektronik in den PC-Lüftern auch ein wenig Spannung. Es ist also nicht wie bei einem normalen Motor bei dem man (wenn er es mitmacht) auch mit 1V eine sehr niedrige Drehzahl hinbekommen kann.

Gruß
Dino
 
Hallo drake!

Was du später alles haben möchtest, kannst du dir ja selber überlegen und dann bei Zeiten ins Programm mit einbauen.

Ich habe eben mal im Forum gestöbert und etwas für dich gefunden.
Schau doch mal hier!
Ich könnte mir vorstellen, dass da einiges brauchbares für dich drin steht. :wink:


Viel Spaß beim Stöbern,
Cassio
 
Hallo Dino!

Es ging bei dem Link ja auch mehr um die Entwicklung des Menü`s. :wink:

Die Angelegenheit mit den zwei 7805er ist da ja auch schon angesprochen worden.


Grüße,
Cassio
 
alles klar werd ich mir morgen mal in aller ruhe durch lesen und mal nen bisschen probieren ob ich da weiterkomme :cool:
 
hab hier mal einen kleinen code zusammen gewurfelt

Code:
   $regfile = "m1280def.dat"
   $crystal = 8000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100


Config Lcdpin = Pin , Db4 = Porta.1 , Db5 = Porta.2 , Db6 = Porta.3 , Db7 = Porta.4 , E = Porta.0 , Rs = Porta.5
Config Lcdbus = 4
Config Lcd = 16 * 2
Cursor Off
Cls


Const Sysstart = 50
Const Waitumschalten = 100

Const Lcdrows = 2
Const Lcdcols = 16

Const Keyup = 1
Const Keydown = 2
Const Keyright = 3
Const Keyleft = 4
Const Keyback = 5
Const Keymenu = 6
Const Keyok = 7



Const Mnumaxlines = 10


Dim N As Byte
Dim Mnuselect As Word
Dim Mnuselectscount As Byte
Dim Mnuselectback As Word
Dim Mnuselectpointer As Byte
Dim Mnuselectpointer_old As Byte
Dim Mnutext(mnumaxlines) As String * Lcdcols
Dim Mnuselects(mnumaxlines) As Word
Dim K As Word
Dim M As Word
Dim Mnuselectold As Word
Dim Keypressed As Byte



N = 3
Mnuselectpointer = 1







'Keyup an PC4
Keyup1 Alias Pinc.4
Config Keyup1 = Input
Portc.4 = 1

'Keyleft an PC3
Keyleft1 Alias Pinc.3
Config Keyleft1 = Input
Portc.3 = 1

'Keyright an PC7
Keyright1 Alias Pinc.7
Config Keyright1 = Input
Portc.7 = 1

'Keymenu an PC6
Keymenu1 Alias Pinc.6
Config Keymenu1 = Input
Portc.6 = 1

'Keydown an PC2
Keydown1 Alias Pinc.2
Config Keydown1 = Input
Portc.2 = 1

'Keyback an PC0
Keyback1 Alias Pinc.0
Config Keyback1 = Input
Portc.0 = 1

'Power an PC1
Power1 Alias Pinc.1
Config Power1 = Input
Portc.1 = 1

'OK an PC5
Keyok1 Alias Pinc.5
Config Keyok1 = Input
Portc.5 = 1

'USB Led an PJ7
Usbled Alias Portb.3
Config Usbled = Output

'PwrLedOn
Pwrledon Alias Portg.0
Config Pwrledon = Output

'PwrLedOff
Pwrledoff Alias Portg.1
Config Pwrledoff = Output

Pwrledon = 1



Do
Select Case Mnuselect
   Case 0:
      Mnuselectback = 0
      Mnutext(1) = "Steuerung"
      Mnuselects(1) = 1
      Mnutext(2) = "Systemparameter"
      Mnuselects(2) = 2
      Mnutext(3) = "Menue verlassen"
      Mnuselects(3) = 0
      Mnuselectscount = 3
      Gosub Mnushow

   Case 1:
      Mnuselectback = 0
      Mnutext(1) = "Ausgänge"
      Mnuselects(1) = 0
      Mnutext(2) = "RGB"
      Mnuselects(2) = 0
      Mnuselectscount = 2
      Mnuselectpointer_old = 1
      Gosub Mnushow

   Case 2:
      Mnuselectback = 0
      Mnutext(1) = "Systemzeit"
      Mnuselects(1) = 0
      Mnutext(2) = "Spannungen"
      Mnuselects(2) = 0
      Mnutext(3) = "Verbrauch"
      Mnuselects(3) = 0
      Mnutext(4) = "RC5 Test"
      Mnuselects(4) = 0
      Mnuselectscount = 4
      Gosub Mnushow





   Case Else:
      Mnuselect = 0
      Mnuselectpointer = 1
End Select
Loop



Mnushow:

       Mnuselectold = Mnuselect


       Mnuselectpointer = 1


       While Mnuselectold = Mnuselect

           M = 1
           Cls

           N = Mnuselectpointer + Lcdrows
           Decr N


           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If


           For K = Mnuselectpointer To N
              Locate M , 1
              If K = Mnuselectpointer Then
                 Lcd Chr(&B01111110) ; ""
              Else
                 Lcd " "
              End If
              Lcd Mnutext(k)
              Incr M
           Next


           Do
               Gosub Tstq
           Loop Until Keypressed > 0



           If Keypressed = Keyup Then

               If Mnuselectpointer > 1 Then
                   Decr Mnuselectpointer
               End If
           End If


           If Keypressed = Keydown Then

               If Mnuselectpointer < Mnuselectscount Then
                   Incr Mnuselectpointer
               End If
           End If


           If Keypressed = Keyright Then
               Mnuselect = Mnuselects(mnuselectpointer)
           End If


           If Keypressed = Keyleft Then
               Mnuselect = Mnuselectback
           End If

           If Keypressed = Keyback Then
               Mnuselect = Mnuselectback
           End If

           If Keypressed = Keyok Then
               Mnuselect = Mnuselects(mnuselectpointer)
           End If

           If Keypressed = Keymenu Then
               Mnuselect = 0
           End If


      Wend
      Cls

   Return



Tstq:
If Keypressed = Keyright Then
   Do
   Loop Until Keyright1 = 1
   Keypressed = 0
End If
If Keypressed = Keydown Then
   Do
   Loop Until Keydown1 = 1
   Keypressed = 0
End If
If Keypressed = Keyup Then
   Do
   Loop Until Keyup1 = 1
   Keypressed = 0
End If
If Keypressed = Keyleft Then
   Do
   Loop Until Keyleft1 = 1
   Keypressed = 0
End If

If Keypressed = Keyback Then
   Do
   Loop Until Keyback1 = 1
   Keypressed = 0
End If

If Keypressed = Keymenu Then
   Do
   Loop Until Keymenu1 = 1
   Keypressed = 0
End If

If Keypressed = Keyok Then
   Do
   Loop Until Keyok1 = 1
   Keypressed = 0
End If



If Keyright1 = 0 Then
   Keypressed = Keyright
End If
If Keydown1 = 0 Then
   Keypressed = Keydown
End If
If Keyup1 = 0 Then
   Keypressed = Keyup
End If
If Keyleft1 = 0 Then
   Keypressed = Keyleft
End If
If Keymenu1 = 0 Then
   Keypressed = Keymenu
End If
If Keyok1 = 0 Then
   Keypressed = Keyok
End If
If Keyback1 = 0 Then
   Keypressed = Keyback
End If
Return

kann man dabei noch was verbessern? und wie bekomme ich so eine prozennt anzeige mit blockgrafik mit rein?also ungefär so wie in dem beispiel

http://www.youtube.com/watch?v=BKUAnithvHs
 
Was meinst Du jetzt konkret? Die Anzeige der Prozente als Zahlen?
Du hast ja eine bekannte Reichweite des PWM-Zählers, und den bekannten PWM-Duty-Cycle. Der Rest sollte dann 'ne simple Verhältnisgleichung sein. Die Ergebniszahl sollte man unter Zuhilfenahme von Fusing (is ja 'ne Hochsprache, gelt ?!) in den entsprechenden String umwandeln können.
(Andererseits könnte man einen 16bit-Timer aber auch bei 999 überlaufen lassen (Frequenzkorrekten Fast-PWM), und als OutputCompare-Werte direkt sozusagen Deziprozente vorgeben... )
Oder die Balkengrafik? Das sind ja eigentlich nur n Stellen, die entweder das eine, oder das andere Zeichen anzeigen. Ist ähnlich wie oben. Statt der Prozente (100 bzw anzuzeigende Zahl) hast Du jetzt die Anzahlen der Kästchen (alle bzw die gefüllten)
Hier wird die Rechnung sehr einfach, wenn nur 2erpotenzen im Spiel sind. Bei 16 muß also nur das oberste Nibble der PWM-DC verwendet werden - dieses ist bereits die Anzahl der gefüllten Kästchen...
 
gibts für sollche pwm lcd Balkengrafik mit lcd Helligkeit auch ein paar programmbeispiele?
 
k.A. ich verwende Bascom kaum...
Aber wo ist das Problem? Ein Großteil der Displays wird von Bascom-Bordmitteln unterstützt. Genauere Infos->Bascom-Hilfe->Config LCD/Config LCDPIN.
Aus Deinem PWM sollten Dir ja der DC (outputCompare) und der Überlaufpunkt (Top) des verwendeten Timers bekannt sein. Um die Prozente auszurechnen, verwendet man den Dreisatz (Mathe Klasse 4 oder so):
Code:
Prozente=DC*100
Prozente=Prozente/Top
Um das auf dem Display auszugeben, machst Du da einen String draus, und zwar mit fusing (siehe Bascom-Hilfe).
Beim Balken ähnlich - statt der 100 halt die maximale Länge des Balkens. Das Ergebnis dann runden, und in ein Byte etc umwandeln. Den so errechneten Wert benutzt Du dann in einer Schleife, die den Balken zeichnet:
-Cursor mit locate oder so setzen
-For-Schleife bis Balkenlänge
-Vergleich Schleifenindex und Balkenvergleichswert - dementsprechend das eine oder das andere Zeichen ausgeben
-next
Wenn der Zeichenvorrat des Displays keine geeigneten Zeichen hergibt, kann man selbst welche definieren. Infos dazu lassen sich im entsprechenden Datenblatt und der Bascom-Hilfe finden. (deflcdchar, dort ist dann der entsprechende designer verlinkt...)
 
ok soweit hab ich das schon mal

Code:
   $regfile = "m1280def.dat"
   $crystal = 8000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100


Dim Up As Word
Dim I As Word
Dim A As Word

Config Lcdpin = Pin , Db4 = Porta.1 , Db5 = Porta.2 , Db6 = Porta.3 , Db7 = Porta.4 , E = Porta.0 , Rs = Porta.5
Config Lcdbus = 4
Config Lcd = 16 * 2
Cursor Off
Cls

Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1

Config Pinc.4 = 1
Config Pinc.2 = 1

Compare1a = 200

Up = 200

Do
 Debounce Pinc.4 , 0 , Keyup1 , Sub

 Debounce Pinc.2 , 0 , Keydown1 , Sub

  A = Compare1a / 60
  Locate 2 , 1
  For I = 1 To 16
  If A >= I Then
  Lcd Chr(0)
  Else
  Lcd " "
  End If
  Next
 Loop

 End

Keyup1:                                                    
 If Up < 1000 Then
 Up = Up + 50
 End If
 Compare1a = Up
 Return

 Keydown1:                                                 
If Up > 200 Then
Up = Up - 50
End If
Compare1a = Up

Return

nun hab ich noch 2 weitere fragen.
1.kann man die reaktion von dem kleinen programm etwas schneller gestalten?
2.wie kann ich dieses kleine programm in das menü mit einbinden das es nur aktive ist wenn ich in dem menü punkt "Lüfter" mich befinde?
 
hab jetz schon einige versuche angestellt die beiden sachen zu kombinieren aber ich bekomms einfach nich hin -.-

wo is den der fehler? bin am verzweifeln :boring:

Code:
   $regfile = "m1280def.dat"
   $crystal = 8000000
   $hwstack = 100
   $swstack = 100
   $framesize = 100


Config Lcdpin = Pin , Db4 = Porta.1 , Db5 = Porta.2 , Db6 = Porta.3 , Db7 = Porta.4 , E = Porta.0 , Rs = Porta.5
Config Lcdbus = 4
Config Lcd = 16 * 2
Cursor Off
Cls

Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1


Const Sysstart = 50
Const Waitumschalten = 100

Const Lcdrows = 2
Const Lcdcols = 16

Const Keyup = 1
Const Keydown = 2
Const Keyright = 3
Const Keyleft = 4
Const Keyback = 5
Const Keymenu = 6
Const Keyok = 7



Const Mnumaxlines = 10


Dim N As Byte
Dim Mnuselect As Word
Dim Mnuselectscount As Byte
Dim Mnuselectback As Word
Dim Mnuselectpointer As Byte
Dim Mnuselectpointer_old As Byte
Dim Mnutext(mnumaxlines) As String * Lcdcols
Dim Mnuselects(mnumaxlines) As Word
Dim K As Word
Dim M As Word
Dim Mnuselectold As Word
Dim Keypressed As Byte
Dim Up As Word
Dim I As Word
Dim A As Word


Compare1a = 200

Up = 200


N = 3
Mnuselectpointer = 1


'Keyup an PC4
Keyup1 Alias Pinc.4
Config Keyup1 = Input
Portc.4 = 1

'Keyleft an PC3
Keyleft1 Alias Pinc.3
Config Keyleft1 = Input
Portc.3 = 1

'Keyright an PC7
Keyright1 Alias Pinc.7
Config Keyright1 = Input
Portc.7 = 1

'Keymenu an PC6
Keymenu1 Alias Pinc.6
Config Keymenu1 = Input
Portc.6 = 1

'Keydown an PC2
Keydown1 Alias Pinc.2
Config Keydown1 = Input
Portc.2 = 1

'Keyback an PC0
Keyback1 Alias Pinc.0
Config Keyback1 = Input
Portc.0 = 1

'Power an PC1
Power1 Alias Pinc.1
Config Power1 = Input
Portc.1 = 1

'OK an PC5
Keyok1 Alias Pinc.5
Config Keyok1 = Input
Portc.5 = 1

'USB Led an PJ7
Usbled Alias Portb.3
Config Usbled = Output

'PwrLedOn
Pwrledon Alias Portg.0
Config Pwrledon = Output

'PwrLedOff
Pwrledoff Alias Portg.1
Config Pwrledoff = Output

Summer Alias Portj.6



Pwrledon = 1



Do
Select Case Mnuselect
   Case 0:
      Mnuselectback = 0
      Mnutext(1) = "Steuerung"
      Mnuselects(1) = 1
      Mnutext(2) = "Lüfter"
      Mnuselects(2) = 2
      Mnutext(3) = "Menue verlassen"
      Mnuselects(3) = 0
      Mnuselectscount = 3
      Gosub Mnushow

   Case 1:
      Mnuselectback = 0
      Mnutext(1) = "Ausgänge"
      Mnuselects(1) = 3
      Mnutext(2) = "RGB"
      Mnuselects(2) = 0
      Mnuselectscount = 2
      Mnuselectpointer_old = 1
      Gosub Mnushow

   Case 2:
   Compare1a = 200

Up = 200

    Do
  Debounce Keyup1 , 0 , Keyup

 Debounce Keydown1 , 0 ,  Keydown

  A = Compare1a / 60
  Locate 2 , 1
  For I = 1 To 16
  If A >= I Then
  Lcd Chr(0)
  Else
  Lcd " "
  End If
  Next
  Loop

    Case 3:
      Mnuselectback = 0
      Mnutext(1) = "led an"
      Mnuselects(1) = 4
      Mnutext(2) = "led aus"
      Mnuselects(2) = 5
      Mnutext(3) = ""
      Mnuselects(3) = 0
      Mnutext(4) = ""
      Mnuselectscount = 4
      Gosub Mnushow

    Case 4:
      Portg.0 = 1
      Mnuselect = 1

    Case 5:
      Portg.0 = 0
      Mnuselect = 1

   Case Else:
      Mnuselect = 0
      Mnuselectpointer = 1
End Select
Loop



Mnushow:

       Mnuselectold = Mnuselect


       Mnuselectpointer = 1


       While Mnuselectold = Mnuselect

           M = 1
           Cls

           N = Mnuselectpointer + Lcdrows
           Decr N


           If N > Mnuselectscount Then
               N = Mnuselectscount
           End If


           For K = Mnuselectpointer To N
              Locate M , 1
              If K = Mnuselectpointer Then
                 Lcd Chr(&B01111110) ; ""
              Else
                 Lcd " "
              End If
              Lcd Mnutext(k)
              Incr M
           Next


           Do
               Gosub Tstq
           Loop Until Keypressed > 0



           If Keypressed = Keyup Then

               If Mnuselectpointer > 1 Then
                   Decr Mnuselectpointer
               End If
           End If


           If Keypressed = Keydown Then

               If Mnuselectpointer < Mnuselectscount Then
                   Incr Mnuselectpointer
               End If
           End If


           If Keypressed = Keyright Then
               Mnuselect = Mnuselects(mnuselectpointer)
           End If


           If Keypressed = Keyleft Then
               Mnuselect = Mnuselectback
           End If

           If Keypressed = Keyback Then
               Mnuselect = Mnuselectback
           End If

           If Keypressed = Keyok Then
               Mnuselect = Mnuselects(mnuselectpointer)
           End If

           If Keypressed = Keymenu Then
               Mnuselect = 0
           End If


      Wend
      Cls

   Return



Tstq:
If Keypressed = Keyright Then
   Do
   Loop Until Keyright1 = 1
   Keypressed = 0
End If
If Keypressed = Keydown Then
   Do
   Loop Until Keydown1 = 1
   Keypressed = 0
End If
If Keypressed = Keyup Then
   Do
   Loop Until Keyup1 = 1
   Keypressed = 0
End If
If Keypressed = Keyleft Then
   Do
   Loop Until Keyleft1 = 1
   Keypressed = 0
End If

If Keypressed = Keyback Then
   Do
   Loop Until Keyback1 = 1
   Keypressed = 0
End If

If Keypressed = Keymenu Then
   Do
   Loop Until Keymenu1 = 1
   Keypressed = 0
End If

If Keypressed = Keyok Then
   Do
   Loop Until Keyok1 = 1
   Keypressed = 0
End If



If Keyright1 = 0 Then
   Keypressed = Keyright
End If
If Keydown1 = 0 Then
   Keypressed = Keydown
End If
If Keyup1 = 0 Then
   Keypressed = Keyup
End If
If Keyleft1 = 0 Then
   Keypressed = Keyleft
End If
If Keymenu1 = 0 Then
   Keypressed = Keymenu
End If
If Keyok1 = 0 Then
   Keypressed = Keyok
End If
If Keyback1 = 0 Then
   Keypressed = Keyback
End If
If Power1 = 0 Then
   Keypressed = Pwrledoff
End If

Keyup:                                                    
 If Up < 1000 Then
 Up = Up + 50
 End If
 Compare1a = Up
 Return

 Keydown:                                                  
If Up > 200 Then
Up = Up - 50
End If
Compare1a = Up
Return
 
@Menu: hatte Markus hier mal ein ganz brauchbares Konzept ... ähm ... übernommen und angepaßt. Kern der Sache war hier, daß ein detektierter Tastendruck keine konkrete Sub anspringt (wo dann ausgewertet wird was gemacht werden soll), sondern sich der bisher aktive screen in Variablen Sprungziele für jeden Taster bereithält. Am Ziel werden dann die neuen Ziele (des neuen Screen) in die Variablen geschrieben. Das ziel kann also ein beliebiger anderer Screen (mit der entsprechenden Struktur) sein, oder eine Sub.
@Performance: Bin jetzt zwar Dein Programm nicht durchgegangen, jedoch folgender Hinweis:
-Debounce ist mMn so umgesetzt: Als erstes wird die Bedingung überprüft, ist sie nicht erfüllt, gehts weiter (Taste nicht erkannt), ist sie erfüllt, wartet der Controller 25ms, und prüft nochmal. Ist sie dann mmer noch erfüllt, gehts bei dem entsprechenden Goto/Gosub weiter. Jeder Tastendruck bremst das Programm also erheblich aus...
-LCD-schreiben: kostet auch für jedes übertragene Byte - insbesondere im 4Bit-Modus. Deswegen sollte man überlegen, Wann Wo Was ausgegeben werden soll, und wann man sich das sparen kann
 
soweit so gut das menü steht soweit und alles funktioniert wie es soll^^

nur ein problem habe ich noch und zwar wenn ich die sub Routine wieder verlasse sind die eingestellten werte futsch.

wie kann ich die abspeichern?

edit: ok meine frage hat sich gerade erledigt ;)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)