Помогите разобраться как подружить два скетча
- Войдите на сайт для отправки комментариев
Пт, 28/10/2016 - 14:06
Это реализация алгоритма для управления 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;}
}
от 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 секунда
12
// (55 страница <a href="<a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a>" rel="nofollow">даташита</a>)
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