Niepoprawność wykonywania tego samego kodu MEGA2560

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
ElectronicRide
Majsterkowicz
Posty: 58
Rejestracja: 17 cze 2016, 14:50

Niepoprawność wykonywania tego samego kodu MEGA2560

Post autor: ElectronicRide » 16 lis 2017, 13:05

Witam wszystkich!
Od pewnego czasu wykonuje kontroler do anteny tzw. rotator. Program starałem się pisać jak najprościej i bez niepotrzebnych komplikacji (jak wyszło ocenicie sami), więc pisałem etapowo najpierw program do otwierania i zamykania anteny, następnie do rotacji w lewą i prawą stronę a na koniec rotacja głowicy również w lewą i prawą stronę. Zrobiłem podział na Voidy i sterowanie przyciskami.

Co do mechaniki to każda oś posiada oczywiście po 2 krańcówki optyczne, podnoszenie anteny realizowane za pośrednictwem sterownika silników DC (bo silnik szczotkowy będzie podnosił i opuszczał antenę), i jego sterowanie jest proste: wyprowadzenia obrotu w L i R stronę i pin prędkości PWM (na filmiku diody czerwone to kierunek obrotów a żółte, ziel. i nieb to PWM).
Następna oś obrotu sterowanie silnikiem krokowym ze stepstikiem A4988: wejście kierunku: stan niski to rotacja w lewo a wysoki w prawo. Wejście STEP - po podaniu stanu HIGH silnik robi jeden krok.
Jak widać prosta konstrukcja i jak pojedyńcze częsci programu działają w miarę płynnie to połączone razem dają efekt jak na filmikach:
https://drive.google.com/open?id=1uBQjh ... VqsZgMz5EV
Tutaj widać już opóźnienie vidu w lewo.
Oto sketch do podnoszenia i opuszczania:

Kod: Zaznacz cały


// DEFINICJA DO PINOW PODNOSZENIA I SKLADANIA///////
#define silnikGpin  13
#define silnikDpin  11
#define silnikPWMpin 12
#define krancowkaGpin 34
#define krancowkaDpin 35
#define przyciskGpin 52
#define przyciskDpin 53


//  zdefiniowane zmienne przyciskow
int stanprzyciskuG = 0;
int stanprzyciskuD = 0;

//zdef zmienne krancowke
int stankrancowkiG = 0;
int stankrancowkiD = 0;
////////////KONIEC////////////////////////////



// wejścia i wyjscia od czesci rotacyjnej lewo i prawo os X
#define kiersilRR  4
#define predsilRL  5
#define krancowkaRLpin 7
#define krancowkaRRpin 8
#define przyciskRLpin 9
#define przyciskRRpin 10

//  zdefiniowane zmienne obrotu osiX 
int stanprzyciskurotacjaR = 0;
int stanprzyciskurotacjaL = 0;


//zdef zmienne krancowke
int stankrancowkirotacjaR = 0;
int stankrancowkirotacjaL = 0;
//////////////KONIEC///////////////////










void setup() {


  Serial.begin(9600);
  pinMode(silnikGpin, OUTPUT);
  pinMode(silnikDpin, OUTPUT);
  pinMode(krancowkaGpin, INPUT_PULLUP);
  pinMode(krancowkaDpin, INPUT_PULLUP);
  pinMode(przyciskGpin, INPUT_PULLUP);
  pinMode(przyciskDpin, INPUT_PULLUP);
  // pinMode(buttonPin, INPUT);
  // pinMode(buttonPin, INPUT);

}



void otwieranie() {/////// OTWIERANIE ANTENY //////////////


  //jezeli antena zamknieta to otworz
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == LOW)) {
    Serial.println("Antena zamknieta! Otwieranie anteny");

    analogWrite(silnikPWMpin, 200);
    digitalWrite(silnikGpin, HIGH);
    digitalWrite(silnikDpin, LOW);
  }

  // jezeli otwarta to nic nie rob
  if ((stankrancowkiG == LOW) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena juz otwarta!!!");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);

  }

  //jezeli antena pomiedzy to powoli otworz  LUB TRYB AWARYJNY RECZNY
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Otwieram!");

    analogWrite(silnikPWMpin, 200);
    digitalWrite(silnikGpin, HIGH);
    digitalWrite(silnikDpin, LOW);
  }
}

////////////////////  KONIEC   ///////////////////////////////





