Arm structure

Zo stránky 3D liga wiki
Verzia z 02:05, 8. máj 2026, ktorú vytvoril Sebastian (diskusia | príspevky) (Vytvorená stránka „<syntaxhighlight lang="C"> #include <Servo.h> // Joystick const int JOY_X = 26; const int JOY_Y = 27; const int JOY_SW = 6; // Touch senzory const int TOUCH_1 = 7; // dopredu/dozadu const int TOUCH_2 = 8; // dopredu/dozadu (opačný smer) // Servá #define SERVO_ROTACIA 12 // 360° – otáčanie doľava/doprava #define SERVO_HORE_DOLE 13 // 180° – pohyb nahor/nadol #define SERVO_DOPREDU 14 // 180° – pohyb dopredu/dozadu #define SERVO_KLIESTE…“)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Prejsť na navigáciu Prejsť na vyhľadávanie
#include <Servo.h>

// Joystick
const int JOY_X  = 26;
const int JOY_Y  = 27;
const int JOY_SW = 6;

// Touch senzory
const int TOUCH_1 = 7;   // dopredu/dozadu
const int TOUCH_2 = 8;   // dopredu/dozadu (opačný smer)

// Servá
#define SERVO_ROTACIA   12  // 360° – otáčanie doľava/doprava
#define SERVO_HORE_DOLE 13  // 180° – pohyb nahor/nadol
#define SERVO_DOPREDU   14  // 180° – pohyb dopredu/dozadu
#define SERVO_KLIESTE   15  // 180° – otvoriť/zatvoriť kliešte

Servo servoRotacia;
Servo servoHoreDole;
Servo servoDopredu;
Servo servoKlieste;

// Aktuálne pozície 180° serv (0–180°)
int posHoreDole = 90;
int posDopredu  = 90;
int posKlieste  = 90;  // 90 = zatvorené, 0 = otvorené

// Citlivosť joysticku – pásmo okolo stredu kde sa nič nedeje
const int DEAD_ZONE = 1000;  // stred je ~2048, ignorujeme 2048±1000, chceme okraje
const int SPEED = 2;        // o koľko stupňov sa servo pohne pri každom kroku

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);

  pinMode(JOY_SW,  INPUT_PULLUP);
  pinMode(TOUCH_1, INPUT);
  pinMode(TOUCH_2, INPUT);

  servoRotacia.attach(SERVO_ROTACIA,   500, 2500);
  servoHoreDole.attach(SERVO_HORE_DOLE, 500, 2500);
  servoDopredu.attach(SERVO_DOPREDU,   500, 2500);
  servoKlieste.attach(SERVO_KLIESTE,   500, 2500);

  // Nastav všetky servá do stredu
  servoRotacia.write(90);
  servoHoreDole.write(posHoreDole);
  servoDopredu.write(posDopredu);
  servoKlieste.write(posKlieste);
}

// Obmedzí hodnotu na rozsah min–max
int clamp(int val, int minVal, int maxVal) {
  if (val < minVal) return minVal;
  if (val > maxVal) return maxVal;
  return val;
}

void loop() {
  int x  = analogRead(JOY_X);
  int y  = analogRead(JOY_Y);
  int sw = digitalRead(JOY_SW);
  int t1 = digitalRead(TOUCH_1);
  int t2 = digitalRead(TOUCH_2);

  // 1. Otáčanie doľava/doprava – 360° servo
  // Stred (2048) = stoj, pod stred = jedna strana, nad stred = druhá strana
  if (x < 2048 - DEAD_ZONE) {
    // --- doplňte: otáčanie doľava ---
    // Nápoveda: servoRotacia.write(hodnota pod 90)
  } else if (x > 2048 + DEAD_ZONE) {
    // --- doplňte: otáčanie doprava ---
  } else {
    servoRotacia.write(90);  // stoj
  }

  // 2. Pohyb nahor/nadol – os Y joysticku
  if (y < 2048 - DEAD_ZONE) {
    posHoreDole = clamp(posHoreDole - SPEED, 0, 180);
  } else if (y > 2048 + DEAD_ZONE) {
    posHoreDole = clamp(posHoreDole + SPEED, 0, 180);
  }
  servoHoreDole.write(posHoreDole);

  // 3. Pohyb dopredu/dozadu – touch senzory
  if (t1 == HIGH) {
    posDopredu = clamp(posDopredu + SPEED, 0, 180);
  } else if (t2 == HIGH) {
    posDopredu = clamp(posDopredu - SPEED, 0, 180);
  }
  servoDopredu.write(posDopredu);

  // 4. Kliešte – stlačenie joysticku
  if (sw == LOW) {
    // --- doplňte: prepínanie otvorené/zatvorené ---
    // Nápoveda: použite bool premennú na zapamätanie stavu
    // a debouncing – pridajte delay alebo kontrolu zmeny stavu
  }
  servoKlieste.write(posKlieste);

  Serial.print("X:"); Serial.print(x);
  Serial.print(" Y:"); Serial.print(y);
  Serial.print(" HoreDole:"); Serial.print(posHoreDole);
  Serial.print(" Dopredu:"); Serial.print(posDopredu);
  Serial.print(" Klieste:"); Serial.println(posKlieste);

  delay(20);
}