| Line 18... |
Line 18... |
| 18 |
#define SDIN PIN_D4 // seriovy vstup |
18 |
#define SDIN PIN_D4 // seriovy vstup |
| 19 |
#define SDOUT input(PIN_C5) // seriovy vystup |
19 |
#define SDOUT input(PIN_C5) // seriovy vystup |
| 20 |
#define SCLK PIN_D5 // takt |
20 |
#define SCLK PIN_D5 // takt |
| 21 |
|
21 |
|
| 22 |
#define LINE_PX 5 // pocet pixelu pro jiste urceni cary |
22 |
#define LINE_PX 5 // pocet pixelu pro jiste urceni cary |
| 23 |
#define OLSA_LEV 100 // rozhodovaci uroven (cca 10 odpovida cerne) |
23 |
#define OLSA_LEV 0x60 // rozhodovaci uroven (cca 10 odpovida cerne) |
| 24 |
|
24 |
|
| 25 |
// pro komunikaci s OLSA, prvni se posila LSB |
25 |
// pro komunikaci s OLSA, prvni se posila LSB |
| 26 |
int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B |
26 |
int main_reset[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B |
| 27 |
int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F |
27 |
int set_mode_rg[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F |
| 28 |
int clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00 |
28 |
int clear_mode_rg[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00 |
| Line 342... |
Line 342... |
| 342 |
delay_ms(10); |
342 |
delay_ms(10); |
| 343 |
printf("P_NARAZ: %u \r\n",BUMPR); |
343 |
printf("P_NARAZ: %u \r\n",BUMPR); |
| 344 |
delay_ms(10); |
344 |
delay_ms(10); |
| 345 |
if(BUMPL&&BUMPR) // po zmacknuti stran narazniku spusti test motoru |
345 |
if(BUMPL&&BUMPR) // po zmacknuti stran narazniku spusti test motoru |
| 346 |
{ |
346 |
{ |
| 347 |
beep(100,200); |
347 |
beep(100,1000); |
| 348 |
delay_ms(500); |
- |
|
| 349 |
printf("Levy naraznik - test OLSA\r\n"); |
348 |
printf("Levy naraznik - test OLSA\r\n"); |
| 350 |
printf("Pravy naraznik - test motoru\r\n"); |
349 |
printf("Pravy naraznik - test motoru\r\n"); |
| 351 |
delay_ms(500); |
350 |
delay_ms(500); |
| 352 |
if(BUMPR) |
351 |
while(true) |
| 353 |
{ |
- |
|
| 354 |
motor_test(); |
- |
|
| 355 |
} |
- |
|
| 356 |
if(BUMPL) |
- |
|
| 357 |
{ |
352 |
{ |
| 358 |
beep(100,200); |
- |
|
| 359 |
printf("TEST OLSA\r\n"); |
- |
|
| 360 |
while(true) |
353 |
if(BUMPR) |
| 361 |
{ |
354 |
{ |
| - |
|
355 |
beep(100,500); // pipni pri startu |
| 362 |
int8 tisk; |
356 |
motor_test(); |
| 363 |
int8 *tiskp; |
357 |
} |
| 364 |
read_olsa(); |
358 |
if(BUMPL) |
| 365 |
printf("cteni\r\n"); // po precteni vsech pixelu odradkuje |
- |
|
| 366 |
for(tiskp=0;tiskp<52;tiskp++) // tisk leve casti radky |
- |
|
| 367 |
{ |
359 |
{ |
| 368 |
tisk=olsa_lseg[tiskp]; |
360 |
beep(100,500); |
| 369 |
printf("%x ",tisk); |
361 |
printf("TEST OLSA\r\n"); |
| 370 |
} |
362 |
while(true) |
| 371 |
for(tiskp=0;tiskp<52;tiskp++) // tisk prave casti radky |
- |
|
| 372 |
{ |
363 |
{ |
| - |
|
364 |
int8 tisk; |
| - |
|
365 |
int8 *tiskp; |
| - |
|
366 |
read_olsa(); |
| - |
|
367 |
printf("cteni\r\n"); // po precteni vsech pixelu odradkuje |
| - |
|
368 |
for(tiskp=0;tiskp<52;tiskp++) // tisk leve casti radky |
| - |
|
369 |
{ |
| - |
|
370 |
tisk=olsa_lseg[tiskp]; |
| - |
|
371 |
printf("%x ",tisk); |
| - |
|
372 |
} |
| - |
|
373 |
for(tiskp=0;tiskp<52;tiskp++) // tisk prave casti radky |
| - |
|
374 |
{ |
| 373 |
tisk=olsa_rseg[tiskp]; |
375 |
tisk=olsa_rseg[tiskp]; |
| 374 |
printf("%x ",tisk); |
376 |
printf("%x ",tisk); |
| - |
|
377 |
} |
| 375 |
} |
378 |
} |
| 376 |
} |
379 |
} |
| 377 |
} |
380 |
} |
| 378 |
} |
381 |
} |
| 379 |
} |
382 |
} |
| Line 397... |
Line 400... |
| 397 |
r_motor_off(); // vypne pravy motor |
400 |
r_motor_off(); // vypne pravy motor |
| 398 |
output_high(LED1); // zhasne LED1 |
401 |
output_high(LED1); // zhasne LED1 |
| 399 |
output_high(LED2); // zhasne LED2 |
402 |
output_high(LED2); // zhasne LED2 |
| 400 |
olsa_reset(); |
403 |
olsa_reset(); |
| 401 |
olsa_setup(); |
404 |
olsa_setup(); |
| 402 |
beep(500,200); // pipni pri startu |
405 |
beep(100,500); // pipni pri startu |
| 403 |
printf("OK! \r\n"); |
406 |
printf("OK! \r\n"); |
| 404 |
delay_ms(500); |
407 |
delay_ms(500); |
| 405 |
printf("VYBRAT MOD... \r\n"); |
408 |
printf("VYBRAT MOD... \r\n"); |
| 406 |
while(true) |
409 |
while(true) |
| 407 |
{ |
410 |
{ |
| - |
|
411 |
//diag(); |
| 408 |
read_olsa(); |
412 |
read_olsa(); |
| 409 |
int8 searchp; // ukazatel na pole |
413 |
int8 searchp; // ukazatel na pole |
| 410 |
int8 search; // ulozeni prectene hodnoty |
414 |
int8 search; // ulozeni prectene hodnoty |
| 411 |
int1 segment; // cara je vlevo nebo vpravo |
415 |
int1 segment; // cara je vlevo nebo vpravo |
| 412 |
int8 position; // ulozeni pozice cary |
416 |
int8 position; // ulozeni pozice cary |
| 413 |
int8 protect_count; // opravdu vidime caru |
417 |
int8 protect_count; // opravdu vidime caru |
| 414 |
|
418 |
|
| 415 |
for(searchp=0;searchp<52;searchp++) // prohlizi levou cast cary |
419 |
for(searchp=0;searchp<52;searchp++) // prohlizi levou cast cary |
| 416 |
{ |
420 |
{ |
| 417 |
search=olsa_lseg[searchp]; // vybira pixel |
421 |
search=olsa_lseg[searchp]; // vybira pixel |
| 418 |
if(search<=OLSA_LEV) // cerna nebo bila? |
422 |
if(search==OLSA_LEV) // cerna nebo bila? |
| 419 |
{ |
423 |
{ |
| 420 |
protect_count++; // pokud nasleduje cerna, pricte 1 k poctu cernych pixelu |
424 |
protect_count++; // pokud nasleduje cerna, pricte 1 k poctu cernych pixelu |
| 421 |
} |
425 |
} |
| 422 |
else |
426 |
else |
| 423 |
{ |
427 |
{ |
| Line 425... |
Line 429... |
| 425 |
} |
429 |
} |
| 426 |
if(protect_count>LINE_PX) // vidim caru |
430 |
if(protect_count>LINE_PX) // vidim caru |
| 427 |
{ |
431 |
{ |
| 428 |
position=searchp; // zapis presnou pozici |
432 |
position=searchp; // zapis presnou pozici |
| 429 |
segment=LEFT; // cara je v leve polovine |
433 |
segment=LEFT; // cara je v leve polovine |
| 430 |
searchp=52; |
434 |
searchp=55; // ukonci hledani |
| 431 |
} |
435 |
} |
| 432 |
} |
436 |
} |
| 433 |
for(searchp=0;searchp<52;searchp++) // prohlizi pravou cast cary |
437 |
for(searchp=0;searchp<52;searchp++) // prohlizi pravou cast cary |
| 434 |
{ |
438 |
{ |
| 435 |
search=olsa_rseg[searchp]; // vybira pixel |
439 |
search=olsa_rseg[searchp]; // vybira pixel |
| 436 |
if(search<=OLSA_LEV) |
440 |
if(search==OLSA_LEV) |
| 437 |
{ |
441 |
{ |
| 438 |
protect_count++; // pokud nasleduje cerna, pricte 1 k poctu cernych pixelu |
442 |
protect_count++; // pokud nasleduje cerna, pricte 1 k poctu cernych pixelu |
| 439 |
} |
443 |
} |
| 440 |
else |
444 |
else |
| 441 |
{ |
445 |
{ |
| 442 |
protect_count=0; // pokud nasleduje bila, pocet cernych pixelu vynuluje |
446 |
protect_count=0; // pokud nasleduje bila, pocet cernych pixelu vynuluje |
| 443 |
} |
447 |
} |
| 444 |
if(protect_count>LINE_PX) // vidim caru |
448 |
if(protect_count>LINE_PX) // vidim caru |
| 445 |
{ |
449 |
{ |
| 446 |
position=(searchp+51); // zapis presnou pozici |
450 |
position=(searchp+50); // zapis presnou pozici |
| 447 |
segment=RIGHT; // cara je v prave polovine |
451 |
segment=RIGHT; // cara je v prave polovine |
| 448 |
searchp=52; |
452 |
searchp=55; // ukonci hledani |
| 449 |
} |
453 |
} |
| 450 |
} |
454 |
} |
| 451 |
printf("poloha: %u\r\n",position); |
455 |
printf("poloha: %u\r\n",position); |
| 452 |
position=0; |
456 |
position=0; |
| 453 |
} |
457 |
} |