Перейти к содержанию

Проверка Подключения Датчика


Гость KorPaEv

Рекомендуемые сообщения

Доброго времени суток, уважаемые!

У меня имеется 2 устройства - ds18b20 и relay module. Соответственно скетч я доработал под оба устройства.

Но не понимаю каким образом определять, подключено ли какой либо из устройств к ардуино вообще??

Я понимаю что надо разбить на функции и вызывать соответствующую функцию в цикле, но для начала как проверить подключен ли физически датчик температуры или реле???

Вот скетч

#include <OneWire.h>
#define ON 0
#define OFF 1
byte data[12];
byte addr[8];
float celsius;
int relPinOne = 30;
int relPinTwo = 31;

OneWire ds(A5); // on pin A5
void setup(void) {
Serial.begin(9600);
pinMode(relPinOne, OUTPUT);
pinMode(relPinTwo, OUTPUT);
digitalWrite(relPinOne, OFF);
digitalWrite(relPinTwo, OFF);
}
void loop(void) {
//ТУТ НАДО КАК ТО ВЫНЕСТИ В ФУНКЦИЮ ТЕМПЕРАТУРУ
byte i;

ds.search(addr);
ds.reset();
ds.select(addr);

ds.write(0x44,1);

delay(1000);	
ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) data[i] = ds.read(); // we need 9 bytes
unsigned int raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
celsius = (float)raw / 16.0;
Serial.println(celsius);
//ЗДЕСЬ РАБОТА С РЕЛЕ - У МЕНЯ ПРИХОДИТ КОМАНДА НА ВКЛ И ВЫКЛ С ПРИЛОЖЕНИЯ КОТОРОЕ Я НАПИСАЛ НА ШАРПАХ
if (Serial.available() > 0) {
 char inputVal = Serial.read();
 Serial.println(inputVal);
 if (inputVal == '1')
{
	 digitalWrite(relPinOne , 0);
	 digitalWrite(relPinTwo , 0);
	 Serial.println("ON");
}
else
{
	 digitalWrite(relPinOne , 1);
	 digitalWrite(relPinTwo , 1);
	 Serial.println("OFF");
}}
}

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Например залить даный скетч затем открыть окно serial соеденения и посмотреть значения.

#include <OneWire.h>
OneWire ds(10);

void setup() {
Serial.begin(9600);
}

void loop() {

byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.println(Temp);
}

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Например залить даный скетч затем открыть окно serial соеденения и посмотреть значения.

#include <OneWire.h>
OneWire ds(10);

void setup() {
Serial.begin(9600);
}

void loop() {

byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.println(Temp);
}

Залил посмотрел, выводятся значения 127..я так полагаю датчик не обнаруживается

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

//ТУТ НАДО КАК ТО ВЫНЕСТИ В ФУНКЦИЮ ТЕМПЕРАТУРУ

применительно к коду в первом сообщении, как-то так -

float Get_T() {
byte i;
byte present = 0;
byte data[12];
byte addr[8];

ds.search(addr);
if (OneWire::crc8(addr, 7) != addr[7])return -900; //CRC is not valid!
present = ds.reset();
if (!present) return -990; //not present (1)
ds.select(addr);
ds.write(0x44,1);
delay(750);
present = ds.reset();
if (!present) return -999; //not present (2)
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) data[i] = ds.read();
unsigned int raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw << 3;
else if (cfg == 0x20) raw = raw << 2;
else if (cfg == 0x40) raw = raw << 1;
return (float)raw / 16.0;
}

юзаем, с контролем обрыва датчика -

void loop(void) {
float T = Get_T();
if (T > -900){
Serial.print(T);
Serial.println();
}
else
{
Serial.print("Error!");
Serial.println();
}
delay(1000);
}

Т.е. функция возвращает нам или величину измеренной температуры или значения -900, -990, 999, по которым определяем, что датчик сработал некорректно.

ЗЫ. А наличие подключения реле зачем определять то?

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

ЗЫ. А наличие подключения реле зачем определять то?

Просто только начал заниматься ардуино много вопросов, мне думается что если у меня 4 или 8 relay modue то каким образом обращаться к отдельным релюшкам и поэтому думал надо определять поключение

Ссылка на комментарий
Поделиться на другие сайты

