Помогите с кодом

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Создал приложения в app invertor 2  нажимаешь включаються реле и показывает температуру.

Если заливать скетч в ардуино по отдельности или на реле или на температуру то все работает по блютузу, если пробую вместе неработает вот скетчи

Помогите объединить их для работы вместе

СКЕТЧ НА РЕЛЕ

int ledPin_1 = 8;
int ledPin_2 = 9;
int ledPin_3 = 10;
int ledPin_4 = 11;
int ledPin_5 = 13;

void setup() {
  Serial.begin(9600);

  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT); 
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT); 
  pinMode(ledPin_5, OUTPUT);
}

void loop() {

  if (Serial.available() > 0) {   
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");
    if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");
    if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");
    if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");
    if (i == 5)digitalWrite(ledPin_5, !digitalRead(ledPin_5)),Serial.println(" ledPin_5 !digitalRead ");
  }
}

 СКЕТЧ НА ТЕМПЕРАТУРУ


// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
  }
}

 

 

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

Делаете внещнее прерывание, чтобы дать второй проге поработать

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Тоесть многозадачность?

 

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

А как Вы пихаете туда два скетча? По очереди или в один файл объединяете?

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Когда обьединяю 2 файла неработает когда один то все нормально идет 

Помогите исправить этот кад чтобы 2 команды работали вместе и при включении ардуино реле невключались сразу.

#include "DHT.h"
 
#define DHTPIN 2   
#define DHTTYPE DHT11  
DHT dht(DHTPIN, DHTTYPE);
int ledPin_1 = 8;
int ledPin_2 = 9;
int ledPin_3 = 10;
int ledPin_4 = 11;
int ledPin_5 = 13;
void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 
  dht.begin();
  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT); 
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT); 
  pinMode(ledPin_5, OUTPUT);
}
 
void loop() {
  if (Serial.available() > 0) {   
    int i = Serial.read()-48;
    if (i == 6)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");
    if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");
    if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");
    if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");
    if (i == 5)digitalWrite(ledPin_5, !digitalRead(ledPin_5)),Serial.println(" ledPin_5 !digitalRead ");
  }
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
   
  }
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DimaDarma пишет:

Когда обьединяю 2 файла неработает когда один то все нормально идет 

А как Вы их объединяете? Вот, то, что Вы привели - это как раз объединённый файл? ИМенно его Вы грузите в контроллер? Так? Если нет, то покажите нам именно то, что Вы грузите в контроллер.

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Это я и загружаю в контролер но этот код неработает. 

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

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

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

Не работает это как? Компилируется? Что-то (пусть неправильное) делает? Как всё выглядит?

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

Как я понимаю, сведодиодами-то он мигает, а вот DHT не читает ни хрена. Правильно?

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Когда зиливаю на ардуино перестает показывать температуру и включать и отключать реле тоесть светодиодами . Только каждые несколько секунд один из сигналов на реле(светодиод) моргает и все

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

Думаю, что Вы напутали с типом датчика.

В верхнем (работающем) скетче указано

#define DHTTYPE DHT22   // DHT 22  (AM2302)
 
А в том, что Вы загружаете почему-то 
 
#define DHTTYPE DHT11
 
Так и надо или это ошибка?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Про реле ничего не скажу. В Ващем скетче я виже только мигание светодиодами (или Вы вместо светодиодов туда реле запихали?)

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Да так и надо на другом неработает #define DHTTYPE DHT11

DimaDarma
Offline
Зарегистрирован: 23.08.2015

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

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

Т.е. первый скетч, который Вы показали в начале как работающий, на самом деле не работает? Вы нам мозги пудрите?

Давайте, договоримся.

Вы сейчас прекращаете вводить народ в заблуждение и выкладываете РАБОТАЮЩИЕ скетчи и тот, который Вы пытаетесь заставить работать. Только выкладываете как положено (см. - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii ) потому, что так как у Вас - очень трудно читать.

DimaDarma
Offline
Зарегистрирован: 23.08.2015
Это рабочий скетч он работает по блютузу Можите залить и проверить. Надо посылать команду 1.2.3.4 или 5 
int ledPin_1 = 8;
int ledPin_2 = 9;
int ledPin_3 = 10;
int ledPin_4 = 11;
int ledPin_5 = 13;
 
