The files contained in this repository can be downloaded to your computer using a svn client.
On Linux you simply type the command displayed below.

This URL has Read-Only access.

Statistics
| Revision:

root / trunk / DomotiGaServer / CLEDMatrix.class @ 700

History | View | Annotate | Download (5 kB)

1 339 rdnzl
' Gambas class file
2 339 rdnzl
3 339 rdnzl
' Description:
4 339 rdnzl
' CLEDMatrix.class
5 339 rdnzl
' Display messages on a LED Matrix.
6 339 rdnzl
7 339 rdnzl
' Development Status:
8 339 rdnzl
' Just started. Tested with Conrad McCrypt AM03127 display.
9 339 rdnzl
10 339 rdnzl
' Links:
11 339 rdnzl
' http://www.conrad.nl/goto.php?artikel=590996
12 339 rdnzl
13 339 rdnzl
' DomotiGa - an open source home automation program.
14 339 rdnzl
' Copyright(C) 2008-2010 Ron Klinkien
15 339 rdnzl
16 339 rdnzl
' Read file called COPYING for license details.
17 339 rdnzl
18 339 rdnzl
PROPERTY Port AS String
19 339 rdnzl
PROPERTY LEDMatrixDebug AS Boolean
20 339 rdnzl
PROPERTY DisplayID AS String
21 339 rdnzl
PROPERTY DisplayColor AS Integer
22 339 rdnzl
PROPERTY DisplaySpeed AS Integer
23 339 rdnzl
24 339 rdnzl
PRIVATE sPort AS String
25 339 rdnzl
PRIVATE bLEDMatrixDebug AS Boolean
26 339 rdnzl
PRIVATE sDisplayID AS String
27 339 rdnzl
PRIVATE iDisplayColor AS Integer
28 339 rdnzl
PRIVATE iDisplaySpeed AS Integer
29 339 rdnzl
30 339 rdnzl
PUBLIC hLEDMatrix AS NEW SerialPort
31 339 rdnzl
32 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 339 rdnzl
' open serial port
34 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 339 rdnzl
PUBLIC FUNCTION Connect() AS Boolean
36 339 rdnzl
37 339 rdnzl
  ' try to close the port
38 339 rdnzl
  TRY hLEDMatrix.Close
39 339 rdnzl
40 339 rdnzl
  ' get a new one
41 339 rdnzl
  hLEDMatrix = NEW Serialport AS "LEDMatrix"
42 339 rdnzl
43 339 rdnzl
  WITH hLEDMatrix
44 339 rdnzl
    .PortName = sPort
45 339 rdnzl
    .Speed = 9600
46 339 rdnzl
    .Parity = 0
47 339 rdnzl
    .DataBits = 8
48 339 rdnzl
    .StopBits = 1
49 339 rdnzl
    .FlowControl = 0
50 339 rdnzl
    .Open()
51 339 rdnzl
  END WITH
52 339 rdnzl
53 339 rdnzl
  ' all ok
54 339 rdnzl
  RETURN TRUE
55 339 rdnzl
56 339 rdnzl
CATCH ' some errors
57 339 rdnzl
  Main.WriteLog(("LED Matrix Error: ") & ERROR.Text)
58 339 rdnzl
  RETURN FALSE
59 339 rdnzl
60 339 rdnzl
END
61 339 rdnzl
62 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63 339 rdnzl
' display startup text
64 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65 339 rdnzl
PUBLIC FUNCTION Run() AS Boolean
66 339 rdnzl
67 339 rdnzl
  ' DisplayMessage(sDisplayID, Application.Name & " Rocks!!")
68 339 rdnzl
69 339 rdnzl
END
70 339 rdnzl
71 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72 339 rdnzl
' display message
73 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 339 rdnzl
PUBLIC SUB DisplayMessage(sDisplayID AS String, sMessage AS String, OPTIONAL iColor AS Integer, OPTIONAL iSpeed AS Integer)
75 339 rdnzl
76 339 rdnzl
  DIM sColor AS String[] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S"]
77 339 rdnzl
  DIM sSpeed AS String[] = ["q", "a", "Q", "A"]
78 339 rdnzl
79 339 rdnzl
  IF NOT iColor THEN iColor = iDisplayColor
80 339 rdnzl
  IF NOT iSpeed THEN iSpeed = iDisplaySpeed
81 339 rdnzl
82 339 rdnzl
  SendCommand(sDisplayID, "<L1><PA><FE><M" & sSpeed[iSpeed] & "><WC><FE><C" & sColor[iColor] & ">" & sMessage)
83 339 rdnzl
84 339 rdnzl
END
85 339 rdnzl
86 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87 339 rdnzl
' set real time clock
88 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 339 rdnzl
PUBLIC SUB SetClock(sDisplayID AS String)
90 339 rdnzl
91 339 rdnzl
  DIM sWeek AS String
92 339 rdnzl
93 339 rdnzl
  SELECT CASE LCase(Format(Now, "ddd"))
94 339 rdnzl
    CASE "mon"
95 339 rdnzl
      sWeek = "01"
96 339 rdnzl
    CASE "tue"
97 339 rdnzl
      sWeek = "02"
98 339 rdnzl
    CASE "wed"
99 339 rdnzl
      sWeek = "03"
100 339 rdnzl
    CASE "thu"
101 339 rdnzl
      sWeek = "04"
102 339 rdnzl
    CASE "fri"
103 339 rdnzl
      sWeek = "05"
104 339 rdnzl
    CASE "sat"
105 339 rdnzl
      sWeek = "06"
106 339 rdnzl
    CASE "sun"
107 339 rdnzl
      sWeek = "07"
108 339 rdnzl
  END SELECT
109 339 rdnzl
110 339 rdnzl
  ' YYWWMMDDHHmmSS
