Pthread pause based on pthread user data
[mirrors/Programs.git] / arduino / tv_b_gone_Pedrocrespo / tv_b_gone_Pedrocrespo.pde
CommitLineData
a3a3e374
H
1/* Arduino TV-B-Gone
2*
3* A recreation of the TV-B-Gone kit on an Arduino Duemilanove.
4* By Daedalus12, mtbf0, westfw and Pedrocrespo
5*
6*/
7
8#include <avr/pgmspace.h>
9
10struct codeElement {
11 uint32_t onTime; // duration of "On" time
12 uint32_t offTime; // duration of "Off" time
13};
14
15struct powercode {
16 uint32_t freq; // frequency
17 struct codeElement codes[100]; // on/off codes, supposed to be 100 as maximum
18};
19
20 int i = 0; // we use this for iterating
21 long cfreq; // we'll store each frequency here when needed
22
23const struct powercode sonyCode PROGMEM = {
24 37470,
25 {{245, 60},
26 {123, 60},
27 {61 , 60},
28 {123, 60},
29 {61 , 60},
30 {123, 60},
31 {61 , 60},
32 {61 , 60},
33 {123, 60},
34 {61 , 60},
35 {61 , 60},
36 {61 , 60},
37 {61 , 2759},
38 {245, 60},
39 {123, 60},
40 {61 , 60},
41 {123, 60},
42 {61 , 60},
43 {123, 60},
44 {61 , 60},
45 {61 , 60},
46 {123, 60},
47 {61 , 60},
48 {61 , 60},
49 {61 , 60},
50 {61 , 0}}
51};
52const struct powercode panasonicCode PROGMEM = {
53 36130,
54 {{358,179},
55 {44, 45},
56 {44, 135},
57 {44, 45},
58 {44, 45},
59 {44, 45},
60 {44, 45},
61 {44, 45},
62 {44, 45},
63 {44, 45},
64 {44, 45},
65 {44, 45},
66 {44, 45},
67 {44, 45},
68 {44, 135},
69 {44, 45},
70 {44, 45},
71 {44, 45},
72 {44, 45},
73 {44, 45},
74 {44, 45},
75 {44, 45},
76 {44, 45},
77 {44, 45},
78 {44, 135},
79 {44, 45},
80 {44, 45},
81 {44, 45},
82 {44, 45},
83 {44, 45},
84 {44, 45},
85 {44, 45},
86 {44, 45},
87 {44, 135},
88 {44, 45},
89 {44, 135},
90 {44, 135},
91 {44, 135},
92 {44, 135},
93 {44, 45},
94 {44, 45},
95 {44, 135},
96 {44, 45},
97 {44, 135},
98 {44, 135},
99 {44, 135},
100 {44, 135},
101 {44, 45},
102 {44, 135},
103 {44, 7720},
104 {358, 180},
105 {44, 45},
106 {44, 135},
107 {44, 45},
108 {44, 45},
109 {44, 45},
110 {44, 45},
111 {44, 45},
112 {44, 45},
113 {44, 45},
114 {44, 45},
115 {44, 45},
116 {44, 45},
117 {44, 45},
118 {44, 135},
119 {44, 45},
120 {44, 45},
121 {44, 45},
122 {44, 45},
123 {44, 45},
124 {44, 45},
125 {44, 45},
126 {44, 45},
127 {44, 45},
128 {44, 135},
129 {44, 45},
130 {44, 45},
131 {44, 45},
132 {44, 45},
133 {44, 45},
134 {44, 45},
135 {44, 45},
136 {44, 45},
137 {44, 135},
138 {44, 45},
139 {44, 135},
140 {44, 135},
141 {44 ,135},
142 {44 ,135},
143 {44, 45},
144 {44, 45},
145 {44, 135},
146 {44, 45},
147 {44, 135},
148 {44, 135},
149 {44, 135},
150 {44, 135},
151 {44, 45},
152 {44, 135},
153 {44, 0}}
154};
155
156const struct powercode sony2Code PROGMEM = {
157
158 37470,
159
160 { {245, 60},
161
162 {123, 60},
163
164 {123, 60},
165
166 {123, 60},
167
168 {123, 60},
169
170 {61, 60},
171
172 {123, 60},
173
174 {61, 60},
175
176 {123, 60},
177
178 {61, 60},
179
180 {61, 60},
181
182 {61, 60},
183
184 {61, 2636},
185
186 {246, 60},
187
188 {123, 60},
189
190 {123, 60},
191
192 {123, 60},
193
194 {123, 60},
195
196 {61, 60},
197
198 {123, 60},
199
200 {61, 60},
201
202 {123, 60},
203
204 {61, 60},
205
206 {61, 60},
207
208 {61, 60},
209
210 {61, 0} }
211
212};
213
214
215
216const struct powercode sony3Code PROGMEM = {
217
218 74940,
219
220 { {250, 63},
221
222 {121, 63},
223
224 { 60, 63},
225
226 {121, 63},
227
228 { 60, 63},
229
230 {121, 63},
231
232 { 60, 63},
233
234 { 60, 63},
235
236 {121, 63},
237
238 { 60, 63},
239
240 { 60, 63},
241
242 { 60, 63},
243
244 { 60, 2819},
245
246 {250, 63},
247
248 {121, 63},
249
250 { 60, 63},
251
252 {121, 63},
253
254 { 60, 63},
255
256 {121, 63},
257
258 { 60, 63},
259
260 { 60, 63},
261
262 {121, 63},
263
264 { 60, 63},
265
266 { 60, 63},
267
268 { 60, 63},
269
270 { 60, 0}
271
272 }
273
274};
275PROGMEM const powercode *powerCodes[] = {
276 &sonyCode, &panasonicCode, &sony2Code, &sony3Code
277}; // select the codes you like
278
279int num_codes = (sizeof(powerCodes)/sizeof(*powerCodes)); // count how many codes are in the list
280
281void setup() {
282 DDRD = _BV(DDD6); // sets Pin 6 as output
283}
284
285void loop(){
286 for(i=0;i<num_codes;i++){ //Iterate between powercodes
287 cfreq = pgm_read_word(pgm_read_word(&(powerCodes[i]))+0); // store the frequency
288 unsigned char compareVal = (F_CPU/cfreq - 1)/2; // transform it to cpu cycles
289 TCCR0A = 0; // make sure timer is off before updating OCR0A
290 OCR0A = compareVal; // update timer
291 for (int arrayStep = 0; pgm_read_word(pgm_read_word(&(powerCodes[i]))+(8*arrayStep)+8)!=0; arrayStep++){
292 transmitCode(pgm_read_word(pgm_read_word(&(powerCodes[i]))+(8*arrayStep)+4),pgm_read_word(pgm_read_word(&(powerCodes[i]))+(8*arrayStep)+8)); // transmit the code using function described below
293 }
294 delayMicroseconds(250);// Avoid interferring a powercode and the next one if frequencies are similar
295 }
296}
297
298void transmitCode(int onTime, int offTime){
299// transmits one element of the POWER code
300 TCNT0 = 0; // reset timer 0
301 TCCR0A = _BV(COM0A0) | _BV(WGM01); // set up timer 0
302 TCCR0B = _BV(CS00); // turn on timer 0
303 delayMicroseconds(10*onTime); // wait for onTime
304 TCNT0 = 0; // stop timer
305 TCCR0A = 0; // clear register A
306 TCCR0B = 0; // clear register B
307 PORTD = ~_BV(PORTD6); // turn off the LED
308 delayMicroseconds(10*offTime); // wait for offTime
309}
This page took 0.338049 seconds and 4 git commands to generate.