@@ -206,63 +206,104 @@ boolean img[210][10] = {
206
206
#define REED 2
207
207
#define POT A5
208
208
209
- // uint8_t LEDS[] = {A4, A3, A2, A1, A0, 13, 12, 11, 10, 9};
209
+ // usando portas digitais e analogicas para os leds
210
+ // razao: ficam do mesmo lado do chip ATMEGA328
211
+
210
212
uint8_t LEDS[] = {9 , 10 , 11 , 12 , 13 , A0, A1, A2, A3, A4};
211
213
212
214
boolean last_reed = LOW;
213
- float mps = 50000.0 ;
215
+
214
216
unsigned long time = 0 ;
215
217
unsigned long clock = 0 ;
216
218
unsigned long time2 = 0 ;
217
219
unsigned long clock2 = 0 ;
218
220
unsigned long milisec = 0 ;
219
221
220
222
int pos = 0 ;
223
+ float velo = 50000.0 ;
221
224
222
225
void setup (){
226
+
227
+ // todos os leds sao output
228
+
223
229
for (int i = 0 ; i < NUMBER_OF_LEDS; i++){
230
+
224
231
pinMode (LEDS[i],OUTPUT);
232
+
225
233
}
234
+
235
+ // reed switch como input
236
+ // fica HIGH quando o ima chega perto
237
+
226
238
pinMode (REED,INPUT);
239
+
240
+ // serial usado apenas para debug no arduino
241
+
227
242
Serial.begin (9600 );
243
+
228
244
}
229
245
230
246
void loop () {
247
+
248
+ // pega valor do reed e do trimpot
249
+
231
250
int reed_val = digitalRead (REED);
232
251
int pot = analogRead (POT);
233
- int gap = int (pot/1023.0 *200.0 );
234
- /*
235
- Serial.print(gap);
236
- Serial.print(" ");
237
- Serial.println(pot);
238
- //*/
239
-
252
+
253
+ // gap serve para rotacionar o desenho
254
+ // porcentagem do trimpot * largura em pixels
255
+
256
+ int gap = int (pot / 1023.0 * 200.0 );
257
+
258
+ // se valor do reed for diferente do anterior...
259
+
240
260
if (reed_val != last_reed){
261
+
262
+ // e se valor for LOW, eh porque o ima acabou de sair da zona magnetica
263
+ // ou seja, giro completo, reiniciar desenho e calcular velocidade
264
+
241
265
if (reed_val == LOW){
266
+
267
+ // calcula diferenca de tempo e reseta clock
268
+
242
269
time = micros () - clock;
243
270
clock = micros ();
271
+
272
+ // velocidade: tempo / largura em pixels
273
+
274
+ velo = (float )time / 200 ;
244
275
pos = 0 ;
245
- mps = ( float )time / 800 ;
276
+
246
277
}
278
+
247
279
last_reed = reed_val;
248
- }// */
249
280
250
- if (micros () - clock2 > mps){
281
+ }
282
+
283
+ // verificar se ja eh pra mostrar outra coluna de pixels
284
+
285
+ if (micros () - clock2 > velo){
251
286
252
287
clock2 = micros ();
253
288
254
- pos = (int )((float )(clock2 - clock)/mps*.25 );
289
+ // define posicao
290
+
291
+ pos = (int )((float )(clock2 - clock) / velo * 1.0 );
255
292
int newpos = (gap + pos) % 200 ;
256
-
257
- Serial. println (newpos);
258
-
259
- if (newpos> 0 && newpos< 200 ){
260
-
293
+
294
+ if (newpos > 0 && newpos < 200 ){
295
+
296
+ // envia para os leds
297
+
261
298
for (int i = 0 ; i < NUMBER_OF_LEDS; i++){
262
- digitalWrite (LEDS[i], img[newpos+10 ][i]);
299
+
300
+ digitalWrite (LEDS[i], img[newpos + 10 ][i]);
301
+
263
302
}
303
+
264
304
}
305
+
265
306
}
266
- // */
307
+
267
308
delayMicroseconds (5 );
268
309
}
0 commit comments