111 339 rdnzl
  SendCommand(sDisplayID, "<SC>" & Format(Now, "yy") & sWeek & Format(Now, "mmddhhnnss"))
112 339 rdnzl
113 339 rdnzl
END
114 339 rdnzl
115 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116 339 rdnzl
' calculate checksum
117 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118 339 rdnzl
PRIVATE SUB CalcChecksum(sData AS String) AS String
119 339 rdnzl
120 339 rdnzl
  DIM iChecksum AS Byte = Asc(Left(sData, 1))
121 339 rdnzl
  DIM iCnt AS Integer
122 339 rdnzl
123 339 rdnzl
  FOR iCnt = 2 TO Len(sData)
124 339 rdnzl
    iChecksum = iChecksum XOR Asc(Mid(sData, iCnt, 1))
125 339 rdnzl
  NEXT
126 339 rdnzl
127 339 rdnzl
  RETURN Hex(iChecksum, 2)
128 339 rdnzl
129 339 rdnzl
END
130 339 rdnzl
131 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132 339 rdnzl
' send command string to display
133 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134 339 rdnzl
PRIVATE SUB SendCommand(sDisplayID AS String, sCmd AS String)
135 339 rdnzl
136 339 rdnzl
  DIM sStr AS String
137 339 rdnzl
  DIM iCnt AS Integer
138 339 rdnzl
139 339 rdnzl
  sStr = "<ID0" & sDisplayID & ">" & sCmd & CalcChecksum(sCmd) & "<E>"
140 339 rdnzl
  IF Main.bLEDMatrixDebug THEN Main.WriteDebugLog(("[LEDMatrix] Sending string: ") & sStr)
141 339 rdnzl
142 339 rdnzl
  PRINT #hLEDMatrix, sStr
143 339 rdnzl
144 339 rdnzl
END
145 339 rdnzl
146 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147 339 rdnzl
' read display response
148 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149 339 rdnzl
PUBLIC SUB LEDMatrix_Read()
150 339 rdnzl
151 339 rdnzl
  DIM sData AS Byte
152 339 rdnzl
153 339 rdnzl
  READ #hLEDMatrix, sData
154 339 rdnzl
  IF Main.bLEDMatrixDebug THEN Main.WriteDebugLog(("[LEDMatrix] Received string: ") & sData)
155 339 rdnzl
156 339 rdnzl
END
157 339 rdnzl
158 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159 339 rdnzl
' close port
160 339 rdnzl
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
161 339 rdnzl
PUBLIC FUNCTION Disconnect() AS Boolean
162 339 rdnzl
163 339 rdnzl
  ' try to close the connection
164 339 rdnzl
  TRY hLEDMatrix.Close
165 339 rdnzl
  Main.WriteLog(("LED Matrix serial port close."))
166 339 rdnzl
167 339 rdnzl
  ' all ok
168 339 rdnzl
  RETURN TRUE
169 339 rdnzl
170 339 rdnzl
CATCH ' some errors
171 339 rdnzl
  Main.WriteLog(("LED Matrix Error: ") & ERROR.Text)
172 339 rdnzl
  RETURN FALSE
173 339 rdnzl
174 339 rdnzl
END
175 339 rdnzl
176 339 rdnzl
' implement properties
177 339 rdnzl
FUNCTION Port_Read() AS String
178 339 rdnzl
179 339 rdnzl
  RETURN sPort
180 339 rdnzl
181 339 rdnzl
END
182 339 rdnzl
183 339 rdnzl
SUB Port_Write(Value AS String)
184 339 rdnzl
185 339 rdnzl
  sPort = Value
186 339 rdnzl
187 339 rdnzl
END
188 339 rdnzl
189 339 rdnzl
PRIVATE FUNCTION LEDMatrixDebug_Read() AS Boolean
190 339 rdnzl
191 339 rdnzl
  RETURN bLEDMatrixDebug
192 339 rdnzl
193 339 rdnzl
END
194 339 rdnzl
195 339 rdnzl
PRIVATE SUB LEDMatrixDebug_Write(Value AS Boolean)
196 339 rdnzl
197 339 rdnzl
  bLEDMatrixDebug = Value
198 339 rdnzl
199 339 rdnzl
END
200 339 rdnzl
201 339 rdnzl
PRIVATE FUNCTION DisplayID_Read() AS String
202 339 rdnzl
203 339 rdnzl
  RETURN sDisplayID
204 339 rdnzl
205 339 rdnzl
END
206 339 rdnzl
207 339 rdnzl
PRIVATE SUB DisplayID_Write(Value AS String)
208 339 rdnzl
209 339 rdnzl
  sDisplayID = Value
210 339 rdnzl
211 339 rdnzl
END
212 339 rdnzl
213 339 rdnzl
PRIVATE FUNCTION DisplayColor_Read() AS Integer
214 339 rdnzl
215 339 rdnzl
  RETURN iDisplayColor
216 339 rdnzl
217 339 rdnzl
END
218 339 rdnzl
219 339 rdnzl
PRIVATE SUB DisplayColor_Write(Value AS Integer)
220 339 rdnzl
221 339 rdnzl
  iDisplayColor = Value
222 339 rdnzl
223 339 rdnzl
END
224 339 rdnzl
225 339 rdnzl
PRIVATE FUNCTION DisplaySpeed_Read() AS Integer
226 339 rdnzl
227 339 rdnzl
  RETURN iDisplaySpeed
228 339 rdnzl
229 339 rdnzl
END
230 339 rdnzl
231 339 rdnzl
PRIVATE SUB DisplaySpeed_Write(Value AS Integer)
232 339 rdnzl
233 339 rdnzl
  iDisplaySpeed = Value
234 339 rdnzl
235 339 rdnzl
END