void zamykanie() {/////// ZAMYKANIE ANTENY  ////////////////


  //jezeli antena otwarta to zamknij
  if ((stankrancowkiG == LOW) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena otwarta! Zamykanie anteny");

    analogWrite(silnikPWMpin, 200);
    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, HIGH);
  }

  // jezeli zaamknieta to nic nie rob
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == LOW)) {
    Serial.println("Antena juz zamknieta!!!");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);

  }

  //jezeli antena pomiedzy to powoli zamknij LUB TRYB AWARYJNY RECZNY
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Zamykam!");

    analogWrite(silnikPWMpin, 200);
    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, HIGH);
  }
}







void loop() {


  //predkosc silnika


  // przyciski kierunku
  stanprzyciskuG = digitalRead(przyciskGpin);
  stanprzyciskuD = digitalRead(przyciskDpin);

  //krancowki
  stankrancowkiG = digitalRead(krancowkaGpin);
  stankrancowkiD = digitalRead(krancowkaDpin);



//////////////////// OTWIERANIE ANTENY ////////////

  if (stanprzyciskuG == LOW) {
    Serial.println("Przycisk podnoszenie wciśniety");

    otwieranie();

    
  } else {
    Serial.println("przycisk UP nie wcisniety");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);
  }

//////////// KONIEC OTWIERANIA ///////////////////




//////////////// ZAMYKANIE ANTENY ////////////////
  if (stanprzyciskuD == LOW) {
    Serial.println("Przycisk zamykanie wciśniety");

    //analogWrite(silnikPWMpin, 200);

zamykanie();

  } else {
    Serial.println("przycisk zamykanie nie wcisniety");

    analogWrite(silnikPWMpin, 0);
    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
  }

///////////////// KONIEC ZAMYKANIA //////////////






////////////////// ROTACJA W LEWĄ STRONE ////////////////



/////////////////// KONIEC ROTACJI W LEWO ////////////////





/////////////////... ROTACJA W PRAWO ...///////////////////////


/////////////////.... KONIEC ROTACJI W PRAWO .... //////////////
}



Natomiast połączone programy dają już tak uciążliwy efekt jak na filmiku (tylko voidy w lewo):https://drive.google.com/open?id=19XZBP ... PylUOBPkWa
I oto sketch do całości:

Kod: Zaznacz cały

//#include <Wire.h>  
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
                    //0x3F



// DEFINICJA DO PINOW PODNOSZENIA I SKLADANIA///////
#define silnikGpin  13
#define silnikDpin  11
#define silnikPWMpin 12
#define krancowkaGpin 34
#define krancowkaDpin 35
#define przyciskGpin 52
#define przyciskDpin 53

//  zdefiniowane zmienne przyciskow OPEN I CLOSE
int stanprzyciskuG = 0;
int stanprzyciskuD = 0;

//zdef zmienne krancowke OPEN I CLOSE
int stankrancowkiG = 0;
int stankrancowkiD = 0;


/////////   KONIEC    ////////


// wejścia i wyjscia od rotacji X LiR
#define silnikXLRpin 7 // high w prawo - wdl wskazowek zegara
#define silnikXkrokpin 6
#define krancowkaXlpin 28
#define krancowkaXRpin 29
#define przyciskXLpin 48
#define przyciskXRpin 49


//  zdefiniowane zmienne przyciskow
int stanprzyciskuXL = 0;
int stanprzyciskuXR = 0;

//zdef zmienne krancowke
int stankrancowkiXL = 0;
int stankrancowkiXR = 0;
////////////KONIEC////////////////////////////



// wejścia i wyjscia od PRZECHYLENIA Y LiR
#define silnikYLRpin 3 // low - lewo, high - prawo,
#define silnikYkrokpin 2
#define krancowkaYlpin 22
#define krancowkaYRpin 23
#define przyciskYLpin 44
#define przyciskYRpin 45


//  zdefiniowane zmienne przyciskow
int stanprzyciskuYL = 0;
int stanprzyciskuYR = 0;

//zdef zmienne krancowke
int stankrancowkiYL = 0;
int stankrancowkiYR = 0;
////////////KONIEC////////////////////////////






