Jungs habe eine BASCOM Frage. Ich muss folgendes umsetzen: ein Umschalter sitzt an einem Port. Entweder ist der Port High oder Low je nachdem wie der schalter steht. Wenn der Schalter auf LOW steht dann soll das Programm in der Do Loop schleife bleiben wenn der Schalter High ist dann soll aus der Do-Loop Schleife in einem SUB springen und dort do-loop ausführen bis der Schalter wieder Low geht. Wie setze ich es um ? Ich grübele schon seit stunden..bitte um ein paar Codezeilen.. Danke..
Hi Pseudo-Basic:
1 | do |
2 | |
3 | if Pin=High then |
4 | begin Unterprogramm_Pin_hi |
5 | 'Tue dieses |
6 | end Unterprogramm_Pin_hi |
7 | end if |
8 | |
9 | if Pin=Low then |
10 | begin Unterprogramm_Pin_lo |
11 | 'Tue jenes |
12 | end Unterprogramm_Pin_lo |
13 | end if |
14 | |
15 | loop |
mfg mf
Irgendwie funzt es nicht..ich poste mal was schon fertig ist '*********************************************************************** ******** ' Schalter an PD.1 High = "Fader" Low = "Fix" ' 10k-Poti an PC.0 ' LED Rot an PB.1 ' LED Grün an PB.2 ' LED Blau an PB.3 '*********************************************************************** ******** $sim $regfile = "m8def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 10 $framesize = 40 Config Portb.1 = Output 'LED Rot Config Portb.2 = Output 'LED Gruen Config Portb.3 = Output 'LED Blau Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Down , Prescale = 1 Enable Timer1 Enable Timer2 Start Timer1 Start Timer2 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Dim Pause As Byte Dim Speed As Byte Dim Rwert As Integer Dim Adc0 As Integer R Alias Compare1a G Alias Compare1b B Alias Ocr2 Config Pind.1 = Input Portd.1 = 1 Taster1 Alias Pind.1 Config Lcdpin = Pin , Db7 = Portb.5 , Db6 = Portc.1 , Db5 = Portc.2 , _ Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 2 Cls Cursor Off Do Pause = 2 Speed = 1 If Taster1 = 0 Then Do Incr G Waitms Speed Loop Until G = 255 Waitms Pause Do Decr R Waitms Speed Loop Until R = 0 Waitms Pause Do Incr B Waitms Speed Loop Until B = 255 Waitms Pause Do Decr G Waitms Speed Loop Until G = 0 Waitms Pause Do Incr R Waitms Speed Loop Until R = 255 Waitms Pause Do Decr B Waitms Speed Loop Until B = 0 Waitms Pause End If If Taster1 = 1 Then Adc0 = Getadc(0) Rwert = Adc0 / 4 Locate 1 , 1 Lcd Adc0 Locate 2 , 1 Lcd Rwert R = Rwert G = 0 B = 0 End If Loop
Zu viel code, nochh dazu nicht eingerückt (code-tags verwenden) -> das liest keiner Gruß Roland
...und dann markiere bitte auch gleich diejenige Deiner 1097 Do..Loop Schleifen, auf die sich Deine Frage bezieht.. Will sagen: Es fehlen Kommentare!
Thomas Kiss schrieb: > Config Pind.1 = Input Ich kenn mich mit BASCOM nicht aus; mir fällt aber auf, dass du hier PINx verwendest, um die "Richtung" des Ports zu definieren. Müsste das nicht PORTx sein, analog zu der Konfig für die LEDs? > Portd.1 = 1 Damit aktivierst du den internen pull-up, oder? Kommentare kosten nix und sind enorm hilfreich, um ein Programm bzw. die Absichten des Autors zu verstehen, was ein Codeblock tun sollte/tut!
Thomas, ich vermute aus dem Programmcode, du willst im Normalbetrieb einen R-Wert einstellen und anzeigen und beim Drücken des active low Tasters eine RGB-Animation mit diesem R-Wert ablaufen lassen. Die Animation läuft dann bei obigem Programmcode einmal ununterbrechbar durch. Du kannst dann ca. alle 6 x 255 x (Speed+Pause) ms unterbrechen. Um die Animation zu unterbrechen und einen neuen R-Wert einzulesen, kannst du dein Programm auf verschiedene Arten umstellen. Einfachste Art: Jeden Block der Animation mit If Taster = 0 kapseln. Du unterteilst die große Animation in mehrere kleine. Du kannst dann ca. alle 255 x (Speed+Pause) ms unterbrechen. Kompliziertere Art: Du setzt einen Timer auf. Der pollt regelmäßig den Tasterzustand und eventuell den R-Wert. Die Animation verwendet dann ab dem aktuellen Animationszustand die neuen Werte. Statt Timer und pollen kannst du auch einen externen Interrupt verwenden. Es ist aber schwieriger beim externen Interrupt die Entprellung in den Griff zu bekommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.