Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Ich muss mal was loswerden Kategorie: Programmierung Basic (von Oskar - 28.09.2004 19:27)

Hallo zusammen,

ich verfolge dieses tolle Forum schon eine ganze Weile, hat mir "hier und da" auch schon geholfen, hiermit meinen Danke an alle, das was ich nicht so "prikelnd" finde, ist die Tatsache, das zwar jeder sein eigenes Problemchen, und auch sicher bereits die div. Programme geschrieben hat, aber niemand sich traut sein Werk der Öffentlichkeit preiszugeben, so das evt. andere davon provitieren können.
Das finde ich recht schade, denn auch ich habe ewig und drei Tage nach kleinen Hinweisen gesucht, aber egal, ich veröffentlich hiermit meine derzeitige Lichtsteuerung, und hoffe, das ich den sogenannten "Anfängern" ein bisschen helfen kann.

So, das wollte ich schon seit Tagen/Wochen einfach einmal loswerden. Ich kann mir sehr gut vorstellen, dass das was ich da zusammengebastelt habe sicher auch effektiver geht, aber es funktioniert, und ich bin recht zufrieden damit, funktionier prima.

Ich muss noch dabei sagen, das ich die CC1 inkl. Appi Board und der orginal Relaiskarte im Einsatz habe, d.h. über die Relais auf der Karte steuere ich eine normale Funkfernbedienung, und diese schaltet dann die Funksteckdosen.

Gruß Oskar.

P.S. Kritik ist immer willkommen.

P.P.S. noch was, die Tempansteuerung ist noch "mental" in Arbeit.


'Relais
define Relais1 port[1]
define Relais2 port[2]
define Relais3 port[3]
define Relais4 port[4]
define Relais5 port[5]
define Relais6 port[6]
define Relais7 port[7]
define Relais8 port[8]

define relais byteport[1]
define temp AD[1]                       ' nimmt die Temperaturwerte auf

define tastatur ad[8]                    ' Tastatur wird definiert auf Port 8


' *** Daten-Definition ***
define value word
define output word
define vario word

define lcd_buf byte
define lcd_param byte

define lastsec byte

define key_nr byte
define key_rel byte
define compare byte
define xy byte
define i byte



' *** Definition LCD-Ports ***
define lcd_port byteport[2]
define lcd_rs port[14]
define lcd_rw port[13]
define lcd_e port[15]
BEEP 625,12,1 : BEEP 500,12,1 : BEEP 425,12,1 : BEEP 312,24,1           'Tonausgabe beim Start des Programms

'*********************************** ASCII-Codes für die Displayausgabe ********************************************
define A_ &H41
define B_ &H42
define C_ &H43
define D_ &H44
define E_ &H45
define F_ &H46
define G_ &H47
define H_ &H48
define I_ &H49
define J_ &H4A
define K_ &H4B
define L_ &H4C
define M_ &H4D
define N_ &H4E
define O_ &H4F
define P_ &H50
define Q_ &H51
define R_ &H52
define S_ &H53
define T_ &H54
define U_ &H55
define V_ &H56
define W_ &H57
define X_ &H58
define Y_ &H59
define Z_ &H5A

define LEERZ &H20
define MINUS &H2D
define NULL &H30
define GLEICH &H3D
define DOPPELPUNKT &H3A

'*************************************** Programmoperationen  ************************************************

  gosub LCD_INIT

#LOOP
  if second=0 then gosub writeminute
  if second= lastsec then goto loop
  lastsec = second
  gosub writesecond
  gosub schalten
goto LOOP

#writeminute

 xy=28:gosub cursor          '1te Zeile 1 Position
 lcd_param = NULL + hour / 10 : gosub LCD_WRITECHAR
 lcd_param = NULL + hour mod 10 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = NULL + minute / 10 : gosub LCD_WRITECHAR
 lcd_param = NULL + minute mod 10 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR

 #writesecond

 xy=34:gosub cursor          '1te Zeile 7te Position
 lcd_param = NULL + second / 10 : gosub LCD_WRITECHAR
 lcd_param = NULL + second mod 10 : gosub LCD_WRITECHAR

                                                   'schreibt TIME auf das Display in die 2. Zeile
                                                        xy=20:gosub cursor
                                                        lcd_param = &H54
                                                        gosub LCD_WRITECHAR
                                                        xy=21:gosub cursor
                                                        lcd_param = &H49
                                                        gosub LCD_WRITECHAR
                                                        xy=22:gosub cursor
                                                        lcd_param = &H4D
                                                        gosub LCD_WRITECHAR
                                                        xy=23:gosub cursor
                                                        lcd_param = &H45
                                                        gosub LCD_WRITECHAR
                                                        xy=24:gosub cursor
                                                        lcd_param = &H3A
                                                        gosub LCD_WRITECHAR

