Помогите разобраться как подружить два скетча

avr4
Offline
Зарегистрирован: 24.12.2015
Это реализация алгоритма для управления 8 реле нагревательных элементов.
Может не очень складно, но как-то так... Функции требуемые выполняет.
Не могу к нему прилепить скетч замера температуры с двух датчиков, который позаимствовал на форуме.... 
По отдельности работают а вдвоем не хотят
 
byte LED=13;
int Temp;    //Текущая температура канала
int Tn;      //Наружная температура
byte Tnp=8;    //Температура наружная пороговая которой даетсся разрешение на включение
byte Tmax=8;   //Максимальная температура рабочего диапазона
byte Tmin=6;   //Минимальная температура рабочего диапазона
byte pinV=3;   //Номер pin для разрешения включения от вентилятора
byte pinT=4;   //Номер pin для разрешения включения от датчика перегрева 
byte i;        //Номер включаемого реле
byte j;        //Номер выключаемого реле
byte Rel[]={5, 6, 7, 8, 9, 10, 11, 12};  //Массив с номерами pin для подключения реле
 
void setup() {
for (i=0; i<=7; i++) {pinMode (Rel[i], OUTPUT); digitalWrite (Rel[i], HIGH);}
pinMode (LED,OUTPUT);
digitalWrite (LED, LOW);
pinMode (pinV,INPUT);
pinMode (pinT,INPUT);
i=0; J=0;
Serial.begin(9600); 
            }
 
void loop() 
{
 
for (int k=1; k<=5; k++)
  {
  if (Tn>Tnp || digitalRead(pinV) == LOW || digitalRead(pinT) == LOW)         //условия ИЛИ для блокировки нагревателей
    {
    for (int l=0; l<=7; l++) { digitalWrite (Rel[l], HIGH); i=0; j=0; delay (500);}
   
    while ( digitalRead(pinT) == LOW)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);}
    
    while (digitalRead(pinV) == LOW)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000);digitalWrite (LED, LOW);delay (1200);}
    
    while ( Tn>Tnp)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300); 
    digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000); digitalWrite (LED, LOW); delay(2000);}
    }
  digitalWrite (LED, HIGH); delay(800); digitalWrite (LED, LOW);delay (1000);
  }
  
  if (Temp<Tmin) {digitalWrite (Rel[i], LOW); i=i+1;}
  if (Temp>Tmax) {digitalWrite (Rel[j], HIGH); j=j+1;}
      if (i>7) {i=0;}
      if (j>7) {j=0;}
}
avr4
Offline
Зарегистрирован: 24.12.2015

от dimax позаимствовал

01 #include <OneWire.h>
02 OneWire  ds(2);
03 byte addr1[8]={0x28,0x04,0x13,0x80,0x06,0x00,0x00,0xF8};
04 byte addr2[8]={0x28,0x47,0x1F,0x5C,0x06,0x00,0x00,0xE6};
05  
06 volatile int temp1,temp2;
07  
08 void setup(void) {
09 Serial.begin(9600);
10 WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты
11 WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда
13 // снять все ремарки если нужно поменять разрешение
14 //  ds.reset(); // сброс шины
15 //  ds.select(addr2); //выставить адрес
16 //  ds.write(0x4E); // разрешение записать конфиг
17 //  ds.write(0x7F); // Th контроль температуры макс 128грд
18 //  ds.write(0xFF); //Tl контроль температуры мин -128грд
19 //  ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение
20 }
21  
22 void loop(void) {
23 Serial.print("Temp1= ");
24 Serial.print(temp1/16.0);
25 Serial.print("   ");
26 Serial.print("Temp2= ");
27 Serial.println(temp2/16.0);
28  
29 }
30  
31 ISR (WDT_vect){ //вектор прерывания WD
32 static boolean n=0; // флаг работы: запрос температуры или её чтение
33 n=!n;
34 if (n) {ds.reset();  // сброс шины
35         ds.write(0xCC);//обращение ко всем датчикам
36         ds.write(0x44);// начать преобразование (без паразитного питания)  
37        }
38 else   {ds.reset();
39         ds.select(addr1);    
40         ds.write(0xBE); // Read Scratchpad (чтение регистров)  
41         temp1 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта       
42         // получение с 2-го датчика
43         ds.reset();
44         ds.select(addr2);    
45         ds.write(0xBE); // Read Scratchpad (чтение регистров)  
46         temp2 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта  
47        }
48 }
49  
50  
51  

 

avr4
Offline
Зарегистрирован: 24.12.2015

byte LED=13;
int Temp;    //Текущая температура канала
int Tn;      //Наружная температура
byte Tnp=8;    //Температура наружная пороговая которой даетсся разрешение на включение
byte Tmax=8;   //Максимальная температура рабочего диапазона
byte Tmin=6;   //Минимальная температура рабочего диапазона
byte pinV=3;   //Номер pin для разрешения включения от вентилятора
byte pinT=4;   //Номер pin для разрешения включения от датчика перегрева 
byte i;        //Номер включаемого реле
byte j;        //Номер выключаемого реле
byte Rel[]={5, 6, 7, 8, 9, 10, 11, 12};  //Массив с номерами pin для подключения реле

void setup() {
for (i=0; i<=7; i++) {pinMode (Rel[i], OUTPUT); digitalWrite (Rel[i], HIGH);}
pinMode (LED,OUTPUT);
digitalWrite (LED, LOW);
pinMode (pinV,INPUT);
pinMode (pinT,INPUT);
i=0; J=0;
Serial.begin(9600); 
            }

void loop() 
{
 
for (int k=1; k<=5; k++)
  {
  if (Tn>Tnp || digitalRead(pinV) == LOW || digitalRead(pinT) == LOW)         //условия ИЛИ для блокировки нагревателей
    {
    for (int l=0; l<=7; l++) { digitalWrite (Rel[l], HIGH); i=0; j=0; delay (500);}
   
    while ( digitalRead(pinT) == LOW)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);}
    
    while (digitalRead(pinV) == LOW)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000);digitalWrite (LED, LOW);delay (1200);}
    
    while ( Tn>Tnp)
    {digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300); 
    digitalWrite (LED, HIGH); delay(100); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000); digitalWrite (LED, LOW);delay (300);
    digitalWrite (LED, HIGH); delay(1000); digitalWrite (LED, LOW); delay(2000);}
    }
  digitalWrite (LED, HIGH); delay(800); digitalWrite (LED, LOW);delay (1000);
  }
  
  if (Temp<Tmin) {digitalWrite (Rel[i], LOW); i=i+1;}
  if (Temp>Tmax) {digitalWrite (Rel[j], HIGH); j=j+1;}
      if (i>7) {i=0;}
      if (j>7) {j=0;}
}