Помогите мне разобраться что не так?

wolfram
Offline
Зарегистрирован: 24.06.2020
// Nunchuk controlled robotic arm by Igor Fonseca Albuquerque
// Original Nunchuk library by Robert Eisele: https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

//Include libraries
#include <Nunchuk.h>
#include <Wire.h>
#include <Servo.h>

//define variables
#define SERV1 8    //servo 1 on digital port 8
#define SERV2 9    //servo 2 on digital port 9
#define SERV3 10   //servo 3 on digital port 10
#define SERV4 11   //servo 4 on digital port 11
#define SERV5 12   //servo 5 on digital port 12
#define SERV6 13   //servo 6 on digital port 13

Servo s1; //servo 1
Servo s2; //servo 2
Servo s3; //servo 3
Servo s4; //servo 4
Servo s5; //servo 5
Servo s6; //servo 6

//define starting angle for each servo
//choose a safe position to start from
//it will try to move instantaniously to that position when powered up!
//those angles will depend on the angle of each servo during the assemble
int angle1 = 90; //servo 1 current angle
int angle2 = 30; //servo 2 current angle
int angle3 = 0;  //servo 3 current angle
int angle4 = 90; //servo 4 current angle
int angle5 = 90; //servo 5 current angle
int angle6 = 45; //servo 6 current angle
int servo1_speed = 3; //servo 1 speed
int servo2_speed = 3; //servo 2 speed
int servo3_speed = 3; //servo 3 speed
int servo4_speed = 1; //servo 4 speed
int servo5_speed = 1; //servo 5 speed

//define restrictions for each servo
//those angles will depend on the angle of each servo during the assemble
int angle1min = 0;   //servo 1 minimum angle
int angle1max = 180; //servo 1 maximum angle
int angle2min = 0;   //servo 2 minimum angle
int angle2max = 180; //servo 2 maximum angle
int angle3min = 0;   //servo 3 minimum angle
int angle3max = 180; //servo 3 maximum angle
int angle4min = 0;   //servo 4 minimum angle
int angle4max = 180; //servo 4 maximum angle
int angle5min = 0;   //servo 5 minimum angle
int angle5max = 180; //servo 5 maximum angle
int angle6min = 0;   //servo 6 minimum angle
int angle6max = 180; //servo 6 maximum angle

boolean display_angles = true; //boolean used to update the angle of each servo on Serial Monitor

//SETUP
void setup() {
    //attach each servo to a pin and start its position
    s1.attach(SERV1);
    s1.write(angle1);
    s2.attach(SERV2);
    s2.write(angle2);
    s3.attach(SERV3);
    s3.write(angle3);
    s4.attach(SERV4);
    s4.write(angle4);
    s5.attach(SERV5);
    s5.write(angle5);
    s6.attach(SERV6);
    s6.write(angle6);

    //start serial communication
    Serial.begin(9600);

    //start Nunchuk
    Wire.begin();
    nunchuk_init();
}