Т.е. функция возвращает нам или величину измеренной температуры или значения -900, -990, 999, по которым определяем, что датчик сработал некорректно.

Кстати пока что я еще разбираюсь с прямым доступом к датчику, для меня это пока не понятно на уровне обращения по адресам, воспользовался библиотекой далласа

#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 7
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures(); // Send the command to get temperatures
int errorTemp = sensors.getTempCByIndex(0);
if (errorTemp != DEVICE_DISCONNECTED_C)
{
 //Serial.print("Temperature for the device 1 (index 0) is: ");
 Serial.println(sensors.getTempCByIndex(0));
}
else Serial.println("Sensor is not connected");
delay(750);
}

Но тут я не работал еще с реле потому как пока что не пойму, если в этот скетч добавить так же постоянное считывание команд на вкл или выкл реле то никак это не отразится на весь код програмы

Ссылка на комментарий
Поделиться на другие сайты

Кстати пока что я еще разбираюсь с прямым доступом к датчику

Вот даташит на датчик, переведённый на русский Черновым Геннадием, может пригодится в освоении.

ds18b20-rus.zip

библиотекой далласа

Она побольше места занимает и потому смысл бОльший имеет, если датчиков несколько.

если у меня 4 или 8 relay modue то каким образом обращаться к отдельным релюшкам и поэтому думал надо определять поключение

Ничего определять не требуется, тут простое управление - выдали на пин, включили реле и наоборот.

А измерение температуры выносите в отдельную ф-ю и, кстати, два раза подряд опрашивать датчик зачем?,

sensors.getTempCByIndex(0)

возвращает температуру или код ошибки, которую хранит переменная errorTemp, т.е. если там не

-127, то значение температуры.

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

Ну вот видимо как то так...Тепрь осталось прикрутить функцию для работы с реле

#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 7
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
}
float getDallasTemp()
{
sensors.requestTemperatures(); // Send the command to get temperatures
float currentTemp = sensors.getTempCByIndex(0);
if (currentTemp != DEVICE_DISCONNECTED_C)
{
 //Serial.print("Temperature for the device 1 (index 0) is: ");
 return currentTemp;
}
else return DEVICE_DISCONNECTED_C;
delay(750);
}
void loop(void)
{
Serial.println(getDallasTemp());
}

Ссылка на комментарий
Поделиться на другие сайты

Вот так тоже самое, но проще -

float getDallasTemp()
{
  sensors.requestTemperatures();
  return sensors.getTempCByIndex(0);
}

- получите или температуру или код ошибки.

а в главном коде, где используется возвращённое этой функцией значение,

проверяете, если вернуло не ошибку, то юзаем как температуру.

далее.

delay(750);

в вашем варианте не выполнится совсем - до него просто не дойдёт очередь

(почитайте про оператор return)

Ссылка на комментарий
Поделиться на другие сайты

Вот так

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
Serial.begin(9600);
sensors.begin();
}

float getDallasTemp()
{
sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}

void loop(void)
{
if (getDallasTemp() != DEVICE_DISCONNECTED_C)
 Serial.println(getDallasTemp());
else Serial.println(DEVICE_DISCONNECTED_C);
delay(750);
}

Изменено пользователем Alex
Завязывайте с подобными цитированиями !
Ссылка на комментарий
Поделиться на другие сайты

Вот так

Угу, всё так.

Только нужно ли температуру так часто измерять/опрашивать датчик - менее секунды?

Темппература - штука инерционная (хотя, опять же, смотря что вы там греть собрались), можно и раз 2-5 минут запрашивать, а то и позже...

Ссылка на комментарий
Поделиться на другие сайты

я об этом уже подумал, можно задержку поставить в зависимости от того как часто надо опрашивать, например каждую минуту..это уже нюансы..

но у меня возник вопрос - запускаю монитор порта, когда температура идет на понижение, все хорошо она отображается в виде

26

25.97

25.56

...

если же я датчик беру и нагреваю в руке, то у меня через каждый delay выскакивает промежуточное значение 85.00, откуда оно берется и почему?

25.56

85.00

25.97

85.00

26.55

85.00

Посмотрел исходники библиотек там резервированного значения 85 нету..что это? или же это особенность датчика?

Изменено пользователем Alex
Убрал бешаные цитаты
Ссылка на комментарий
Поделиться на другие сайты

А датчик надёжно подключен?

Может в руке контакт неустойчивый какой-то из ног?

Как, кстати он у вас подключен - полное включение (три провода) или паразитное (двумя проводами)?

И попробуйте код из сообщения #4 - так же будет себя вести?

У меня в приборе нормально работает.

PS.

промежуточное значение 85.00, откуда оно берется и почему?

В даташите, что я выше выкладывал, на стр. 21, в примечаниях указано:

3) При чтении температуры до команды температурного преобразования читается число 85, это число записывается в регистр температуры при подаче питания на датчик (код инициализации).

Т.е. если после включение прочитать данные датчика, то там будет эта величина.

Или (предположительно), то же будет выдаваться, если читать до того, как датчик будет готов дать достоверные

показания...

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

А датчик надёжно подключен?

Может в руке контакт неустойчивый какой-то из ног?

Как, кстати он у вас подключен - полное включение (три провода) или паразитное (двумя проводами)?

И попробуйте код из сообщения #4 - так же будет себя вести?

У меня в приборе нормально работает.

PS.

промежуточное значение 85.00, откуда оно берется и почему?

В даташите, что я выше выкладывал, на стр. 21, в примечаниях указано:

3) При чтении температуры до команды температурного преобразования читается число 85, это число записывается в регистр температуры при подаче питания на датчик (код инициализации).

Т.е. если после включение прочитать данные датчика, то там будет эта величина.

Или (предположительно), то же будет выдаваться, если читать до того, как датчик будет готов дать достоверные

показания...

Подключен в полном режиме датчик.

Попробовал код из вашего сообщения ,подобных проблем не возникло кстати. Показания температуры растут без значения 85.

Только что посмотрел - контакт на самом датчике был поврежден, перепаял, все стало нормально и с библиотекой далласа.

Еще возник следующий вопрос..

я залил сейчас скетч

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 5
#define ON 0
#define OFF 1

int relPinOne = 30;
int relPinTwo = 31;
char inputValRelayModule;

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600);

pinMode(relPinOne, OUTPUT);
pinMode(relPinTwo, OUTPUT);
digitalWrite(relPinOne, OFF); //Тут скидывается последнее состояние реле
digitalWrite(relPinTwo, OFF);
inputValRelayModule = '0';

sensors.begin();
}
float GetDallasTemp()
{
sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}
void loop(void)
{
if (GetDallasTemp() != DEVICE_DISCONNECTED_C)
 {
 Serial.print(GetDallasTemp());
 Serial.print(";");//начало строки
 }
else
 {
 Serial.print(DEVICE_DISCONNECTED_C);
 Serial.print(";");//начало строки
 }

if (Serial.available() > 0)
{
 inputValRelayModule = Serial.read();
 if (inputValRelayModule == '1')
 {
	 digitalWrite(relPinOne , 0);
	 digitalWrite(relPinTwo , 0);
 }
 else
 {
	 digitalWrite(relPinOne , 1);
	 digitalWrite(relPinTwo , 1);

 }
}

Serial.print(inputValRelayModule);
Serial.print("\n");
delay(1000);
}

как видно вот тут

digitalWrite(relPinOne, OFF); //Тут скидывается последнее состояние реле
digitalWrite(relPinTwo, OFF);
inputValRelayModule = '0';

У меня скидывается последнее состояние реле.

Если же я комментирую эти строки, то у меня при запуске монитора порта ничего не меняется и в переменной которая хранит состояние реле - вкл или выкл ( inputValRelayModule) которая объявлена вначале пусто, это понятно что пусто.

Так вот, каким образом мне при обращении к самому реле проверять его текущее состояние?

Например у меня реле зацеплено к выключателю света и оно включено, свет включен соответственно, выходит при запуске своей программки по управлению света например, у меня все состояния скинутся и свет выключится.

Как можно проверить состояние самого реле при инициализации? У меня свет включен, значит в переменную должно записаться 1 по идеи.

Изменено пользователем KorPaEv
Ссылка на комментарий
Поделиться на другие сайты

Что-то я не особо понял, что требуется, но мысли примерно такие:

1. Само реле ничего не знает, включён свет (к примеру отдельным выключателем) или нет, поэтому будет вести себя только так, как им управляют и никак иначе.

2. Если требуется, что бы реле "знало" о состоянии нагрузки по п.1, то потребуется ввести обратную связь - к примеру, по току нагрузки или оптическую, тогда контроллер будет "знать" как себя вести. Опишите на словах логику работы программы, как вам видится её работа, от первого включения и далее. Ну и зависимость от наличия включенного света.

Изменено пользователем DrZ
Ссылка на комментарий
Поделиться на другие сайты

2. Если требуется, что бы реле "знало" о состоянии нагрузки по п.1, то потребуется ввести обратную связь - к примеру, по току нагрузки или оптическую, тогда контроллер будет "знать" как себя вести. Опишите на словах логику работы программы, как вам видится её работа, от первого включения и далее. Ну и зависимость от наличия включенного света.

видимо это то что мне и надо.

А логика такая..

Как видно в скетче я получаю строку на каждой итерации вида: temperature;relayState

27;0

27;0

27;1

т.е температура и состояние реле.

При запуске ардуино реле скидывается в разрыв. Как раз этот момент я и уточняю - это ваш пункт 2.

Как только я получил строку, мое приложение читает данные с порта и получает строку, далее я ее парсю и раскидываю по переменным - соответственно на температуру и состояние реле.

Вывожу данные на формочку.

Так же для тестов кинул на форму чекбокс и при нажатии у меня отправляется на ардуино значение включения или выключения реле (1 или 0)

Далее я получаю новую строку уже вида

27;1

на форме так же отображается текущее состояние реле исходя из значения 1.

Отсюда и мой вопрос - при каждом запуске моей программки, я открываю порт на чтение и фактически у меня запускается на ардуино скетч, происходит инициализация и скидываются все значения.

Поэтому, если я поработал с программкой и включил реле, далее вышел из программки, реле осталось включенным, программка при завершении закрыла порт.

Далее снова запускаю программку и реле сразу выключается - выше я написал почему.

Т.е мне видимо необходимо как вы написали как то проверять состояние реле, оно же осталось включенным..

Или я не верно понимаю логику работы с ардуино?

Изменено пользователем KorPaEv
Ссылка на комментарий
Поделиться на другие сайты

Поэтому, если я поработал с программкой и включил реле, далее вышел из программки, реле осталось включенным, программка при завершении закрыла порт.

Т.е. вы выходите только из программы, контроллер при этом продолжает работу. Так?

Далее снова запускаю программку и реле сразу выключается - выше я написал почему.

По идее, такого быть не должно - контроллер "ждёт" данных в порту и если они есть, да ещё и соответствуют 1, то выключает реле.

А если нет данных, то с реле ничего и не происходит.

Осталось выяснить, что передаёт программа с компа при запуске, не прилетает ли оттуда команда выключения.

Т.е мне видимо необходимо как вы написали как то проверять состояние реле, оно же осталось включенным..

Управляя реле, можно хранить его состояние в логической переменной - при включении взводите флаг, при выключении - сбрасывайте.

boolean relayState = false;

if (Serial.available() > 0)
{
        inputValRelayModule = Serial.read();
        relayState = (inputValRelayModule == '1');
        digitalWrite(relPinOne , relayState);
        digitalWrite(relPinTwo , relayState);
}

Ну или inputValRelayModule, в принципе, всегда хранит состояние реле, которое вы отправляете в порт.

Т.е. реакция будет только на "0" или "1", что правильнее, а не на "1" и"любое значение" как у вас сейчас.

if (Serial.available() > 0)
{
        inputValRelayModule = Serial.read();
        switch (inputValRelayModule){
           case '0':
              digitalWrite(relPinOne , false);
              digitalWrite(relPinTwo , false);
              break;
           case '1':
              digitalWrite(relPinOne , true);
              digitalWrite(relPinTwo , true);
              break;
        }
}

Ссылка на комментарий
Поделиться на другие сайты

Т.е. вы выходите только из программы, контроллер при этом продолжает работу. Так?

Да, реле работать продолжает...

По идее, такого быть не должно - контроллер "ждёт" данных в порту и если они есть, да ещё и соответствуют 1, то выключает реле.