void setup() {
  Serial.begin(9600);
 
  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT); 
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT); 
  pinMode(ledPin_5, OUTPUT);
}
 
void loop() {
 
  if (Serial.available() > 0) {   
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");
    if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");
    if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");
    if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");
    if (i == 5)digitalWrite(ledPin_5, !digitalRead(ledPin_5)),Serial.println(" ledPin_5 !digitalRead ");
  }
}

 

 

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

Причём тут этот скетч? Я говорю про другой. 

В самом первом сообщении Вы написали, что скетч в котором есть строки

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
 
работает. Так он работает или Вы пошутили?
 
 
DimaDarma
Offline
Зарегистрирован: 23.08.2015

Все я понял что вы имеете в виду счас закину через как надо через код там все серое как каментарий

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

В первом скетче у Вас НЕЗАКОММЕНТИРОВАНО (т.е. активно)

#define DHTTYPE DHT22

А в объединённом Вы зачем-то поставили

#define DHTTYPE DHT11  
 
Поставьте так, как в работающем.

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

В 1 где 22 это опечатка правильно где 11

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

Понятно, значит скетч из первого сообщения НЕ работает.

В общем, Вы там разберитесь что у Вас работает, а что нет и выложите в нормальном виде два работающих и один неработающий скетч.

А то сейчас, я потратил полчаса на сравнение, а оказалось, что Вы пошутили.

DimaDarma
Offline
Зарегистрирован: 23.08.2015
Вот скетч для температуры он работает
#include "DHT.h"

#define DHTPIN 2     

#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 
  dht.begin();
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
  }
}

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Вот 2 скетча вместе

#include "DHT.h"

#define DHTPIN 2   
#define DHTTYPE DHT11  
DHT dht(DHTPIN, DHTTYPE);
int ledPin_1 = 8;
int ledPin_2 = 9;
int ledPin_3 = 10;
int ledPin_4 = 11;
int ledPin_5 = 13;
void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 
  dht.begin();
  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT); 
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT); 
  pinMode(ledPin_5, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {   
    int i = Serial.read()-48;
    if (i == 6)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");
    if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");
    if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");
    if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");
    if (i == 5)digitalWrite(ledPin_5, !digitalRead(ledPin_5)),Serial.println(" ledPin_5 !digitalRead ");
  }
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
   
  }
}

 

Beginner100500
Offline
Зарегистрирован: 24.07.2015

1. В строке 26 наверное проверяем что равно 1, а не 6, но это так, мелочи. Просто не будет реагировать на команду "1" и только.

2. Коммент во втором работающем скетче - читали? А перевели? Как понимаю, это чей-то пример работы с датчиком. Там в частности указано, что "через 2сек" не чаще ... а у вас в loop() всё тупо подряд накидано. Соответственно, моргать светодиодами будем раз в 2 сек. Что вас похоже не устраивает.

Вы точно уверены что последний скетч - не работает? Как? Опишите что хотелось получить и что получилось после объединения скетчей вместе.

DimaDarma
Offline
Зарегистрирован: 23.08.2015

1 скетч работает так я посылаю команду например 2 по блютуз с андроида светодиод загорелся снова посылаю команду 2 светодиод покас.

2 скет работает так считывает с датчика температуру и показывает его на андроид 

3 скетч который я обьединил на команды для светодиодов не реагирует и температуру непоказывает только раз в 2 секунды горин один диод 

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

(1. В строке 26 наверное проверяем что равно 1, а не 6, но это так, мелочи. Просто не будет реагировать на команду "1" и только.)

Насчет первого пункта вместо 1 стоит 6 просто  для  обнавления температуры не раз в 2 сек есть кнопка которая посылает с андроид команду 1 вот я и поменял на 6 чтобы диод по команде 6 горел

Beginner100500
Offline
Зарегистрирован: 24.07.2015

То что раз в 2 сек. светодиод горит - как раз нормально. Это результат последовательного соединения скетчей. А вот что значит "не работает"? А что делает? Там у вас стоит вывод как в случае отсутствия данных так и при их считывании. Что пишет?

 