void loop() {
    //read Nunchuk sensors
    if (nunchuk_read()) {
        
        int x = nunchuk_joystickX();    //joystick X position
        int y = nunchuk_joystickY();    //joystick Y position
        boolean z = nunchuk_buttonZ();  //z button status
        boolean c = nunchuk_buttonC();  //c button status
        float pitch = nunchuk_pitch();  //pitch angle
        float roll = nunchuk_roll();    //roll angle

        //Turn left/right (at a fixed speed)
        //Turn left
        if (x > 90) {
          angle1 -= servo1_speed;
          display_angles = true;
          if (angle1 < angle1min) {
            angle1 = angle1min;
          }
        }
        //Turn right
        if (x < -90) {
          angle1 += servo1_speed;
          display_angles = true;
          if (angle1 > angle1max) {
            angle1 = angle1max;
          }
        }
        s1.write(angle1); //update servo position
        
        //Move up/down (at a fixed speed)
        //Move up
        if (y > 90) {
          angle3 += servo3_speed;
          display_angles = true;
          if (angle3 > angle3max) {
            angle3 = angle3max;
          }
        }
        //Move down
        if (y < -90) {
          angle3 -= servo3_speed;
          display_angles = true;
          if (angle3 < angle3min) {
            angle3 = angle3min;
          }
        }
        s3.write(angle3);  //update servo position

        // Enable accelerometer only when the buttons are pressed
        // Rotate gripper (only Z button pressed)
        if (c && !z) {
          roll = roll * 57.0 + 90.0; //convert do degrees
          servo5_speed = abs(angle5 - roll)/10 + 1; //speed proportional do the error between actual and desired angle
          if (roll > angle5) {
            angle5 += servo5_speed;
            display_angles = true;
          }
          if (roll < angle5) {
            angle5 -=servo5_speed;
            display_angles = true;
          }
          s5.write(angle5); //update servo position
        }

        //Move gripper up/down (only C button pressed)
        if (z && !c) {
          pitch = 60.0 - pitch * 57.0; //convert do degrees
          servo4_speed = abs(angle4 - pitch)/10 + 1; //speed proportional do the error between actual and desired angle
          if (pitch > angle4) {
            angle4 += servo4_speed;
            display_angles = true;
          }
          if (pitch < angle4) {
            angle4 -=servo4_speed;
            display_angles = true;
          }
          s4.write(angle4); //update servo position
        }

      //Open/close gripper (both buttons pressed)
      if(z && c) {
        s6.write(90); //close gripper
        display_angles = true;
      }
      else {
        s6.write(45); //open gripper
      }
    }

    //Show position of each servo
    if (display_angles) {
      Serial.println("//Current angles:");
      Serial.print("Servo #1: ");
      Serial.println(angle1);
      Serial.print("Servo #2: ");
      Serial.println(angle2);
      Serial.print("Servo #3: ");
      Serial.println(angle3);
      Serial.print("Servo #4: ");
      Serial.println(angle4);
      Serial.print("Servo #5: ");
      Serial.println(angle5);
      Serial.print("Servo #6: ");
      if (angle6 == 90) {
        Serial.println("gripper closed");
      }
      else {
        Serial.println("gripper opened");
      }
      display_angles = false;
    }
}

https://www.sainsmart.com/blogs/projects/nunchuk-controlled-robotic-arm-with-arduino

sadman41
Offline
Зарегистрирован: 19.10.2016

А во сколько?

wolfram
Offline
Зарегистрирован: 24.06.2020

Короче я не до конца разобрался как тут все делать .

Я начал по нормальному заниматься Ардуино  где-то месяц, а робо-рука уже давно стояла без дела,можете подсказать что не так?

Вроде ошибка в nunchuk_init...

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы сами не понимаете, что ваш вопрос смысла не имеет? 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Покрутите сначала одной сервой, а потом и с бОльшим количеством все получится. И с библиотекой nunchuk разберитесь и дайте ссылку на нее.

wolfram
Offline
Зарегистрирован: 24.06.2020

Я не понимаю зачем используется эта часть 

Wire.begin();

nunchuk_init(); 

строчка 77 и 78 при проверке в Arduino IDE выдается ошибка на 78 строчке

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

wolfram пишет:

Я не понимаю зачем используется эта часть 

Wire.begin();

nunchuk_init(); 

строчка 77 и 78 при проверке в Arduino IDE выдается ошибка на 78 строчке

Посмотрите здесь - там примеры использования и сама библиотека.

И, кстати, чего за ошибки? Мы гадать должны?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А собственно "Что не так?"

Вы расскажете нам, что у Вас за проблема? Или мы должны сами догадаться?

wolfram
Offline
Зарегистрирован: 24.06.2020

Извиняюсь за потраченное время, мне ваши ответы пока не понадобятся , нашел несколько сайтов про это, пока почитаю про это сам