Jal Code abändern und combilieren in HEX

OP #3565410
Lesenswert?

Sehr geehrte Forumsmitglieder und Innen.
Ich habe im Internet jene Schaltung gefunden die ich gerne abändern 
würde leider reicht mein wissen dafür nicht aus.
Vielleicht gibt es Forumsmitglieder/Innen die mich hier unterstützen 
können,
ich hätte gerne den JAL Code so abgeändert das die Funktion
"Standby & Auto" mit der Funktion "Lamp on/off" ausgetauscht wird.
die Funktion "Lamp on/off" funktioniert wird aber nicht benötigt,
die Funktion "Standby & Auto" würde zwar funktionieren, da aber die 
beiden Schalter Hardwaremäßig nicht vorhanden sind müsste diese Funktion 
eben mit der nicht benötigten "Lamp on/off" getauscht werden.

Die Schaltung wurde von mir nachgebaut sowie programmiert und getestet,
da in meiner Schaltung Hardwaremäßig aber nur 4 Schalter zum Einsatz 
kommen möchte ich mich im vorhinein für Lösungen meines Problems recht 
Herzlich bedanken.

1
-- ***********************************************
2
-- P R O G R A M    S T A R T S    H E R E
3
-- ***********************************************
4

5
var byte x1, x2, x3
6

7
Bank_1
8
option = 0x0f -- Prescaler to WDT and 1:128 rate
9
Bank_0
10

11
delay_1ms( 100 )
12
StartBeep
13
delay_1ms( 100 )
14

15
forever loop
16

17
  x1 = ReadKeyb 
18
  while ( x1 == 0 ) loop
19
    x1 = ReadKeyb 
20
  end loop
21
  delay_1ms( 100 )
22
  x2 = ReadKeyb -- Read two times with x ms interval, if not same keys pressed - skip
23
  
24
  if ( x1 == x2 ) then -- same keys still pressed?
25
    if    ( x1 == 0x40 ) then  -- "-1"
26
       SendKey( 0x05 )
27
    elsif ( x1 == 0x04 ) then  -- "+1"
28
       SendKey( 0x07 )
29
    elsif ( x1 == 0x20 ) then  -- "-10"
30
       SendKey( 0x06 )
31
    elsif ( x1 == 0x02 ) then  -- "+10"
32
       SendKey( 0x08 )
33
    elsif ( x1 == 0x60 ) then  -- "-1" & "-10"
34
       SendKey( 0x21 )
35
    elsif ( x1 == 0x06 ) then  -- "+1" & "+10"
36
       SendKey( 0x22 )
37
    elsif ( x1 == 0x22 ) then  -- "-10" & "+10"
38
       SendKey( 0x28 )
39
    elsif ( x1 == 0x11 ) then  -- "Standby & Auto"
40
       SendKey( 0x23 )
41
    elsif ( x1 == 0x01 ) then  -- "Auto"
42
      x3 = seatalk_send ( 0x86, Yes )
43
      x3 = seatalk_send ( 0x11, no )
44
      x3 = seatalk_send ( 0x01, no )
45
      x3 = seatalk_send ( 0xfe, no )
46
      beep
47
    elsif ( x1 == 0x10 ) then  -- "standby"
48
      x3 = seatalk_send ( 0x86, Yes )
49
      x3 = seatalk_send ( 0x11, no )
50
      x3 = seatalk_send ( 0x02, no )
51
      x3 = seatalk_send ( 0xfd, no )
52
      beep
53
    elsif ( x1 == 0x44 ) then  -- "-1 & +1" Lamp on/off
54
      if light then
55
        x3 = seatalk_send ( 0x30, Yes)
56
        x3 = seatalk_send ( 0x00, No )
57
        x3 = seatalk_send ( 0x00, no )
58
      else
59
        x3 = seatalk_send ( 0x30, Yes)
60
        x3 = seatalk_send ( 0x00, No )
