Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 178 → Rev 179

/roboti/istrobot/camerus/SW/876/camerus.c
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);
}