1

Тема: HC-6 управление Arduino

http://forum.rcl-radio.ru/uploads/images/2019/12/5aff511572f75b2fd6f1009b99c93ca8.png

#include <EEPROM.h>

int buff[2];
int i,w,w0,w1,w2,w3,w4;
unsigned long times;

float p1,p2,p3,p4,p5,p6; // значения выводимые на экран
int inf1,inf2,inf3,inf4;// состояние цифровых выходов
int reg1,reg2,reg3; // значения кнопочных регуляторов - 255 max
int reg1_max = 100,reg2_max = 25, reg3_max = 255; // максимальные значения регуляторов

void setup(){ 
   Serial.begin(9600);
   Serial.setTimeout(50);
   pinMode(A0,INPUT);
   pinMode(13, OUTPUT); // выход реле
   pinMode(12, OUTPUT); // выход реле
   pinMode(11, OUTPUT); // выход реле
   pinMode(10, OUTPUT); // выход реле
   reg1 = EEPROM.read(0);reg2 = EEPROM.read(1);reg3 = EEPROM.read(2);
Serial.println();
}
 
void loop() {

 /////// ПРИЕМ ДАННЫХ С SERIAL PORT /////////////////////////
  while (Serial.available()>0){ 
   for (i=0;i<1;i++) { 
     buff[0] = Serial.parseInt(); 
     buff[1] = Serial.parseInt();}    
     w=1;w0=1;times=millis();}

   ///////////// обработка команд /////////////////// 
  if(buff[0]>10&&w==1){ w=0;
  if(buff[0]==101&&w1==0){w1=1;digitalWrite(13,HIGH);buff[0]=0;inf1=1;}
  if(buff[0]==101&&w1==1){w1=0;digitalWrite(13,LOW);buff[0]=0;inf1=0;}  

  if(buff[0]==102&&w2==0){w2=1;digitalWrite(12,HIGH);buff[0]=0;inf2=1;}
  if(buff[0]==102&&w2==1){w2=0;digitalWrite(12,LOW);buff[0]=0;inf2=0;}  

  if(buff[0]==103&&w3==0){w3=1;digitalWrite(11,HIGH);buff[0]=0;inf3=1;}
  if(buff[0]==103&&w3==1){w3=0;digitalWrite(11,LOW);buff[0]=0;inf3=0;} 
   
  if(buff[0]==104&&w4==0){w4=1;digitalWrite(10,HIGH);buff[0]=0;inf4=1;}
  if(buff[0]==104&&w4==1){w4=0;digitalWrite(10,LOW);buff[0]=0;inf4=0;}  

  if(buff[0]==105){buff[0]=0;reg1++;if(reg1>reg1_max){reg1=reg1_max;}}
  if(buff[0]==106){buff[0]=0;reg1--;if(reg1<0){reg1=0;}}  

  if(buff[0]==107){buff[0]=0;reg2++;if(reg2>reg2_max){reg2=reg2_max;}}
  if(buff[0]==108){buff[0]=0;reg2--;if(reg2<0){reg2=0;}} 

  if(buff[0]==109){buff[0]=0;reg3++;if(reg3>reg3_max){reg3=reg3_max;}}
  if(buff[0]==110){buff[0]=0;reg3--;if(reg3<0){reg3=0;}} 
     }   


///////////////////////////////////////////////////////////////////
   p1 = analogRead(A0)*5.00/1023;
   p2 = 1.2;
   p3 = 25.4;
   p4 = 847.4; 
   p5 = 0;
   p6 = reg1;
   
   /// отправка днный в android
   Serial.print("Напр.");
   Serial.print(":");
   Serial.print(p1,2);Serial.print(" В");
   Serial.print(":");
   
   Serial.print("Ток");
   Serial.print(":");
   Serial.print(p2,1);Serial.print(" А");
   Serial.print(":");
   
   Serial.print("Давл.");
   Serial.print(":");
   Serial.print(p3,1);Serial.print(" МПа");
   Serial.print(":");
   
   Serial.print("Темп.");
   Serial.print(":");
   Serial.print(p4,1);Serial.print("\u2103");// гр.Цельсия
   Serial.print(":");
   
   Serial.print("Выкл");
   Serial.print(":");
   Serial.print(p5);
   Serial.print(":");
   
   Serial.print("Выкл");
   Serial.print(":");
   Serial.print(p6);
   Serial.print(":");
/////////////////////////////////////////////////////////////////////////////
   
 ////////////////// код не менять ///////////////////////////////////////////  
   Serial.print(inf1);
   Serial.print(":");
   Serial.print(inf2);
   Serial.print(":");
   Serial.print(inf3);
   Serial.print(":");
   Serial.print(inf4);
   
   Serial.print(":");
   Serial.print(reg1);
   Serial.print(":");
   Serial.print(reg2);
   Serial.print(":");
   Serial.println(reg3);

    if(w0==1&&millis()-times>10000){w0=0;EEPROM.update(0,reg1);EEPROM.update(1,reg2);EEPROM.update(2,reg3);}
   
  // Строка передаваемая в Serial Port должна быть не менее 50 символов
  // Напр.:3.28 В:Ток:1.2 А:Давл.:25.4 МПа:Темп.:847.4℃:Выкл:0.00:Выкл:29.00:0:0:0:0:29:11:41
}

При помощи Bluetooth модуля HC-06 и платы Arduino можно осуществить управление различными исполнительными механизмами c помощью смартфона. Предлагаемое приложение и скетч позволяют выводить на экран смартфона до 6 различных параметров снимаемых с датчиков, а так же выводить свою надпись к каждому датчику и градуировку.
Так же можно менять состояние 4 цифровых выходов, и передавать три значения  от 0 до 255 в переменные Arduino.

Эта тема рассчитана для тех кто мало знаком программированием Android приложений, но неплохо разбирается в написании скетчей для Arduido.

Вывод индикации на экран:

   p1 = analogRead(A0)*5.00/1023;
   p2 = 1.2;
   p3 = 25.4;
   p4 = 847.4;
   p5 = 0;
   p6 = reg1;

В переменные p1...p6 можно передавать различные данные (float) с датчиков. Для примера для p1 я вывел напряжение 3,3 В измеряемое аналоговым входом А0.

Далее Вам остается только отредактировать данные выводимые на экран:

   Serial.print("Напр.");
   Serial.print(":");
   Serial.print(p1,2);Serial.print(" В");
   Serial.print(":");

Первое значение надпись "Напряжение", далее обязательный разделитель ":" и само значение напряжения и потом снова разделитель.

Управление выходами:

В скетче указаны выходы D10...D13, Вы можете задать свои выходы. Над кнопками управления выходами выводится состояние выходов, оно меняется при нажатии на кнопку, но состояние меняется когда arduino реально изменит состояние выхода и отправит его значение.

В самом низу экрана имеется три кнопочных регулятора, они передают в Arduino  значения от 0 до 255 в переменные reg1...reg3, эти значения могут передаваться например в ШИМ для трех каналов.

Приложение:
Данный контент доступен только зарегистрированным пользователям.

Исходники для Android Studio:
Данный контент доступен только зарегистрированным пользователям.