61
        x3 = seatalk_send ( 0x04, no )
62
      end if
63
      light = ! light
64
      beep
65
    end if
66

67
    while ( x1 == x2 ) loop
68
      x2 = ReadKeyb 
69
    end loop
70
    delay_1ms( 70 )
71
  end if
72

73
end loop
Angehängte Dateien:
Gast #3572532
Lesenswert?

Hi
Na ja, helfen kannich in BASCOM nicht wirklich, aber einen Tip kann ich 
dir geben. SChau dir mal deine (endlos) lange IF-Anweisung an. SChwer zu 
erkennen, wie sie überhaupt arbeitet, deswegen darf auch ruhig ein 
weiteres Stück eingerückt werden und schon erkennst du die Bereiche, die 
für dich interessant sind.
1
    if ( x1 == x2 ) then -- same keys still pressed?
2
       if    ( x1 == 0x40 ) then  -- "-1"        ---> einrücken
3
          SendKey( 0x05 )                        ---> enrücken
4
       elsif ( x1 == 0x04 ) then  -- "+1"        <--- ausrücken 
5
            SendKey( 0x07 )   wg. if             ---> einrücken
6
           elsif ( x1 == 0x20 ) then  -- "-10"   <--- ausrücken
7
                SendKey( 0x06 )                  ---> etc.
8
             elsif ( x1 == 0x02 ) then  -- "+10"
9
                   SendKey( 0x08 )
10
                 elsif ( x1 == 0x60 ) then  -- "-1" & "-10"
11
                     SendKey( 0x21 )
12
                   elsif ( x1 == 0x06 ) then  -- "+1" & "+10"
13
                        SendKey( 0x22 )
14
                      elsif ( x1 == 0x22 ) then  -- "-10" & "+10"
15
                           SendKey( 0x28 )
16
                         elsif ( x1 == 0x11 ) then  -- "Standby & Auto"
17
                              SendKey( 0x23 )
18
                             elsif ( x1 == 0x01 ) then  -- "Auto"
19
                                  x3 = seatalk_send ( 0x86, Yes )
20
                                  x3 = seatalk_send ( 0x11, no )
21
                                  x3 = seatalk_send ( 0x01, no )
22
                                  x3 = seatalk_send ( 0xfe, no )
23
                                  beep
24
                                elsif ( x1 == 0x10 ) then  -- "standby"
25
                                      x3 = seatalk_send ( 0x86, Yes )
26
                                      x3 = seatalk_send ( 0x11, no )
27
                                      x3 = seatalk_send ( 0x02, no )
28
                                      x3 = seatalk_send ( 0xfd, no )
29
                                      beep
30
                                  elsif ( x1 == 0x44 ) then  -- "-1 & +1" Lamp on/off
31
                                     if light then
32
                                          x3 = seatalk_send ( 0x30, Yes)
33
                                          x3 = seatalk_send ( 0x00, No )
34
                                          x3 = seatalk_send ( 0x00, no )
35
                                        else
36
                                          x3 = seatalk_send ( 0x30, Yes)
37
                                          x3 = seatalk_send ( 0x00, No )
38
                                          x3 = seatalk_send ( 0x04, no )
39
                                      end if
40
                                      light = ! light
41
                                      beep
42
    end if

Dieser Code ist kaum lesbar. Sag mir mal auf Anhieb, was x1 mit 0x11 
anfängt...
Eine "Case" wäre sicher viel chicker, besser lesbar und zudem auch 
leichter pflegbar. Und das ist ja dein Problem, das du die Zeilen nicht 
lesen kannst. Mehr ist das doch nicht. Also, wenn du dich mit der 
Programmierung von Controllern beschäftigen willst, dann setz erst mal 
diese If's in eine Case um.  Dazu Handbuch, Online-Hilfe, Beispiele zu 
Rate ziehen. So schwer ist es nicht.
Gruß oldmax

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren