Не работает DS18B20 при опросе пинов

megamax
Offline
Зарегистрирован: 23.10.2016

Задача: Снимать показания датчиков температуры через промежуток времени, при этом паралельно опрашивать аналоговые и цифровые пины, отправлять результат на ком порт.

 

Ситуация такова, если заремить опрос пинов - температура показывает нормально, если паралельно опрашивать -127

Причем если не использовать циклы, а написать километровый код - все работает, 

Ардуино мега 2560 (китаец)

может проц не успевает

вот часть кода


byte t[5][8] = {
  {0x28,0xFF,0xA6,0xB7,0xA4,0x15,0x03,0x69},
{ 0x28, 0xFD, 0xF3, 0x44, 0x06, 0x00, 0x00, 0xF1 },
{ 0x28, 0xFD, 0xF3, 0x44, 0x06, 0x00, 0x00, 0xF1 },
{ 0x28, 0xFF, 0x78, 0x61, 0x4E, 0x04, 0x00, 0xFA },
{ 0x28, 0x7D, 0x7A, 0x44, 0x06, 0x00, 0x00, 0x23 }
};
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  
  sensors.begin();
  for (y=0;y<=10;y++){
  sensors.setResolution(t[y], 11);
  }
}

void temp() {
sensors.requestTemperatures();
Serial.print("d:t,");Serial.print(i333);Serial.print("=");
Serial.print(sensors.getTempC(t[i333-1]));
Serial.println(";");
}

void loop() {
i=i+1;

///// если это заремить (начало)
for (y1=0;y1<=15;y1++){
sen[y1] = analogRead(y1+54);
if (sen[y1] > 700) { 
z=y1+2;
if (y1>=11){z=y1+3;}
Serial.print("d:pin,");Serial.print(z);Serial.println("=1;");
Serial1.println(stb[y1]);
//Serial.print(z);Serial.println(s[y]);
delay(500);
}
//delay(10);
}
//цифровой
for (y2=22;y2<=31;y2++){
pirPin[y2]=digitalRead(y2);
if (pirPin[y2] == HIGH) { 
Serial.print("d:pin,");Serial.print(y2);Serial.println("=1;");
delay(500);}
//delay(10);
}
///// если это заремить (конец)

//Движение
for (y3=40;y3<=53;y3++){
pirDv[y3]=digitalRead(y3);
if (pirDv[y3] == HIGH and y3!=41 and y3!=42) {
Serial.print("d:Dv,");Serial.print(y3);Serial.println("=1;");
delay(500);}
//delay(10);
}


//температура
for (x=100;x<=6100;x=x+500){
if (i==x)
{
 
  i333++;
  if (i333!=11 and i333!=12){
 temp();
  }
  if (i333==11){
    pirPin[41]=digitalRead(41);
    if (pirPin[41]==HIGH){Serial.println("d:Dv,41=1;");}
    else {Serial.println("d:Dv,41=0;");}}
  if (i333==12){
    pirPin[42]=digitalRead(42);
    if (pirPin[42]==HIGH){Serial.println("d:Dv,42=1;");}
    else {Serial.println("d:Dv,42=0;");}
    x=0;i333=0;i=0;
}
}}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Части кода мало. Нужно, как минимум, знать, как описаны массивы.

bwn
Offline
Зарегистрирован: 25.08.2014

И охота с этой библой сношениями заниматься? 

megamax
Offline
Зарегистрирован: 23.10.2016

andriano пишет:

Части кода мало. Нужно, как минимум, знать, как описаны массивы.

for (y=0;y<=12;y++){
 
pinMode(y, INPUT);digitalWrite(y, LOW);
}
for (yy1=14;yy1<=17;yy1++){
 
pinMode(yy1, INPUT);digitalWrite(yy1, LOW);
}
for (yy2=22;yy2<=53;yy2++){ 
pinMode(yy2, INPUT);digitalWrite(yy2, LOW);
}

 

 

megamax
Offline
Зарегистрирован: 23.10.2016

bwn пишет:

И охота с этой библой сношениями заниматься? 

пробовал без нее результат один и тот же

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Можно попробовать промоделировать код под виртуальным отладчиком и посмотреть в чём дело. Нужен код полностью.

megamax
Offline
Зарегистрирован: 23.10.2016

andriano пишет:

Части кода мало. Нужно, как минимум, знать, как описаны массивы.

не знаю с чем связано, но массивы были:

int sen[0];
int dvi[0];
int Dv[0];
int Pin[0];
int pirDv[0];int dvig[0];
 поставил:
int sen[50];
int dvi[50];
int Dv[50];
int Pin[50];
int pirDv[50];
int dvig[50];
все заработало. 
Чего массивы не относящиеся к температуре могли повлиять на работу градусников.
 
ПС. 50 поставил для пробы, сейчас поставлю реальные значения
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

megamax пишет:

Чего массивы не относящиеся к температуре могли повлиять на работу градусников.

Так Вы ж память распахивали по самое не могу! Попробуйте завести выходныую трубу от унитаза в холодильник, а потом удивляётесь откуда там дерьмо - никто не гадил!

Ciraretr
Offline
Зарегистрирован: 23.10.2016

Это что за язык хоть?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015
int sen[0];
...
for (y1=0;y1<=15;y1++){
	sen[y1] = 
...

Так чего Вы хотите?

hakob
Offline
Зарегистрирован: 21.05.2017

привет. Уменя проблема с ДС18Б20. использовал ардуино уно,Лолин В3. Каждый раз показйвает -127.
В Ютубе тот же код работает на отлично. Не знаю что еще пробовать.
Можешь мне помочь?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

-127 означает, что датчик не считывается. Проверяйте подключение.