void setup() {


  lcd.begin(20, 4);
  lcd.clear();
  lcd.print("   INICJALIZACJA "); //pierwszy wiersz
  lcd.setCursor(0, 1); // 0,1 drugi wiersz
  lcd.print("   PROSZE CZEKAC  ");
  lcd.setCursor(0, 2); // 0,1 drugi wiersz
  lcd.print("  Rotator anteny ");
 
  
  delay(3000);
  lcd.clear();

  Serial.begin(250000);// SERIAL próby różnych prędkości najmniejsze na 115200bps




  //////// OPEN I CLOSE /////////////////
  pinMode(silnikGpin, OUTPUT);
  pinMode(silnikDpin, OUTPUT);
  pinMode(krancowkaGpin, INPUT_PULLUP);
  pinMode(krancowkaDpin, INPUT_PULLUP);
  pinMode(przyciskGpin, INPUT_PULLUP);
  pinMode(przyciskDpin, INPUT_PULLUP);
  digitalWrite(silnikGpin, LOW);
  digitalWrite(silnikDpin, LOW);

  ////////// KONIEC /////////



  /////////// ROTACJA W L I R ///////////////////////
  pinMode(silnikXLRpin, OUTPUT);
  pinMode(silnikXkrokpin, OUTPUT);
  pinMode(krancowkaXlpin, INPUT_PULLUP);
  pinMode(krancowkaXRpin, INPUT_PULLUP);
  pinMode(przyciskXLpin, INPUT_PULLUP);
  pinMode(przyciskXRpin, INPUT_PULLUP);
  digitalWrite(silnikXkrokpin, LOW);

  /////////// KONIEC //////////////



  ////////// PRZECYLENIE W L I R //////////////
  pinMode(silnikYLRpin, OUTPUT);
  pinMode(silnikYkrokpin, OUTPUT);
  pinMode(krancowkaYlpin, INPUT_PULLUP);
  pinMode(krancowkaYRpin, INPUT_PULLUP);
  pinMode(przyciskYLpin, INPUT_PULLUP);
  pinMode(przyciskYRpin, INPUT_PULLUP);
  digitalWrite(silnikYkrokpin, LOW);

  //////// KONIEC////////////////

}




void otwieranie() {

  //jezeli antena zamknieta to otworz
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == LOW)) {
    Serial.println("Antena zamknieta! Otwieranie anteny");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Zamknięta - otwieram");

    digitalWrite(silnikGpin, HIGH);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 200);

  }

   //jezeli antena pomiedzy to powoli otworz  LUB TRYB AWARYJNY RECZNY
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Otwieram!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Między zakr. otwier.");

    digitalWrite(silnikGpin, HIGH);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 200);

  }

  // jezeli otwarta to nic nie rob
  if ((stankrancowkiG == LOW) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena juz otwarta!!!");
        lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("  Antena otwarta!! ");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);

  }
}



void zamykanie() {

  //jezeli antena otwarta to zamknij
  if ((stankrancowkiG == LOW) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena otwarta! Zamykanie anteny");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print(" Otwarta - zamykam ");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, HIGH);
    analogWrite(silnikPWMpin, 200);

  }

 //jezeli antena pomiedzy to powoli zamknij LUB TRYB AWARYJNY RECZNY
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Zamykam!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Między zakr. zamyk.");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, HIGH);
    analogWrite(silnikPWMpin, 200);
  }


  // jezeli zaamknieta to nic nie rob
  if ((stankrancowkiG == HIGH) && (stankrancowkiD == LOW)) {
    Serial.println("Antena juz zamknieta!!!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print(" Antena zamknięta!!");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);
  }
}






