Как правильно отправить в Processing через serial угол поворота сервы?

Тема в разделе "Arduino & Shields", создана пользователем Reptaurus, 9 фев 2013.

  1. Reptaurus

    Reptaurus Нуб

    Народ подскажите пожалуйста, есть скетч который принимает из сериала данные и переводит их в градусы для сервы в arduino EDI все работает, но при отправки из Processing серва не поворачивается. Может есть у кого примеры как это можно сделать?
     
  2. HighDigital

    HighDigital Гик

    Проверьте, что получает Arduino из Processing, так же сверьте что вы отправляете (какой тип данных) и что вы обрабатываете, так же скажу, попробуйте сначало не полную программу написать, а лишь ту, которую обрабатывает полученное с Processing.

    Возможно поможет...
     
  3. HighDigital

    HighDigital Гик

    покажите ваш код
     
  4. Reptaurus

    Reptaurus Нуб

    вот код приема из сериал
    //Program by Jeremy Blum
    //www.jeremyblum.com
    //Controls a Servo Motor

    //Include Servo Library
    #include <Servo.h>

    //Define Pins
    int servoPin = 9;
    int servoPin1 = 10;
    int servoPin2 = 11;
    int speeds = 1000;

    //Create Servo Object
    Servo jeremysServo;
    Servo jeremysServo1;
    Servo jeremysServo2;
    void setup()
    {

    Serial.begin(9600);
    //Attaches the Servo to our object
    jeremysServo.attach(servoPin);
    jeremysServo1.attach(servoPin1);
    jeremysServo2.attach(servoPin2);

    }

    //доп функции
    int servoMove1(int val)//серва 1
    {
    int val2 = Serial.read();
    jeremysServo.write(val);
    }

    int servoMove2(int val)//серва 2
    {
    int val2 = Serial.read();
    jeremysServo1.write(val);
    }

    int servoMove3(int val)//серва 3
    {
    int val2 = Serial.read();
    jeremysServo2.write(val);
    }

    int serCommand(int W) //разбираем сериал коды
    {
    int val = 0;
    int servIndex = 0;
    while (Serial.available() == 0);
    servIndex =Serial.read() - '0';


    for (int i=0 ; i<=2 ; i++)
    {
    while (Serial.available() == 0);
    val = val*10 + Serial.read() - '0';
    }
    if (servIndex == 1) servoMove1(val);
    if (servIndex == 2) servoMove2(val);
    if (servIndex == 3) servoMove3(val);
    Serial.println( servIndex);
    Serial.println( val);
    Serial.println( "end");
    val=0;
    servIndex = 0;


    }



    //

    void loop()
    {
    serCommand(0);
    }
    //
     
  5. Reptaurus

    Reptaurus Нуб

    напишите пожалуйста примеры как можно отправить из процессинг в serialPort данные
    и в каких видах их можно отправлять и как обрабатывать с ардуино.
    заранее благодарен.
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Пакет из 2х байт: номер сервы и угол поворота. Проще не получится)
     
  7. Reptaurus

    Reptaurus Нуб

    И все таки был бы благодарен за пример в коде для процессинга отправить на дуню значение 1180, и пример как принять дуней из процессинга 1180?
     
  8. HighDigital

    HighDigital Гик

    У вас скорость приема в ArduinoIDE и Processing одна и та же стоит - Serial.begin(9600);?
     
  9. HighDigital

    HighDigital Гик

    Я с сервоприводами не работал, и не могу вам сказать - есть ли у вас ошибка в коде или нет, вот я вам несколько решений напишу:
    1) скорость передачи должна быть одинаковой. (Serial.begin(9600);)
    2) Из Processing вы должны отправлять такой же тип данных, что и принимаете, к примеру:
    ------------------
    Код (Text):

    //Processing:
     
    int val=0; //создаем переменную типа int
    Serial.write(val); //посылаем int
    -------------------
    Код (Text):

    //ArduinoIDE:
     
    int rd=0; //создаем переменную int
    rd = Serial.read(); //сохраняем данные в int
    Serial.println(rd); //выводим на экран полученное с СОМ порта
    --------------------

    Возможно с кодом я ошибся, т.к. давно с Processing работал, но принцип тот же.
    Удачи, экспериментируйте! :)
     
  10. Reptaurus

    Reptaurus Нуб

    спасибо! буду пробовать.
     
  11. HighDigital

    HighDigital Гик

    Удачи! ;)