Rev 865 Rev 868
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 }