Witam !!
Piszę program w którym drążkiem prawo lewo steruję kierunkiem obrotów silnika z enkoder.
Problem jest w tym że jak wejdę w :case 1900 ... 2900: //lewo drażek orientacji
to wykonuje komendy czyli obraca silnika, odczytuję stan nkoder i jak nadal trzymam drążek w lewo a n koder osiągnął obroty czyli zatrzask==0
int sprawdz_stan(int nkoderLewy)
{
if( nkoderLewy < (9000)) {
zatrzask=1; } else { zatrzask=0; }
return zatrzask;
}
to pomimo tego nadal kręci silnik. Pomaga chwilowe wyjście z case /puszczenie drążka/
void skret_lewo() //funkcja skretu w lewo
{
if (zatrzask==1)
{
//================================
PORTF.OUTSET = PIN7_bm; //lwew serwo- LEWO
TCF0.CCD = predkosc_skretu;// prędkośc lewe serwo- LEWO
}
return;
}
//ORIENTACJA PRAWO/LEWO====================
switch(orientacja)
{
case 2901 ... 3099: //pozycja środkowa drażka kierunku orientacji
prawa=0;
lewa=0;
predkosc_skretu=0;
TCE0.CCD=0; //prędkośc prawe serwo
TCF0.CCD=0;//prędkośc lewe serwo
break;
case 3100 ... 4100: // prawo drażek orientacji
prawa=((0.1111*orientacja)- 344.44); // 0-100
predkosc_skretu=2500;
skret_prawo();
break;
case 1900 ... 2900: //lewo drażek orientacji
lewa=((-0.1111*orientacja)+323.55); //0-100
predkosc_skretu=2500;
sprawdz_stan(nkoderLewy);
break;
}//ORIENTACJA PRAWO/LEWO====================