Попробуйте определить переменные t,h в начале loop(), а в строках 32,33 оставить только их присваивание.

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Попробуйте определить переменные t,h в начале loop(), а в строках 32,33 оставить только их присваивание.

Я незнаю как это сделать

Beginner100500
Offline
Зарегистрирован: 24.07.2015

В таком случае поменяйте порядок объединения скетчей.

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Еще 1 проблема при перезагрузки ардуино лампочки сразу горят что поменять в скетче чтобы не горели

int ledPin_1 = 8;
int ledPin_2 = 9;
int ledPin_3 = 10;
int ledPin_4 = 11;
int ledPin_5 = 13;

void setup() {
  Serial.begin(9600);

  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT); 
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT); 
  pinMode(ledPin_5, OUTPUT);
}

void loop() {

  if (Serial.available() > 0) {   
    int i = Serial.read()-48;
    if (i == 1)digitalWrite(ledPin_1, !digitalRead(ledPin_1)),Serial.println(" ledPin_1 !digitalRead ");
    if (i == 2)digitalWrite(ledPin_2, !digitalRead(ledPin_2)),Serial.println(" ledPin_2 !digitalRead ");
    if (i == 3)digitalWrite(ledPin_3, !digitalRead(ledPin_3)),Serial.println(" ledPin_3 !digitalRead ");
    if (i == 4)digitalWrite(ledPin_4, !digitalRead(ledPin_4)),Serial.println(" ledPin_4 !digitalRead ");
    if (i == 5)digitalWrite(ledPin_5, !digitalRead(ledPin_5)),Serial.println(" ledPin_5 !digitalRead ");
  }
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

вставь строки 10А.....14А - digitalWrite(ledPin_1, LOW) или HIGH - не знаю что у тибя за реле

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Можешь мне пример показать как поставить правильно (вставь строки 10А.....14А - digitalWrite(ledPin_1, LOW) или HIGH )я в этом валенок 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

если 10 % валенок , то 90 % - лентяй :)

#define ledPin_1  8
#define ledPin_2  9
#define ledPin_3 10
#define ledPin_4 11
#define ledPin_5 13
// так экономится память ( если вместо "int" )
//==================================================
void setup()
{
  Serial.begin(9600);
  pinMode(ledPin_1, OUTPUT);
    digitalWrite(ledPin_1, LOW);    // если в блоке реле - реле включаются хигом
//  digitalWrite(ledPin_1, HIGH);   // если в блоке реле - реле включаются ловом
  pinMode(ledPin_2, OUTPUT);
    // ................................................................
  pinMode(ledPin_3, OUTPUT);
    // ................................................................
  pinMode(ledPin_4, OUTPUT);
    // ................................................................
  pinMode(ledPin_5, OUTPUT);
    // ................................................................
}
//==================================================
void loop()
{
  if (Serial.available() > 0)
  {   
    // int i = Serial.read()-48;   хватит байта !!!!!
    byte i = Serial.read()-48;
    if ( 1 == i )
    {
      digitalWrite(ledPin_1, !digitalRead(ledPin_1));
      Serial.println(" ledPin_1 is flip-flop ");
    }
    if ( 2 == i )
    {
      digitalWrite(ledPin_2, !digitalRead(ledPin_2));
      Serial.println(" ledPin_2 is flip-flop ");
    }
    // ..............................................
  }
}
//==================================================
// читай kisoft-а
// if ( 2 == i ) и if ( i == 2 ) - отличие и практика
// если ошибёшься и напишешь
// if ( 2 = i ) и if ( i = 2 ) - то
// в первом случае компилятор выдаст ошибку
// во втором - компилятор НЕ выдаст ошибку , и будешь долго и нудно искать её
// правило = константа первая , переменная - вторая ( спасибо , kisoft )
//
// пять крайних "ифов" лучше заменить на конструкцию "свитч-казе" - это уж сам изучай
// кататак :)

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Благодарю за помощь

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

помогло ?

Krisha
Offline
Зарегистрирован: 26.08.2015

