12,10 → 12,53 |
#define LED PIN_C0 // LED signalizujici start programu |
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku) |
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator)) |
#define SERVO PIN_B7 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem)) |
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem)) |
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2 |
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1 |
|
#define DATA PIN_B2 |
#define CP PIN_B1 |
|
void disp(int8 x) |
{ |
int n; |
|
x=~x; |
for(n=0;n<=7;n++) |
{ |
if (x & 1 == 1) output_high(DATA); else output_low(DATA); |
output_high(CP); |
x>>=1; |
output_low(CP); |
} |
} |
|
void NightRider(int x) |
{ |
int n,i,j; |
|
for(j=0;j<x;j++) |
{ |
i=0x01; |
for(n=0;n<7;n++) |
{ |
disp(i); |
rotate_left(&i, 1); |
delay_ms(100); |
} |
for(n=0;n<7;n++) |
{ |
disp(i); |
rotate_right(&i, 1); |
delay_ms(100); |
} |
} |
disp(i); |
delay_ms(100); |
i=0; |
disp(i); |
} |
|
void main() |
{ |
int8 cas; // Cas hrany bila/cerna v radce |
43,10 → 86,9 |
output_low(MOT_L); |
output_low(MOT_R); |
|
output_high(LED); // Budeme blikat LED, aby se poznalo, ze byl RESET |
NightRider(1); // Aby se poznalo, ze byl RESET |
// Musi se pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy |
|
delay_ms(200); // Musi se pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy |
|
//... Nastaveni kamery ... |
i2c_start(); // Soft RESET kamery |
i2c_write(0xC0); // Pro single slave musi mit vsechny zapisy adresu C0h |
60,19 → 102,20 |
i2c_write(0b01000001); |
i2c_stop(); |
|
|
/* |
i2c_start(); // Contrast |
i2c_write(0xC0); |
i2c_write(0x05); |
i2c_write(0xA0); |
i2c_write(0xA0); // 48h |
i2c_stop(); |
/* |
*/ |
i2c_start(); // Brightness |
i2c_write(0xC0); |
i2c_write(0x06); |
i2c_write(0x80); |
i2c_write(0x90); // 80h |
i2c_stop(); |
|
/* |
i2c_start(); // Band Filter |
i2c_write(0xC0); |
i2c_write(0x2D); |
91,16 → 134,25 |
i2c_write(45); |
i2c_stop(); |
|
output_low(LED); // Blikani LED |
delay_ms(200); |
NightRider(1); // Aby se poznalo, ze byl RESET |
|
output_high(LED); // Blikani LED |
delay_ms(200); |
output_low(LED); |
|
cas=128; // Inicializace promenych, aby neslo servo za roh a aby se to rozjelo jeste dneska |
ble=0; |
|
/* |
while(true) |
{ |
disp(ble); |
i2c_start(); |
i2c_write(0xC0); |
i2c_write(0x06); |
i2c_write(ble); |
i2c_stop(); |
delay_ms(1000); |
ble+=0x10; |
}; |
*/ |
|
// ... Hlavni smycka ... |
while(true) |
{ |
108,11 → 160,17 |
set_timer0(0); // Vynuluj pocitadlo casu |
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B |
{ |
// Dodelat rozpoznani cerne cary napric pro zastaveni |
// Pockat na shozeni signalu HREF |
if(!input(PIX)) // Pokud se dvakrat za sebou precetla CERNA |
if(!input(PIX)) |
if(!input(PIX)) |
{ |
cas=get_timer0(); // Precti cas z citace casu hrany |
cas=255-cas; // Vlevo je vpravo |
int8 pom; |
|
pom=get_timer0(); // Precti cas z citace casu hrany |
// cas=255-cas; // Vlevo je vpravo |
if(pom<0b11000000) cas=pom; |
break; |
}; |
}; |
137,6 → 195,8 |
Delay_ms(1); |
rr=read_adc(); |
|
disp(cas); |
|
r1=cas>>1; // Elektronicky diferencial |
r2=255-offset-(cas>>1); |
|