Не работает DS18B20 при опросе пинов
- Войдите на сайт для отправки комментариев
Вс, 23/10/2016 - 18:09
Задача: Снимать показания датчиков температуры через промежуток времени, при этом паралельно опрашивать аналоговые и цифровые пины, отправлять результат на ком порт.
Ситуация такова, если заремить опрос пинов - температура показывает нормально, если паралельно опрашивать -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;
}
}}
Части кода мало. Нужно, как минимум, знать, как описаны массивы.
И охота с этой библой сношениями заниматься?
Части кода мало. Нужно, как минимум, знать, как описаны массивы.
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); }И охота с этой библой сношениями заниматься?
пробовал без нее результат один и тот же
Можно попробовать промоделировать код под виртуальным отладчиком и посмотреть в чём дело. Нужен код полностью.
Части кода мало. Нужно, как минимум, знать, как описаны массивы.
не знаю с чем связано, но массивы были:
Чего массивы не относящиеся к температуре могли повлиять на работу градусников.
Так Вы ж память распахивали по самое не могу! Попробуйте завести выходныую трубу от унитаза в холодильник, а потом удивляётесь откуда там дерьмо - никто не гадил!
Это что за язык хоть?
int sen[0]; ... for (y1=0;y1<=15;y1++){ sen[y1] = ...Так чего Вы хотите?
привет. Уменя проблема с ДС18Б20. использовал ардуино уно,Лолин В3. Каждый раз показйвает -127.
В Ютубе тот же код работает на отлично. Не знаю что еще пробовать.
Можешь мне помочь?
-127 означает, что датчик не считывается. Проверяйте подключение.