Здравствуйте! Возможно не та тема, но попробую сюда написать, решил собрать проект, машинка на ардуино, блютуз и управление, спереди на поворотах серво, сзади L293D, вся проблема в серво, не могу никак найти скетч для изменения его угла примерно на 45гр влево 90центрирование и 135 вправо, всё это будет управляться сначала с компьютера, потом с андроида но на серве откровенно завис( 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Да помогло я у себя изменил по вашей методике и все нормально стало

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015
Это Джостик и управления 2 сервоприводами
#include <Servo.h>
Servo servo1;
Servo servo2;
const int SERVO1_PIN = 9;
const int SERVO2_PIN = 10;
const int POS_Y_PIN = 5;
const int POS_X_PIN = 4;
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
const int MAX_POS = 1023;
const int MAX_ANGLE = 180;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
  servo1.attach(SERVO1_PIN);
  servo2.attach(SERVO2_PIN);
}

void loop()
{
  int yVal = analogRead(POS_Y_PIN);
  int xVal = analogRead(POS_X_PIN);
  float yAngle = 1.0 * yVal * MAX_ANGLE / MAX_POS;  
  float xAngle = 1.0 * xVal * MAX_ANGLE / MAX_POS;
  servo1.write(yAngle);
  servo2.write(xAngle);    
  boolean isClicked = digitalRead(BUTTON_PIN);
  if (isClicked)
  {
    digitalWrite(LED_PIN, HIGH); 
  }
  else     
  {
    digitalWrite(LED_PIN, LOW);
  }
}

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Есть видео c работой серво а как по блютуз незнаю

Krisha
Offline
Зарегистрирован: 26.08.2015

Увы видео пока нет, попробую пока почитать литературу, а то всё плохо, только с драйвером двигателя только и разобрался, блютуз ничего не меняет, просто идёт как последовательный порт
Есть урезанный скетч, попробовал готовый перебрать, не получилось, вот он:

 
#include <Servo.h> // Добавляем библиотеку

Servo myservoH; // Горизонтальная серва углы от 25 до 145 (центровка 85)
const int H_SERVO_PIN = 11; // Горизонтальная серва подключена к пину 11

const float H_L_ANGLE = 145; // Максимальные угл поворота башни налево 
const float H_R_ANGLE = 25;  // Максимальные угл поворота башни направо 
const float H_DEF_ANGLE = 85; // Дефолтный угол (центровка) 
//Размер шага V_STEP и H_STEP подбираем экспериментально для достижения нужной скорости поворота серв
const float H_STEP = 0.011; // Шаг - знаение отвечающее за скорость вращения по горизонтали

float curHAngle = H_DEF_ANGLE; //Переменная текущего угла гор. сервы
bool moveServoHLeft = false; //Флаг движения гор. сервы влево
bool moveServoHRight = false; //Флаг движения гор. сервы вправо
const int TIMEOUT_TIME_MS = 150;
unsigned long lastPilotSymbolTime;
char symbol;

int val;
 // выводы модуля L298N подключены к следующим пинам Arduino
int IN1 = 6;
int EN1 = 5;
int IN2 = 4;
int LED = 13; // Используем встроенный светодиод для индикации работы

enum States
{
  WAITING,
  READING,
  RUNNING,
  ERROR,
  TIMEOUT
};

States state;
States onWait();
States onRead();
States onRun();
States onError();

States onTimeout();

void performServo();

void setup()
{
  Serial.begin(9600);       // crjhjcnm cdzpb c rjvgm.nthjv  
  lastPilotSymbolTime = 0;
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(EN1, OUTPUT);
  // устанавливаем пин как вывод управления сервой  
  myservoH.attach(H_SERVO_PIN);

  myservoH.write(curHAngle);

  //используем 13 пин как индикатор включённой ардуины
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  switch (state)
  {
  case WAITING:
    state = onWait();
    break;
  case READING:
    state = onRead();
    break;
  case RUNNING:
    state = onRun();
    break;
  case TIMEOUT:
    state = onTimeout();
    break;
  default:
    state = onError();
  }
  performServo();
}

