16,9 → 16,14 |
#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 |
#define DATA PIN_B2 // K modulu LEDbar data |
#define CP PIN_B1 // K modulu LEDbar hodiny |
|
#define CASMIN 6 // Rozsah radku snimace |
#define CASMAX 192 |
#define CASAVR ((CASMAX+CASMIN) / 2) |
|
// Zobrazeni jednoho byte na modulu LEDbar |
void disp(int8 x) |
{ |
int n; |
33,6 → 38,7 |
} |
} |
|
// Blikani LEDbarem ve stilu Night Rider |
void NightRider(int x) |
{ |
int n,i,j; |
112,7 → 118,7 |
i2c_start(); // Brightness |
i2c_write(0xC0); |
i2c_write(0x06); |
i2c_write(0x90); // 80h |
i2c_write(0x9A); // 80h |
i2c_stop(); |
|
/* |
134,47 → 140,36 |
i2c_write(45); |
i2c_stop(); |
|
NightRider(1); // Aby se poznalo, ze byl RESET |
NightRider(1); // Musi se dat cas kamere na AGC a AEC |
|
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) |
{ |
int8 pom; |
|
pom=0; |
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky |
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 |
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni |
if(!input(PIX)) // Pokud se 3x za sebou precetla CERNA |
if(!input(PIX)) |
if(!input(PIX)) |
{ |
int8 pom; |
|
pom=get_timer0(); // Precti cas z citace casu hrany |
// cas=255-cas; // Vlevo je vpravo |
if(pom<0b11000000) cas=pom; |
break; |
}; |
}; |
while(input(HREF)); // Pockej na shozeni signalu HREF |
|
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku |
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury |
// a vubec to nejak na kraji nefunguje. |
|
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka |
Delay_ms(1); |
offset=read_adc(); |
188,30 → 183,32 |
output_low(SERVO); |
|
ble++; // Casovac pro odlozeni rozjezdu po zapnuti napajeni |
set_adc_channel(ZELENA); // Kroutitka pro vykon motoru (!!! to bude chtit jeste predelat !!!) |
set_adc_channel(ZELENA); // Kroutitko pro vykon motoru |
Delay_ms(1); |
offset=read_adc(); |
set_adc_channel(CERNA); |
Delay_ms(1); |
rr=read_adc(); |
rr=read_adc()>>2; //!!! // 0-31 |
|
disp(cas); |
disp(cas & 0b11110000); |
|
// Elektronicky diferencial |
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace |
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru |
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92 |
|
|
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni |
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); |
|
r1=cas>>1; // Elektronicky diferencial |
r2=255-offset-(cas>>1); |
// r1<<=1; // Rychlost je dvojnasobna |
// r2<<=1; // Rozsah 2 az 184 |
|
if (ble==99) // Rozjezd na Rozumnou rychlost |
{ |
set_pwm1_duty(rr); |
set_pwm2_duty(rr); |
}; |
if ((ble>100)&&(ble<60000)) // Jizda |
{ |
if (r1<=rr) set_pwm1_duty(r1); |
if (r2<=rr) set_pwm2_duty(r2); |
set_pwm1_duty(r1); |
set_pwm2_duty(r2); |
} |
else |
{ |
//!!!!!!!!!!!!!!!!!! Tenhle kod pred zavodem zrusit !!!!!!!!!!!!!!!!!!!!!!!!!!!! |
set_pwm1_duty(0); // Zastaveni |
set_pwm2_duty(0); |
} |