Stránka 1 z 1

Ovladanie dvoch x y motorov pomocou serial a hw alebo sw joysticku

Napsal: 09 pro 2020, 18:35
od 00alkskodi00
Zdravim vsetkych.

Mam taky pre mna zadrhel.

Potrebujem ovladat dva motory naraz. Data, ktore pojdu cez serial su taketo: X178,Y-211

Akym sposobom viem yieto data rozdelit do dvoch premennych? Keby to bolo iba cislo, cislo tak by sa to citalo ako dva bajty ak sa nemylim. Okrem tohto prikazu pouzivam aj nejake tlacitka a podobne ale mam tak aj joystick a tie data proste vypadaju takto ako som napisal

Neviem ci som to napisal zrozumitelne

Dikes

Re: Ovladanie dvoch x y motorov pomocou serial a hw alebo sw joysticku

Napsal: 10 pro 2020, 09:36
od ondraN
Co si takhle prostudovat nejdříve dokumentaci k Serial :mrgreen:
https://www.arduino.cc/reference/en/lan ... /parseint/

Re: Ovladanie dvoch x y motorov pomocou serial a hw alebo sw joysticku

Napsal: 10 pro 2020, 21:45
od 00alkskodi00
Keby som s toho nebol polovicny jelen tak tu nepisem, napriklad vcera som prisiel na to ze mozem spolu pocitat int a float ;)
:mrgreen:

Re: Ovladanie dvoch x y motorov pomocou serial a hw alebo sw joysticku

Napsal: 12 pro 2020, 21:58
od 00alkskodi00
Tak som sa do toho pustil a urobil som nieco co bolo v mojich silach, urcite to pojde jednoduhsie, len naozaj neviem ako, je to velmi pomale pokial by som chcel ovladat packou cez bluetooth nejake zariadenie, ked som to pusril v serial moniore a zadal tam nejaku hodnotu naprilkad X221,Y-31 tak to trvalo necelu sekundu kym mi prisla odpoved, myslite si ze to bude aj pri realnom ovladani take pomale ?

tu je kod:

Kód: Vybrat vše

String a = "X19,Y51"; // takto budu vapadat prichadzajuce data

void setup() {

  Serial.begin(115200);


}

void loop() {
while (Serial.available() > 0) {
  a = Serial.readString();
  }

    int dlzka = a.length() + 1; // zisti dlzku prichodzieho stringu
    char arrB[dlzka]; // pole pre ulozenie ascii 
  a.toCharArray(arrB, dlzka); // uloz string do pola
  // pozicie v array X a Y
  int poziciaX;
  int poziciaY;

  for (int i = 0; i < dlzka; i++) {
    // ak je znak X potom...
    if (arrB[i] == 88) {  //88 = X
      //Serial.print("Znak X sa nachádza: ");
      //Serial.println(i);
      poziciaY = i;
    }
    // ak je znak Y potom...
    if (arrB[i] == 89) {  //89 = Y
      //Serial.print("Znak Y sa nachádza: ");
      //Serial.println(i);
      poziciaY = i;
    }
    //Serial.print(arrB[i]);
  }
  // pozicia ciarka v array
  int poziciaiarka = poziciaY - 1;
  //Serial.print("Znak , sa nachádza: ");
  //Serial.println(poziciaiarka);

  // array X
  int dlzkaX = poziciaiarka - 1; // dlzka pola pre X suradnicu
  //Serial.println(dlzkaX);
  char arrX[dlzkaX]; // pole pre X suradnicu
  //Serial.print("X: ");
  String xJoystickStr; // premenna na vytiahnutie dat z pola X
  for (int i = 0; i < dlzkaX; i++) {
    arrX[i] = arrB[i + 1]; // priradzovanie char znakov do noveho pola X
    //Serial.print(arrX[i]);
    xJoystickStr += arrX[i]; // priradzovanie char znakov do stringu
  }
  int xJoystick = xJoystickStr.toInt(); // konverzia stringu do int, aby sa to dalo pouzit ako cislo
  //Serial.println(xJoystick);
  //Serial.println("");
  // array Y
  int dlzkaY = dlzka - poziciaiarka - 2;  // dlzka pola pre Y suradnicu
  //Serial.println(dlzkaY);
  char arrY[dlzkaY]; // pole pre Y suradnicu
  //Serial.print("Y: ");
  String yJoystickStr; // premenna na vytiahnutie dat z pola Y
  for (int i = 0; i < dlzkaY; i++) {
    arrY[i] = arrB[i + poziciaiarka + 2]; // priradzovanie char znakov do stringu
    //Serial.print(arrY[i]);
    yJoystickStr += arrY[i];
  }
  int yJoystick = yJoystickStr.toInt(); // konverzia stringu do int, aby sa to dalo pouzit ako cislo
  //Serial.println(yJoystick);
  //Serial.println("");

  Serial.println(xJoystick + yJoystick);

}
tie premenne potom hodim do funkcie, ktora bude pracovat s motormi