States onWait()
{
  if (Serial.available() > 0)
  {
    return READING;
  }
  if (lastPilotSymbolTime && (millis() - lastPilotSymbolTime > TIMEOUT_TIME_MS))
  {
    return TIMEOUT;
  }
  return WAITING;
}

States onRead()
{
  symbol = Serial.read();
  return RUNNING;
}

States onRun()
{
  switch (symbol)
  {
  case 'W':
    //начало действий при полученном символе 'W' (вперед)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(EN1, HIGH);
    break;
    //начало действий при полученном символе 'S' (назад)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
  case 'S':
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(EN1, HIGH);
    break;
    
  case 'E':
    //начало действий при полученном символе 'E' (остановка)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]

    break;

    ////////////////////////////// Сервы

  case 'L': //servoH движется к 25
    moveServoHRight = true;
    break;
  case 'J': //servoH движется к 145
    moveServoHLeft = true;
    break;
  case 'l': //servoH стоп
    moveServoHLeft = false;
    moveServoHRight = false;
    break;     
  case 'U':

    curHAngle = H_DEF_ANGLE;

    myservoH.write(curHAngle);
    break;
    //////////////////////////////

  case 'T':
    //начало действий при полученном символе 'T' (остановка)
    //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(EN1, LOW);
    break;
  case 'P':
    //получили контрольный символ, не изменяйте этот код
    lastPilotSymbolTime = millis();
    break;
  default:
    return ERROR;
  }
  return WAITING;
}

States onError()
{
  //Получены неоговоренные символы. Очищаем ввод и продолжаем.
  //Здесь можно добавить какие-то действия для этой ситуации.
  //...
  while (Serial.available())
  {
    Serial.read();
  }
  return WAITING;
}

States onTimeout()
{
  //Действия при таймауте.
  //Вероятно, связь утеряна,
  //но при получении контрольного символа она будет восстановлена.
  //Здесь, например, уместно выключить двигатели
  //[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
  digitalWrite(IN1, LOW); // На пары выводов IN поданы сигналы одинакового уровня, моторы не работают
  digitalWrite(IN2, LOW);
  digitalWrite(EN1, LOW);
  if (Serial.available())
  {
    return READING;
  }
  return TIMEOUT;
}

//Функция управления сервоприводами (вызывается в теле loop на каждой итерации)
//Выполняет изменения положения серв на подобранный шаг согласно установленным флагам движения 
//Флаги устанавливаются согласно поступившим символам управления сервами
void performServo()
{
  //Установлен флаг движения вверх и текущий угол не максимальный

  {
    //К текущему верт. углу прибавляем шаг

  }
  //Установлен флаг движения вниз и текущий угол не минимален

  {
    //От текущего верт. угла отнимаем шаг

  }
  //Установлен флаг движения влево и текущий угол не максимален
  if (moveServoHLeft && curHAngle + H_STEP <= H_L_ANGLE)
  {
    //К текущему гор. углу прибавляем гор. шаг
    curHAngle += H_STEP;
  }
  //Установлен флаг движения вправо и текущий угол не минимален
  else if (moveServoHRight && curHAngle - H_STEP >= H_R_ANGLE)
  {
    //От текущего угла отнимаем гор. шаг
    curHAngle -= H_STEP;
  }
  //Если было движние по вертикали

  
  //Если было движение по горизонтали
  if (moveServoHLeft || moveServoHRight)
  {
    myservoH.write(curHAngle);
  }
}

ссылку на целый нужно кидать? 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
Krisha
Offline
Зарегистрирован: 26.08.2015

Спасибо, вроде испавил же? 

 

DimaDarma
Offline
Зарегистрирован: 23.08.2015

Скачай книжку (Петин В.А. - Проекты с использованием контроллера Arduino (Электроника) 2014 ) 

Там есть  про блютуз то что тебе может помоч

Krisha
Offline
Зарегистрирован: 26.08.2015

Спасибо, поищу сейчас. главная проблема с серво, не могу сделать, что бы при нажатии кнопки он отворачивал в одну или другую сторону(Допустим A,D), а при нажатиии какой-то 3 кнопки(К или E) становился по центру