Сервопривод и блютуз

Groll
Offline
Зарегистрирован: 13.12.2018

Всем доброго времени суток! Решил заняться проектом, где необходимо использовать ардуино. Долго изучал и лазал по сайтам, но никак не могу добиться того чтобы сервопривод поворачивался с телефона по блютуз. Ниже скетч который сумел написать, помогите найти ошибку, а то вот я что то не вижу(. Телефон на андроиде, ардуино нано. Библиотеку скачал и закинул правильно- Ардуино IDE ошибок не выдает.





#include <SoftwareSerial.h>

#include <Servo.h>

Servo myservo1, myservo2, myservo3, myservo4;

int bluetoothTx = 10;

int bluetoothRx = 11;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()

{

myservo1.attach(3);

myservo2.attach(5);

myservo3.attach(6);

myservo4.attach(9);

Serial.begin(9600);

bluetooth.begin(9600);

}

void loop()

{

if(bluetooth.available()>= 2 )

{

unsigned int servopos = bluetooth.read();

unsigned int servopos1 = bluetooth.read();

unsigned int realservo = (servopos1 *256) + servopos;

Serial.println(realservo);

if (realservo >= 1000 && realservo <1180) {

int servo1 = realservo;

servo1 = map(servo1, 1000, 1180, 0, 180);

myservo1.write(servo1);

Serial.println("Servo 1 ON");

delay(10);

}

if (realservo >= 2000 && realservo <2180) {

int servo2 = realservo;

servo2 = map(servo2, 2000, 2180, 0, 180);

myservo2.write(servo2);

Serial.println("Servo 2 ON");

delay(10);

}

if (realservo >= 3000 && realservo <3180) {

int servo3 = realservo;

servo3 = map(servo3, 3000, 3180, 0, 180);

myservo3.write(servo3);

Serial.println("Servo 3 ON");

delay(10);

}

if (realservo >= 4000 && realservo <4180) {

int servo4 = realservo;

servo4 = map(servo4, 4000, 4180, 0, 180);

myservo4.write(servo4);

Serial.println("Servo 4 ON");

delay(10);

}

}

}

Groll
Offline
Зарегистрирован: 13.12.2018

 Схема такая- к нано подключаю блютуз модуль через TX и RX, и два серводпривода через D3 и D5, скетч для 4-ех конечно, но так как D7 и D9 пустуют то проблем это не должно вызвать, по-моему... Программка для андроид которая используется для поворотов рабочая- это точно. Заранее благодарю!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ошибка в ХЗ какой строке.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Та а что на сериал мониторе видно то? Данные с BT модуля поступают?

 

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

У Дмитрия Осипова точно было решение

Groll
Offline
Зарегистрирован: 13.12.2018

asam пишет:

Та а что на сериал мониторе видно то? Данные с BT модуля поступают?

 

 

 


Ну я скажу так. Когда на телефоне через программу "поворачиваю" сервопривод - на Ардуино мигает красный диод , зелёный горит постоянно, перестаю поворачивать - перестает мигать красный. На блютуз модуле при включении Ардуино мигает красный , после подключения к телефону он начинает гореть постоянно. Такие дела. Так то сигнал, по всей видимости поступает, а вот сервоприводам не холодно не жарко от него. Может внеправильные пины вставляю? В программе вроде указал на D3 и D5, так и вставляю, но все ровно не робает.(

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Причем здесь мигание светодиодов? Я про них и не спрашивал. В скетче есть такие строки

unsigned int servopos = bluetooth.read();
unsigned int servopos1 = bluetooth.read();
unsigned int realservo = (servopos1 *256) + servopos;
Serial.println(realservo);

То есть мы получаем данные с блютуса и печатем полученное значение в сериал порт. Вопрос - какие значения  печатаются на сериал мониторе?

Groll
Offline
Зарегистрирован: 13.12.2018

Я в этом деле первый раз. У меня никакого монитора не подключено, а какие команды отвечают за печать?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Groll пишет:
Я в этом деле первый раз. У меня никакого монитора не подключено, а какие команды отвечают за печать?

Нажать CTRL+Shift+M (Все три клавиши одновременно)

Groll
Offline
Зарегистрирован: 13.12.2018

при создании проекта руководствовался следующей статьей, программу для андроид использую оттуда. https://ngin.pro/index.php?newsid=251. На монитор ничего не поступает.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ну, значит, с блютусом какие-то проблемы. 

А вообще - отформатируйте код согласно правилам форума. А то ни читать, ни обсуждать нормально невозможно.

b707
Offline
Зарегистрирован: 26.05.2017

почитал ваш топик на амперке - вы не к тем пинам блютуз цепляете.

И вообще, начали бы с чтения учебников. а то проблемы свои даже обьяснить толком не умеете.

Groll
Offline
Зарегистрирован: 13.12.2018

Всем спасибо- проблема решена!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ссылки на проект лучше вставлять не картинкой!

А код по правилам сайта:

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

#include <SoftwareSerial.h> // TX RX software library for bluetooth
#include <Servo.h> // servo library 
Servo myservo1, myservo2, myservo3, myservo4; // servo name
int bluetoothTx = 10; // bluetooth tx to 10 pin
int bluetoothRx = 11; // bluetooth rx to 11 pin
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
  myservo1.attach(3); // attach servo signal wire to pin 9
  myservo2.attach(5);
  myservo3.attach(6);
  myservo4.attach(9);
  //Setup usb serial connection to computer
  Serial.begin(9600);
  //Setup Bluetooth serial connection to android
  bluetooth.begin(9600);
}
void loop()
{
  //Read from bluetooth and write to usb serial
  if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos;
    Serial.println(realservo);
    if (realservo >= 1000 && realservo <1180) {
      int servo1 = realservo;
      servo1 = map(servo1, 1000, 1180, 0, 180);
      myservo1.write(servo1);
      Serial.println("Servo 1 ON");
      delay(10);
    }
    if (realservo >= 2000 && realservo <2180) {
      int servo2 = realservo;
      servo2 = map(servo2, 2000, 2180, 0, 180);
      myservo2.write(servo2);
      Serial.println("Servo 2 ON");
      delay(10);
    }
    if (realservo >= 3000 && realservo <3180) {
      int servo3 = realservo;
      servo3 = map(servo3, 3000, 3180, 0, 180);
      myservo3.write(servo3);
      Serial.println("Servo 3 ON");
      delay(10);
    }
    if (realservo >= 4000 && realservo <4180) {
      int servo4 = realservo;
      servo4 = map(servo4, 4000, 4180, 0, 180);
      myservo4.write(servo4);
      Serial.println("Servo 4 ON");
      delay(10);
    }
  }
}