А если нет данных, то с реле ничего и не происходит.

Осталось выяснить, что передаёт программа с компа при запуске, не прилетает ли оттуда команда выключения.

В том то и дело что при запуске программы у меня просто открывается порт на котором висит ардуино и больше ничего.

Я так полагаю что в самом скетче при этом все сбрасывается.

Спасибо, буду разбираться дальше!

Ссылка на комментарий
Поделиться на другие сайты

Ну попробуйте применить конструкцию switch-case, что бы чётко реагировало на "0" или "1", возможно при подключении программы к порту, туда

какой-то мусор попадает...

Ссылка на комментарий
Поделиться на другие сайты

библиотека далласа

Она побольше места занимает и потому смысл бОльший имеет, если датчиков несколько.

Вы писали что библиотека имеет место, у меня сейчас как раз ситуация когда датчика 3 штуки.

Так вот, каким образом я их соединяю?

Выходит питание у меня одно будет у всех 3 датчиков так? Я их спаяю в один плюс и минус...

А дата на разные пины пойдет или же библиотека как то работает когда все 3 датчика на одном пине висят?

Ссылка на комментарий
Поделиться на другие сайты

Протокол называется One Wire - т.е. "один провод", соответственно все датчики висят на одной шине данных и соединяются параллельно...

Я сделал конечно вот так...в примере было что то подобное в стандартном...но это все датчики на одной шине..

А если же я хочу на разные пины распихать датчики и использовать так же библиотеку далласа, это возможно?

#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 7
#define ON 0
#define OFF 1
int relPinOne = 30;
int relPinTwo = 31;
char inputValRelayModule;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
 // start serial port
 Serial.begin(9600);

 pinMode(relPinOne, OUTPUT);
 pinMode(relPinTwo, OUTPUT);
 digitalWrite(relPinOne, OFF); //Тут скидывается последнее состояние реле
 digitalWrite(relPinTwo, OFF);
 inputValRelayModule = '0';
 // Start up the library
 sensors.begin();
}
float GetDallasTemp()
{
 sensors.requestTemperatures(); // Send the command to get temperatures
 return sensors.getTempCByIndex(0);
}
void loop(void)
{
 sensors.requestTemperatures();
 Serial.print(sensors.getTempCByIndex(0));
 Serial.print(";");
 Serial.print(sensors.getTempCByIndex(1));
 Serial.print(";");
 /*
 if (GetDallasTemp() != DEVICE_DISCONNECTED_C)
     {
       Serial.print(GetDallasTemp());
       Serial.print(";");//начало строки
     }
 else
     {
       Serial.print(DEVICE_DISCONNECTED_C);
       Serial.print(";");//начало строки
     }
  */

 if (Serial.available() > 0)
 {
       inputValRelayModule = Serial.read();
       switch (inputValRelayModule)
       {
         case '0':
           digitalWrite(relPinOne , 1);
           digitalWrite(relPinTwo , 1);
           break;
         case '1':
           digitalWrite(relPinOne , 0);
           digitalWrite(relPinTwo , 0);
           break;
       }
 }
 Serial.print(inputValRelayModule);
 Serial.print("\n");
 delay(1000);
}

Тут я вывожу по индексу, а если же хочу выводить иначе или это не целесообразно?

Придется же на каждый датчик отдельную функцию писать я так понимаю, это не совсем правильно же так?

Изменено пользователем KorPaEv
Ссылка на комментарий
Поделиться на другие сайты

А если же я хочу на разные пины распихать датчики и использовать так же библиотеку далласа

А зачем, если можно всего один пин юзать? Пинов некуда девать? )))

это возможно?

Да возможно - объявите другой пин, создайте объект (к примеру - sensors2) и далее, по аналогии...

Только - зачем?

а если же хочу выводить иначе

Иначе - это как?

Кроме индекса, можно по адресу. Каждый датчик имеет свой уникальный адрес, который можно получить функцией getAddress

Кстати, если датчиков несколько можно не городить как у вас

Serial.print(sensors.getTempCByIndex(0));
Serial.print(sensors.getTempCByIndex(1));

а использовать ф-ю getDeviceCount и опросить все датчики в цикле.