'******************************************************************************************************************

 xy=49:gosub cursor

 ' Aktualisieren der Temperatur
   looktab Grad , temp , vario
   output = abs(vario)
   if vario < 0 then lcd_param = MINUS else lcd_param = LEERZ

  gosub LCD_WRITECHAR

 ' Tausender-Dezimalstelle oder Leerzeichen
  if abs(vario) >= 1000 then lcd_param = NULL + output/1000 else lcd_param = LEERZ
  gosub LCD_WRITECHAR
  output = output mod 1000

  ' Hunderter-Dezimalstelle oder Leerzeichen
  if abs(vario) >= 100 then lcd_param = NULL + output/100 else lcd_param = LEERZ
  gosub LCD_WRITECHAR
  output = output mod 100

  ' Zehner-Dezimalstelle oder Leerzeichen
  if abs(vario) >= 10 then lcd_param = NULL + output/10 else lcd_param = LEERZ
  gosub LCD_WRITECHAR


  ' einer Dezimalstelle oder Leerzeichen
  lcd_param = NULL + output mod 10
  gosub LCD_WRITECHAR
  lcd_param = LEERZ : gosub LCD_Writechar
  lcd_param = &Hdf : gosub LCD_Writechar
  lcd_param = C_ : gosub LCD_Writechar

                                          'schreibt TEMP auf das Display in die 3 Zeile
                                                '        xy=40:gosub cursor
                                                '        lcd_param = &H54
                                                '        gosub LCD_WRITECHAR
                                                '        xy=41:gosub cursor
                                                '        lcd_param = &H45
                                                '        gosub LCD_WRITECHAR
                                                '        xy=42:gosub cursor
                                                '        lcd_param = &H4D
                                                '        gosub LCD_WRITECHAR
                                                '        xy=43:gosub cursor
                                                '        lcd_param = &H50
                                                '        gosub LCD_WRITECHAR
                                                '        xy=44:gosub cursor
                                                '        lcd_param = &H3A
                                                '        gosub LCD_WRITECHAR

                                           'schreibt Lichtsteuerung auf das Display in der 1. Zeile
                                                        xy=0:gosub cursor
                                                        lcd_param = &H20
                                                        gosub LCD_WRITECHAR
                                                        xy=1:gosub cursor
                                                        lcd_param = &H4C
                                                        gosub LCD_WRITECHAR
                                                        xy=2:gosub cursor
                                                        lcd_param = &H49
                                                        gosub LCD_WRITECHAR
                                                        xy=3:gosub cursor
                                                        lcd_param = &H43
                                                        gosub LCD_WRITECHAR
                                                        xy=4:gosub cursor
                                                        lcd_param = &H48
                                                        gosub LCD_WRITECHAR
                                                        xy=5:gosub cursor
                                                        lcd_param = &H54
                                                        gosub LCD_WRITECHAR
                                                         xy=6:gosub cursor
                                                        lcd_param = &H53
                                                        gosub LCD_WRITECHAR
                                                        xy=7:gosub cursor
                                                        lcd_param = &H54
                                                        gosub LCD_WRITECHAR
                                                         xy=8:gosub cursor
                                                        lcd_param = &H45
                                                        gosub LCD_WRITECHAR
                                                         xy=9:gosub cursor
                                                        lcd_param = &H55
                                                        gosub LCD_WRITECHAR
                                                         xy=10:gosub cursor
                                                        lcd_param = &H45
                                                        gosub LCD_WRITECHAR
                                                         xy=11:gosub cursor
                                                        lcd_param = &H52
                                                        gosub LCD_WRITECHAR
                                                         xy=12:gosub cursor
                                                        lcd_param = &H55
                                                        gosub LCD_WRITECHAR
                                                         xy=13:gosub cursor
                                                        lcd_param = &H4E
                                                        gosub LCD_WRITECHAR
                                                        xy=14:gosub cursor
                                                        lcd_param = &H47
                                                        gosub LCD_WRITECHAR
                                                        xy=15:gosub cursor
                                                        lcd_param = &H20
                                                        gosub LCD_WRITECHAR
'*************************************** LCD_Interface ***********************************************************
'( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)


