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 |
} |