Ссылка на комментарий
Поделиться на другие сайты

А если же я хочу на разные пины распихать датчики и использовать так же библиотеку далласа

А зачем, если можно всего один пин юзать? Пинов некуда девать? )))

это возможно?

Да возможно - объявите другой пин, создайте объект (к примеру - sensors2) и далее, по аналогии...

Только - зачем?

а если же хочу выводить иначе

Иначе - это как?

Кроме индекса, можно по адресу. Каждый датчик имеет свой уникальный адрес, который можно получить функцией getAddress

Кстати, если датчиков несколько можно не городить как у вас

Serial.print(sensors.getTempCByIndex(0));
Serial.print(sensors.getTempCByIndex(1));

а использовать ф-ю getDeviceCount и опросить все датчики в цикле.

понял

вот так выходит

void loop(void)
{
 sensors.requestTemperatures();
 for (int i = 0; i < sensors.getDeviceCount(); i++)
 {
   Serial.print(sensors.getTempCByIndex(i));
   Serial.print(";");
 }
}

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну в целом вашу иронию я понимаю, хотя и не разделяю. 1. Вы правы частотники бывают разные, и у меня они разные. Но меня больше интересовал вопрос вообще такое подключение практикуется или нет, возможно это вообще полный бред, и такое не делается. А возможно есть более правильная  альтернатива, для решения задачи. На то и рассчитан вопрос, да и форум вроде по теме     2. Инструкции тоже не проблема, однако в них надо что-то понимать что бы был смысл вообще их читать. (Инструкции смотрели)    3. Человек был найден, и он утверждает что такое подключение не возможно! И что в целом  не бывает потенциометров с дисплеем, который можно было бы подключить к частотнику для внешнего управления. А у меня по этому поводу возникли сомнения, вот и решил уточнить у понимающего общества.      
    • Модель частотника до буквы. Например так, ну и что вам это даст.
    • подскажите пожалуйста какие напряжения допустимы?  Ведь 4.7в светиками и у автора тоже не вышло...?!
    • Пиздец вы тут все токсики) Свят-свят-свят.
    • Ещë раз говорю, схема не моя! Этой схеме уже лет 30 как минимум! Есть немного более сложная вариация этой схемы, усилитель "Омикрон". По сути практически тоже самое только с небольшими доработками. Что ту схему что я дал, что Омикрон, люди собирали очень много раз и более чем довольны. Не надо тут чушь молоть про симулятор, если бы я на 100% не знал бы что схема рабочая, никогда бы не дал!   Про ОУ я тоже ранее писал. 4558 конечно далеко не HiEnd ОУ, но дать до 0.01% КНИ и немного ниже он более чем способен. Тем более автор темы не собирается делать что-то сверхтоповое, ему нужен обычный, просто нормальный ушник. Если захочет улучшить, никто не мешает заменить ОУ на более хороший и получить параметры намного лучше, переделывать на плате для этого вообще ничего не нужно. 4558 я и сам уже не раз использовал, это вполне себе нормальный ОУ и с убогим LM358 вообще ни в какое сравнение и близко не идëт. 
    • Не будут, тут разнос между на и вч огромный, я же написал Широколосный, все пропустит от 20 Гц до 20 кГц, далее магнитола срежет на какой надо частоте. 60, 80 , 120 Гц. Но сейчас осенило, вроде магнитолы режут 2 порядком, может этого будет и мало Вам, нужно слушать. 
    • Нет, изначально планировал дальний в полнакала, развел плату, заказал в Китае 5шт (первый заказ, скидки и просто красиво). Установка планировалась в семейный "парк" авто. Конечно, если все будет работать правильно, то каким-то знакомым или знакомым знакомых можно и сделать.  Но, как оказалось, есть куча нюансов. Потом присмотрел ДХО с режимом поворотника такого плана:   Как уже ранее писал, для ледов девайс можно перевести в режим реле. Но поскольку обычно в подобных лампах все на пределе по току и по нагреву, и живут они соответственно не долго,  хотелось бы оставить возможность ШИМ. Вот и интересно как реагирует светодиод на ШИМ. Пока ясно, что нужно поднять частоту. Может еще электролит по выходу добавить или нет особого смысла?  
×
×
  • Создать...