'die Zahl XY ermittelt die nächste Position am LCD.
'(0+ 1.zeile , 20+ 2.zeile, 40+ 3.ziele, 60+ 4.zeile.
'Also 44 ist daher 3.Zeile Postition 5.
#cursor
    lcd_param=xy
    if xy>=20 then lcd_param=xy+44
    if xy>=40 then lcd_param=xy-24
    if xy>=60 then lcd_param=xy+20
    lcd_param=lcd_param+128
    gosub lcd_writecmd

return

'Blinkender cursor am LCD ein (on) oder aus (off) schalten.
#curon
  lcd_param=15:gosub lcd_writecmd
return

#curoff
  lcd_param=12:gosub lcd_writecmd
return

#LCD_INIT

' alle ports 0
  lcd_port = OFF

' 8-Bit-Modus aktivieren
  lcd_param=&H38 : gosub LCD_WRITECMD

' mit 8-Bit-Command in 4-Bit-Modus umschalten
  lcd_port=&B00000010
  tog lcd_e
  tog lcd_e

' ab jetzt 4-Bit-Modus
  lcd_param = &H28 : gosub LCD_WRITECMD
  lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
  lcd_param = &H02 : gosub LCD_WRITECMD
  lcd_param = &H01 : gosub LCD_WRITECMD
return

' LCD-Kommando
#LCD_WRITECMD
  lcd_buf = OFF
  goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
  lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
  lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  tog lcd_e
  tog lcd_e
  lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  tog lcd_e
  tog lcd_e

return


'tastatur routine
#waitkey
  key_nr=0
  compare=tastatur
  if compare>238 then goto rskey
  compare=compare/21

  looktab asciicodes,compare,xy

  if key_rel=xy then return
  key_nr=xy
  key_rel=key_nr

return

#rskey

  key_nr=0
  key_rel=99

return

table asciicodes
  11 7 4 1
  10 8 5 2
  12 9 6 3
tabend


#schalten
gosub waitkey
if key_nr=11 then relais=0       'alle Relais aus!
 'if key_nr>=9 then return       'überprüfe ob nur noch Taste 1 bis 8
if key_nr=12 then goto LCD_CLS
if key_nr=1 then gosub meldung
xy=1
for i=1 to 8
    if i=key_nr then relais=(relais xor xy)
    xy=xy shl 1
next
gosub steuerung
return


#steuerung
'+++++++++++++++++++++++++++++++++++++++++++ DOW Abfrage ++++++++++++++++++++++++++++++++++++++++++++++++++++++
     'Sonntag = 0, Montag = 1, Dienstag = 2, Mittwoch = 3, Donnerstag = 4 Freitag = 5, Samstag = 6
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                if DOW > 6 then DOW = 0 'Fehler der DOW Berechnung korrigieren
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                if (hour = 23) and (minute = 59) then gosub Reset              ' Reset aller Relais um 23.59 Uhr
'--------------------------------------------------------------------------------------------------------------

'********************** Tastaturabfrage **************************************************************************
 if (hour = 20) and (minute = 35) and (dow => 0 and dow =< 6) then Relais1 = ON                  
 if (hour = 20) and (minute = 36) and (dow => 0 and dow =< 6) then Relais1 = OFF
'***************************************************************************************
 if (hour = 22) and (minute = 55) and (dow => 0 and dow =< 6) then Relais2 = ON                  
 if (hour = 22) and (minute = 56) and (dow => 0 and dow =< 6) then Relais2 = OFF
'***************************************************************************************
 if (hour = 05) and (minute = 45) and (dow => 1 and dow =< 5) then Relais1 = ON                  
 if (hour = 05) and (minute = 46) and (dow => 1 and dow =< 5) then Relais1 = OFF
'***************************************************************************************
 if (hour = 07) and (minute = 00) and (dow => 1 and dow =< 5) then Relais2 = ON                  
 if (hour = 07) and (minute = 01) and (dow => 1 and dow =< 5) then Relais2 = OFF
'***************************************************************************************
 if (hour = 20) and (minute = 30) and (dow => 0 and dow =< 6) then Relais3 = ON                  
 if (hour = 20) and (minute = 31) and (dow => 0 and dow =< 6) then Relais3 = OFF
'***************************************************************************************
 if (hour = 23) and (minute = 00) and (dow => 0 and dow =< 6) then Relais4 = ON                  
 if (hour = 23) and (minute = 01) and (dow => 0 and dow =< 6) then Relais4 = OFF