void lewoX() {/////// ROTACJA W LEWO //////////////


  //jezeli krańcówka R ON to rotacja w L
  if ((stankrancowkiXL == HIGH) && (stankrancowkiXR == LOW)) {
    Serial.println("Rotacja w lewo");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Rotacja w lewo");

    analogWrite(silnikXkrokpin, 5);
    digitalWrite(silnikXLRpin, LOW);//low to lewo
   // analogWrite(silnikXkrokpin, 5);
  }

  //jezeli krańcówka L ON to koniec rotacji w L
  if ((stankrancowkiXL == LOW) && (stankrancowkiXR == HIGH)) {
    Serial.println("Koniec zakr. w lewo");

    digitalWrite(silnikXLRpin, LOW);//
    analogWrite(silnikXkrokpin, 0);
  }


  //jezeli antena pomiedzy to obracaj w wybranym kierunku
  if ((stankrancowkiXL == HIGH) && (stankrancowkiXR == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Rotcja w LEWO!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Rotacja w lewo");
    
    digitalWrite(silnikXLRpin, LOW);
    analogWrite(silnikXkrokpin, 5);

  }
}
////////////////////  KONIEC   ///////////////////////////////





void prawoX() { /////// ROTACJA W PRAWO  ////////////////


  //jezeli krancowka L ON to rotaacja w prawo
  if ((stankrancowkiXL == LOW) && (stankrancowkiXR == HIGH)) {
    Serial.println("MAX L rotacja w prawo");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Rotacja w prawo");

    analogWrite(silnikXkrokpin, 5);
    digitalWrite(silnikXLRpin, HIGH);// W PRAWO
  }

  // jezeli kracnowka R ON to zatrzymaj!!
  if ((stankrancowkiXL == HIGH) && (stankrancowkiXR == LOW)) {
    Serial.println("MAX R koniec zakresu!!!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Rotacja w prawo MAX!");

    digitalWrite(silnikXLRpin, HIGH);
    analogWrite(silnikXkrokpin, 0);

  }

  //jezeli antena pomiedzy zakresamo to rotacja w prawo
  if ((stankrancowkiXL == HIGH) && (stankrancowkiXR == HIGH)) {
    Serial.println("Antena miedzy zakresami rotacja R!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Rotacja w prawo");

    analogWrite(silnikXkrokpin, 5);
    digitalWrite(silnikXLRpin, HIGH);
  }
}

//////////////////// KONIEC ROTACJA W LEWO I PRAWO ///////////////




//////// PRZECHYLENIE L I R VOIDY //////



void lewoY() {/////// PRZECHYLENIE W LEWO //////////////


  //jezeli krańcówka R ON to rotacja w L
  if ((stankrancowkiYL == HIGH) && (stankrancowkiYR == LOW)) {
    Serial.println("Przechylenie w lewo");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w lewo MIN");

    digitalWrite(silnikYLRpin, LOW);//low=lewo
    analogWrite(silnikYkrokpin, 5);
  }

  //jezeli krańcówka L ON to koniec rotacji w L
  if ((stankrancowkiYL == LOW) && (stankrancowkiYR == HIGH)) {
    Serial.println("MAX w LEWO koniec zakresu!!!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w lewo MAX");

    digitalWrite(silnikYLRpin, LOW);//
    analogWrite(silnikYkrokpin, 0);
  }


  //jezeli antena pomiedzy to przechylenie w lewo
  if ((stankrancowkiYL == HIGH) && (stankrancowkiYR == HIGH)) {
    Serial.println("Antena miedzy zakresami!!! Przechy w LEWO!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w lewo");

    analogWrite(silnikYkrokpin, 5);
    digitalWrite(silnikYLRpin, LOW);
  }
}
////////////////////  KONIEC   ///////////////////////////////





void prawoY() {/////// PRZECHYLENIE W PRAWO  ////////////////


  //jezeli krancowka L ON to rotaacja w prawo
  if ((stankrancowkiYL == LOW) && (stankrancowkiYR == HIGH)) {
    Serial.println("MAX L przychyl w prawo");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w prawo MIN");
    
    analogWrite(silnikYkrokpin, 5);
    digitalWrite(silnikYLRpin, HIGH);
  }

  // jezeli kracnowka R ON to zatrzymaj!!
  if ((stankrancowkiYL == HIGH) && (stankrancowkiYR == LOW)) {
    Serial.println("MAX R koniec zakresu!!!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w prawo MAX");

    digitalWrite(silnikYLRpin, HIGH);
    analogWrite(silnikYkrokpin, 0);
  }

  //jezeli antena pomiedzy zakresamo to rotacja w prawo
  if ((stankrancowkiYL == HIGH) && (stankrancowkiYR == HIGH)) {
    Serial.println("Antena miedzy zakresami przychyl R!");
    lcd.setCursor(0, 0); // 0,0 I wiersz
    lcd.print("Przechył w prawo");

    analogWrite(silnikYkrokpin, 5);
    digitalWrite(silnikYLRpin, HIGH);
  }
}

////////KONIEC VOID L I R PRZECHYL////////////



void loop() {


lcd.clear();




  // przyciski podnoszenie i close
  stanprzyciskuG = digitalRead(przyciskGpin);
  stanprzyciskuD = digitalRead(przyciskDpin);
  //krancowki
  stankrancowkiG = digitalRead(krancowkaGpin);
  stankrancowkiD = digitalRead(krancowkaDpin);




  // przyciski kierunku
  stanprzyciskuXL = digitalRead(przyciskXLpin);
  stanprzyciskuXR = digitalRead(przyciskXRpin);
  //krancowki
  stankrancowkiXL = digitalRead(krancowkaXlpin);
  stankrancowkiXR = digitalRead(krancowkaXRpin);




  // przyciski kierunku
  stanprzyciskuYL = digitalRead(przyciskYLpin);
  stanprzyciskuYR = digitalRead(przyciskYRpin);
  //krancowki
  stankrancowkiYL = digitalRead(krancowkaYlpin);
  stankrancowkiYR = digitalRead(krancowkaYRpin);






  //otwieranie anteny
  if (stanprzyciskuG == LOW) {
    Serial.println("Przycisk podnoszenie wciśniety");
     lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("OPEN wciśnięty");

    otwieranie();

  } else {
    Serial.println("przycisk UP nie wcisniety");

    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
    analogWrite(silnikPWMpin, 0);
  }



  //zamykanie anteny
  if (stanprzyciskuD == LOW) {
    Serial.println("Przycisk zamykanie wciśniety");
    lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("CLOSE wciśnięty");

    zamykanie();

  } else {
    Serial.println("przycisk zamykanie nie wcisniety");

    analogWrite(silnikPWMpin, 0);
    digitalWrite(silnikGpin, LOW);
    digitalWrite(silnikDpin, LOW);
  }




  //////////////////// ROTACJA W LEWO ///////////////

  if (stanprzyciskuXL == LOW) {
    Serial.println("Przycisk ROTACJA w LEWO");
    lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("ROTACJA L wciśnięty");

    lewoX();

  } else {
    Serial.println("przycisk ROTACJA w LEWO nie wciśnięty");

    analogWrite(silnikXkrokpin, 0);
  }

  //////////// KONIEC ROTACJI W LEWO ///////////////////




  //////////////// ROTACJA W PRAWO ////////////////
  if (stanprzyciskuXR == LOW) {
    Serial.println("Przycisk Rotacja w PRAWO");
    lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("ROTACJA R wciśnięty");

    prawoX();


  } else {
    Serial.println("przycisk ROTACJA w PRAWO nie wciścniety!");

    analogWrite(silnikXkrokpin, 0);
  }

  ///////////////// KONIEC ROTACJI W PRAWO //////////////





  //////////////////// PRZECHYL W LEWO ///////////////

  if (stanprzyciskuYL == LOW) {
    Serial.println("Przycisk PRZECHYL w LEWO");
    lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("PRZECHYL L wciśnięty");

    lewoY();

  } else {
    Serial.println("przycisk PRZECHYL w LEWO nie wciśnięty");

    analogWrite(silnikYkrokpin, 0);
  }


  //////////////// PRZECHYL W PRAWO ////////////////
  if (stanprzyciskuYR == LOW) {
    Serial.println("Przycisk PRZECHYL w PRAWO");
    lcd.setCursor(0, 1); // 0,0 I wiersz
    lcd.print("PRZECHYL R wciśnięty");

    prawoY();

  } else {
    Serial.println("przycisk PRZECHYL w PRAWO nie wciścniety!");

    analogWrite(silnikYkrokpin, 0);
  }
  ///////////////// KONIEC PRZECHYL W PRAWO //////////////

}

Kod trochę jak tasiemiec ale mam nadzieję, że ktoś znajdzie przyczynę słabego działania każdego voidu w lewo :o
Czy wcześniejsze dogotalRead może taki problem powodować?

Ciekawostka jest taka, że jak zamieniłem w loop-pie miejscami otwieranie i zamykanie to sytuacja była odwrotna :o
Bardzo proszę o poświęcenie trochę czasu i pomoc w rozwiązaniu problemu.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1137
Rejestracja: 18 lis 2011, 02:18

Re: Niepoprawność wykonywania tego samego kodu MEGA2560

Post autor: Marhef » 16 lis 2017, 22:00

Kolego, przede wszystkim nazewnictwo. Void to typ. To, co nazywasz voidami, to są funkcje.
Kod przejrzę później, teraz nie mam możliwości.
Filmiku też nie mogę uruchomić, więc nawet nie wiem, co nie działa, obejrzę później i może coś napiszę :)

EDIT:
No i piszę:
A czy przypadkiem w funkcji obrotu w prawo nie wyłączasz obrotu w lewo?
To by tłumaczyło, dlaczego jeśli zamienisz funkcje miejscami, nie działa Ci drugi obrót. Nie udało mi się tego znaleźć w kodzie, nie mam za bardzo czasu na szukanie. Sprawdź, czy to, o czym piszę, nie jest problemem.
ElectronicRide
Majsterkowicz
Posty: 58
Rejestracja: 17 cze 2016, 14:50

Re: Niepoprawność wykonywania tego samego kodu MEGA2560

Post autor: ElectronicRide » 17 lis 2017, 11:09

No ja nie mogę... Tyle analizowania a takiej głupiej głupoty nie zauważyłem!!
Dzięki wielkie za pomoc, Jesteś genialny, już wszystko działa!
ODPOWIEDZ

Strony partnerskie: