Code? Edit:
Durch den gosub aufruf am Ende von Color_fading sollte Dein Stack irgendwann überlaufen:
Ich habe es auf 22% bekommen. Keine Ahnung, ob es noch läuft
Man kann viel sparen, indem man gleichen Code in Subs auslagert.Code:$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 80 $swstack = 64 $framesize = 60 Config Pinc.0 = Input Config Pinc.1 = Input Taster1 Alias Pinc.0 Taster2 Alias Pinc.1 Dim Zaehler As Word ' Zaehler für Rot oder/und Grün Dim Zaehler2 As Word 'Zaehler, wenn eine Farbe nur teilweise dimmen soll Dim Zaehler_blau As Word ' Zaehler ausschließlich für Blau, da Blau vorgeteilt werden muss (Zaehler läuft 4mal schneller) Dim V As Byte ' Zählvariable zum Steuern durch das Farbauswahlmenü Dim V2 As Byte ' Zählvariable zum Überspringen der Aufdimmung beim Color-Fading (Fading durch alle Farben) Dim P As Bit ' Zählvariable zum Anwählen der Pulsor-Programme Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64 ' Timer für Rot und Grün Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 1 , Pwm = On , Prescale = 1 'Timer für Blau Enable Timer0 Start Timer1 Start Timer2 Enable Interrupts 'Ein Überbleibsel, als ich noch einen zusätzlichen Wartetimer nutzte, wird demnächst aber rausgenommen Pwm1a = 0 Pwm1b = 0 Rot Alias Pwm1a Gruen Alias Pwm1b Blau Alias Ocr2 Declare Sub Rot_fading Declare Sub Orange_fading Declare Sub Gelb_fading Declare Sub Gruen_fading Declare Sub Azur_fading Declare Sub Blau_fading Declare Sub Violet_fading Declare Sub Weiss_fading Declare Sub Color_fading '************************************** ' ***** Hauptprogramm Teil I ***** '************************************** Do Debounce Taster1 , 0 , Subtaster1 , Sub Debounce Taster2 , 0 , Subtaster2 , Sub Loop End ' ***** Hauptprogramm Teil II ***** Subtaster1: V = V + 1 select case V case 1 gosub r1023 ' Rot = 1023 ' ROT case 2 gosub r1023 gruen=341 ' Rot = 1023 : Gruen = 341 ' ORANGE case 3 gosub r1023 gosub g1023 ' Rot = 1023 : Gruen = 1023 ' GELB case 4 Rot = 0 ' GRÜN case 5 gosub G1023 gosub b1023 ' Gruen = 1023 : Blau = 1023 ' AZUR case 6 Gruen = 0 ' BLAU case 7 gosub r1023 ' Rot = 1023 ' VIOLET case 8 gosub G1023 gosub b1023 ' Gruen = 1023 : Blau = 1023 ' WEISS case 9 gosub allenull Do gosub r1023 gosub g1023 gosub b1023 ' Rot = 1023 : Gruen = 1023 : Blau = 1023 ' Das schnelle Aufblinken soll zeigen, dass sich hier ein Farbwechselmodus verbirgt. waitms 100 'Da ich erst seit ein paar Tagen die BASCOM-Vollversion habe, musste ich die 4K einhalten. So war es am schlankesten ^^ gosub allenull waitms 100 If Taster1 = 0 Then Exit Do If Taster2 = 0 Then Call Color_fading Loop case 10 gosub allenull V = 0 ' ALLE LED AUS end select Return r1023: rot = 1023 return g1023: gruen = 1023 return b1023: blau = 1023 return allenull: Rot = 0 : Gruen = 0 : Blau = 0 return pause: waitms 10 return pausel: waitms 1000 return Subtaster2: P = 0 If Taster2 = 0 Then Toggle P 'Ab hier können die Unterprogramme angewählt werden. Sie lassen die gewählte Farbe pulsieren. if p=1 then gosub fadings end if Return ' (**** ACHTUNG **** Die FOR...Next-Schleife kann durch Zwischensetzen einer ' Bedingung direkt zwischen FOR...TO und der Schrittzeit (Waitms) abgebrochen ' werden!!! UNBEDINGT MERKEN!) ' Die 3 Zeilen hierrüber sind ein Merkzettel für mich wo und wie ich die FOR-NEXT zu jedem Zeitpunkt unterbrechen kann. Für mich ein echter Durchbruch! fadings: For Zaehler = 1023 To 0 Step -2 ' If Taster1 = 0 Then return ' **** ACHTUNG **** (Zählen noch zu der Anmerkung hierüber, sonst keine Bedeutung) gosub fadecase Next Zaehler gosub pausel For Zaehler = 0 To 1023 Step 2 If Taster1 = 0 Then return ' **** ACHTUNG **** gosub fadecase Next Zaehler gosub pausel return fadecase: gosub pause select case v case 1 gosub rz case 2 gosub rgz case 3 gosub grz case 4 gosub gz case 5 gosub bzbgz case 6 gosub bzb case 7 gosub rz gosub bzb case 8 gosub grz gosub BZB end select return ' ***** Das Farbwechsel-Unterprogramm ***** Sub Color_fading: Do '--- Rot --- Rot = 0 : Gruen = 0 : Blau = 0 For Zaehler = 0 To 1023 Step 2 If Taster1 = 0 Then Exit Sub gosub pause gosub rz Next Zaehler gosub pausel V2 = 2 'Gosub Rot_aufgedimmt 'wozu? Rot_aufgedimmt: '--- Orange --- For Zaehler = 0 To 1023 Step 2 gosub z2z3 If Taster1 = 0 Then Exit Sub gosub pause Gruen = Zaehler2 Next Zaehler gosub pausel '--- Gelb --- For Zaehler = 323 To 1023 Step 2 If Taster1 = 0 Then Exit Sub gosub pause Gruen = Zaehler Next Zaehler gosub pausel '--- Grün --- For Zaehler = 1023 To 0 Step -2 If Taster1 = 0 Then Exit Sub gosub pause gosub rz Next Zaehler gosub pausel '--- Weiß --- For Zaehler = 0 To 1023 Step 2 gosub zbz4 If Taster1 = 0 Then Exit Sub gosub pause gosub rz gosub BZB Next Zaehler gosub pausel '--- Azur --- For Zaehler = 1023 To 0 Step -2 If Taster1 = 0 Then Exit Sub gosub pause gosub rz Next Zaehler gosub pausel '--- Blau --- For Zaehler = 1023 To 0 Step -2 If Taster1 = 0 Then Exit Sub gosub pause gosub gz Next Zaehler gosub pausel '--- Violet --- For Zaehler = 0 To 1023 Step 2 If Taster1 = 0 Then Exit Sub gosub pause gosub rz Next Zaehler gosub pausel '--- Übergang violet zu Rot --- For Zaehler = 1023 To 0 Step -2 gosub zbz4 If Taster1 = 0 Then Exit Sub gosub pause gosub bzb Next Zaehler gosub pausel goto Rot_aufgedimmt Loop End Sub z2z3: Zaehler2 = Zaehler / 3 return zbz4: Zaehler_blau = Zaehler / 4 return grz: gosub gz rz: Rot = Zaehler return bzbgz: gosub bzb gz: Gruen = Zaehler return bzb: Blau = Zaehler_blau return rgz: gosub RZ Gruen = Zaehler2 return








Zitieren

Lesezeichen