'***************************************************************************************
 if (hour = 05) and (minute = 47) and (dow => 1 and dow =< 5) then Relais3 = ON                  
 if (hour = 05) and (minute = 48) and (dow => 1 and dow =< 5) then Relais3 = OFF
'***************************************************************************************
 if (hour = 07) and (minute = 03) and (dow => 1 and dow =< 5) then Relais4 = ON                  
 if (hour = 07) and (minute = 04) and (dow => 1 and dow =< 5) then Relais4 = OFF
'***************************************************************************************
 'if (hour = 21) and (minute = 10) and (dow => 0 and dow =< 6) then Relais5 = ON                  
 'if (hour = 21) and (minute = 11) and (dow => 0 and dow =< 6) then Relais5 = OFF                  
'***************************************************************************************
 if (hour = 23) and (minute = 10) and (dow => 0 and dow =< 6) then Relais6 = ON                  
 if (hour = 23) and (minute = 11) and (dow => 0 and dow =< 6) then Relais6 = OFF                  
'***************************************************************************************
 if (hour = 20) and (minute = 00) and (dow => 0 and dow =< 6) then Relais7 = ON                  
 if (hour = 20) and (minute = 01) and (dow => 0 and dow =< 6) then Relais7 = OFF
'***************************************************************************************
 if (hour = 23) and (minute = 16) and (dow => 0 and dow =< 6) then Relais8 = ON                  
 if (hour = 23) and (minute = 17) and (dow => 0 and dow =< 6) then Relais8 = OFF
'***************************************************************************************
return
#Reset
Relais1=Off
Relais2=OFF
Relais3=OFF
Relais4=OFF
Relais5=OFF
Relais6=OFF
Relais7=OFF
Relais8=OFF
return




#meldung

'lcd_param = &H02 : gosub LCD_WRITECMD
'lcd_param = &H01 : gosub LCD_WRITECMD

'  xy=0:gosub cursor
'  lcd_param = &H50
'  gosub LCD_WRITECHAR
'  xy=1:gosub cursor
'  lcd_param = &H55
'  gosub LCD_WRITECHAR
'  xy=2:gosub cursor
'  lcd_param = &H4D
'  gosub LCD_WRITECHAR
'  xy=3:gosub cursor
'  lcd_param = &H50
'  gosub LCD_WRITECHAR
'  xy=4:gosub cursor
'  lcd_param = &H45
'  gosub LCD_WRITECHAR


'  xy=5:gosub cursor
'  lcd_param = &H3D
'  gosub LCD_WRITECHAR

'  xy=6:gosub cursor
'  lcd_param = &H4F
'  gosub LCD_WRITECHAR

'  xy=7:gosub cursor
'  lcd_param = &H4E
'  gosub LCD_WRITECHAR


'  PAUSE 200

 return

'return

table Grad
  -27 -27 -26 -25 -24 -24 -23 -22 -22 -21
  -20 -20 -19 -18 -18 -17 -17 -16 -15 -15
  -14 -13 -13 -12 -11 -11 -10 -9  -9  -8
  -8  -7  -6  -6  -5  -5  -4  -3  -3  -2
  -2  -1  -1   0   0   1   2   2   3   3
   4   4   5   6   6   7   7   8   8   9
   10  10  11  11  12  12  13  14  14  15
   15  16  16  17  17  18  18  19  20  20
   21  21  22  22  23  23  24  24  25  25
   26  26  27  27  28  28  29  30  30  31
   31  32  32  33  33  34  34  35  35  36
   36  37  37  38  38  39  39  40  40  41
   41  42  42  43  43  43  44  44  45  45
   46  46  47  47  48  48  49  49  50  50
   51  51  52  52  53  53  53  54  54  55
   55  56  56  57  57  58  58  59  59  59
   60  60  61  61  62  62  63  63  64  64
   64  65  65  66  66  67  67  68  68  68
   69  69  70  70  71  71  71  72  72  73
   73  74  74  74  75  75  76  76  77  77
   77  78  78  79  79  80  80  80  81  81
   82  82  82  83  83  84  84  85  85  85
   86  86  87  87  87  88  88  89  89  89
   90  90  91  91  91  92  92  93  93  93
   94  94  95  95  95  96  96  97  97  97
   98  98  99  99  99  100
tabend


 Antwort schreiben

Bisherige Antworten:

Re: Ich muss mal was loswerden (von  Jörg - 29.09.2004 12:41)
    Re: Ich muss mal was loswerden (von Marcel - 30.09.2004 20:20)