case nie można wyjść>>>

0

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====================
0

https://en.cppreference.com/w/cpp/language/switch
czyli ten switch nie jest poprawny i to nie ma prawa kompilować się poprawnie.

0
MarekR22 napisał(a):

https://en.cppreference.com/w/cpp/language/switch
czyli ten switch nie jest poprawny i to nie ma prawa kompilować się poprawnie.

już działa

f (zatrzask== true)
		{
			//================================
			PORTF.OUTSET = PIN7_bm; //lwew serwo- LEWO
			TCF0.CCD = predkosc_skretu;// prędkośc lewe serwo- LEWO
		}
	else {
		
		PORTF.OUTSET = PIN7_bm; //lwew serwo- LEWO
		TCF0.CCD = 0;// prędkośc lewe serwo- LEWO

Co masz na myśli: switch nie jest poprawny i to nie ma prawa kompilować się poprawnie ?
kompiluje się i działa

0

case range extension nie jest standardem C++, więc nie wszędzie będzie działać. Coś jak VLA.

1 użytkowników online, w tym zalogowanych: 0, gości: 1