Код:
#include <DallasTemperature.h>
#include <EEPROM.h>
int address = 0;
DallasTemperature tempSensor;
#define m1_l 7 //первый влево
#define m1_r 8 //первый вправо
#define m2_l 5 //второй влево
#define m2_r 3 //второй вправо
#define m3_l 4 //третий влево
#define m3_r 2 //третий вправо
#define en1 6 //enable
#define JOY 0 //АЦП первого мотора
#define val1 1 //АЦП первого мотора
#define val2 3 //АЦП второго мотора
#define val3 2 //АЦП третьего мотора
#define vent 10 //ШИМ вентилятора
#define kran 11 //управление клапаном ОЖ
byte bytes[8];
int res_dt1;//джойстик
int motor1, motor2, motor3;//АЦП приводов
int vent_speed; //значение ШИМ вентилятора
int min_1 = 190; //боковые
int max_1 = 445; //стекло
int centr_1 = 310; //среднее первый
int min_2 = 260; //ноги
int max_2 = 499; //ноги закрыто
int centr_2 = 380; //среднее второй
int temp0, temp_s; //temp0 - в салоне, temp_s - заданая
int t=5, f=5;
int flow=5;
void setup()
{
pinMode(m1_l,OUTPUT);
pinMode(m1_r,OUTPUT);
pinMode(m2_l,OUTPUT);
pinMode(m2_r,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(kran, OUTPUT);
digitalWrite(m1_l,LOW);
digitalWrite(m1_r,LOW);
digitalWrite(m2_l,LOW);
digitalWrite(m2_r,LOW);
digitalWrite(en1,LOW);
digitalWrite(kran,LOW);
tempSensor.begin(12); //Вешаем Датчик на 12 порт
Serial.begin(115200); // настроить скорость com порт
temp_s = EEPROM.read(address);//читаем заданую температуру из еепром
bytes[0] = 0x5A; //шлем ее в комп
bytes[1] = temp_s;
Serial.write( bytes,2);
}
void loop()
{
res_dt1 = analogRead(JOY); // прочитать данные АЦП
motor1 = analogRead(val1); // прочитать данные АЦП
motor2 = analogRead(val2); // прочитать данные АЦП
//motor3 = analogRead(val3); // прочитать данные АЦП
termometer();
byte a, b;
if (Serial.available() > 1)
{
a = Serial.read();
b = Serial.read();
if(a==0x64)temp_s=b;
if(a==0xFF)f=b;
}
if((res_dt1>=843 && res_dt1<=853) || f==0)// на стекло. кнопка MODE
{
digitalWrite(en1,HIGH);
if (analogRead(val2)<max_2)
{
digitalWrite(m2_l,HIGH);
while (analogRead(val2)<max_2)
{}
digitalWrite(m2_l,LOW);
}
if (analogRead(val1)<max_1)
{
digitalWrite(m1_r,HIGH);
while (analogRead(val1)<max_1)
{}
digitalWrite(m1_r,LOW);
}
digitalWrite(en1,LOW);
flow=0;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
Serial.write( bytes,2);
}
if((res_dt1>=401 && res_dt1<=411) || f==1)//в ноги. кнопка FILE
{
digitalWrite(en1,HIGH);
if (analogRead(val2)>min_2)
{
digitalWrite(m2_r,HIGH);
while (analogRead(val2)>min_2)
{}
digitalWrite(m2_r,LOW);
}
digitalWrite(en1,LOW);
flow=1;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
Serial.write( bytes,2);
}
if((res_dt1>=784 && res_dt1<=794) || f==2)//боковые. кнопка SEL
{
digitalWrite(en1,HIGH);
if (analogRead(val1)>min_1)
{
digitalWrite(m1_l,HIGH);
while (analogRead(val1)>min_1)
{}
digitalWrite(m1_l,LOW);
}
if (analogRead(val2)<max_2)
{
digitalWrite(m2_l,HIGH);
while (analogRead(val2)<max_2)
{}
digitalWrite(m2_l,LOW);
}
digitalWrite(en1,LOW);
flow=2;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
Serial.write( bytes,2);
}
if((res_dt1>=307 && res_dt1<=327) || f==3)//на стекло и в ноги. кнопка ATT
{
digitalWrite(en1,HIGH);
if (analogRead(val1)<max_1)
{
digitalWrite(m1_r,HIGH);
while (analogRead(val1)<max_1)
{}
digitalWrite(m1_r,LOW);
}
if (analogRead(val2)>centr_2)
{
digitalWrite(m2_r,HIGH);
while (analogRead(val2)>centr_2)
{}
digitalWrite(m2_r,LOW);
}
if (analogRead(val2)<centr_2)
{
digitalWrite(m2_l,HIGH);
while (analogRead(val2)<centr_2)
{}
digitalWrite(m2_l,LOW);
}
digitalWrite(en1,LOW);
flow=3;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
Serial.write( bytes,2);
}
if(res_dt1>=715 && res_dt1<=725)//temp_s++. кнопка VOL UP
{
temp_s++;
delay(30);
if(temp_s>=50)temp_s=50;
bytes[0] = 0x5A;
bytes[1] = temp_s; //салон 1
Serial.write( bytes,2);
}
if(res_dt1>=635 && res_dt1<=645)//temp_s --. кнопка VOL DOWN
{
temp_s--;
delay(30);
if(temp_s<=0)temp_s=0;
bytes[0] = 0x5A;
bytes[1] = temp_s; //салон 1
Serial.write( bytes,2);
}
if(res_dt1>=176 && res_dt1<=186)//кнопка SOURCE
{
EEPROM.write(address, temp_s);//пишем в еепром temp_set
}
}
void termometer()
{
switch(tempSensor.isValid())
{
case 1:
Serial.println("Invalid CRC");
tempSensor.reset(); // сбросить девайс
return;
case 2:
Serial.println("Invalid device");
tempSensor.reset(); // сбросить девайс
return;
}
temp0=tempSensor.getTemperature();
if(temp0>=temp_s+1)digitalWrite(kran,HIGH);//закрываем клапан - охлаждаем салон
if(temp0<=temp_s-1)digitalWrite(kran,LOW);//открываем - греем
bytes[0] = 0x64;
bytes[1] = temp0; //салон
Serial.write( bytes,2);
}
схема: