Ви не увійшли.
Сторінки 1
Может не судьба? И это не Ваше?
Самый результативный пост темы...
Это ссылки. Читается в любой книге по С++
Ооооо я так и знал... 100500 раз про них читал и указатели тоже... не укладывается у меня это в голове ... все равно спасибо. Направление понял... будем дальше муштровать...
2Кака Красава! Не, реально красава! В одной строке спас! Я же говорил что вопрос скорее пустяковый, но как его правильно задать не знал -> сопли... ведь все знаю что правильно заданный вопрос содержит 50%+ ответа...
За тапок спасибо... за дело тапком можно!
И еще глупый вопрос где про эту конструкцию - (OneWire & ds) почитать... ну что за синтаксис что куда и как передаётся? Или надо в Классы поглубже лезть?
з.ы. не, ну реально СПАСИБО... уважил! з.з.ы. Watchdog меня учебниками уже затарил, так что я готов - назови просто главу
2Watchdog Я Ваш "тонкий" намек понял еще по первой ссылке и поверьте "изучение" контроллеров и языка я начинал с attyny13 сначала в DIP а потом и в SOT корпусе и язык изучал еще по отксереному учебнику, и "програмировал" еще в CVAVR + Proteus8 и зашивал все это через COM порт... физический... не USB... и мануал к контроллеру (регистры счетчиков/таймеров/прерывания) переводил с английского со словарем в руках а не с GoogleTranslate... потом забросил... слишком уж это не комфортно было, что паять что писать... а с появлением "готовых" решений на платах с USB + практически не ограниченной элементной базой и мизерной стоимостью датчиков и т.д. опять решил "размятся" - но кому надо это грязное белье? Я, пока, не ставлю себе задачу стать проФФессиональным программистом и написать сверх крутой софт... я пытаюсь заставить нужные МНЕ железяки выполнять нужные МНЕ действия... возможно это пока криво получается и местами я все же упираюсь в знание языка, но всему свое время... уж поверте я разберусь...
2all Сори за оффтоп - нахлынуло
1. Узнаете марку контроллера экрана
2. Подключаете библиотеку #include <U8g2lib.h> (как инсталировать)
3. Находите его (контроллер GLCD) в списке контроллеров в начале скетча любого примера из библиотеки...
4. Копируете строку в свой скетч. Все, библиотека подключена, GLCD опознан )
5. В примере (или описании библиотеки) смотрите какие команды...
На примере моего GLCD:
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 13, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
//U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
//U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
U8G2= библиотека; ST7920=контролле GLCD; 128X64=разрешение(бывает разное - внимательно!); SW или HW = SoftWare или HardWare подключение; SPI=шина/интерфейс подключения; ну а в скобках пины подключения стандартные, но можно свои в соответствии с распиновкой контроллера...
а.. и да... я бы лично советовал все таки U8glib, она хоть и старее и больше не обновляется тем не менее при компиляции занимает меньше места в памяти контроллера...
2vvr о чем это? Я ведь спрашивал как данные передать в функцию.. как забрать я и так знаю... + т.б. может скетч и правильно написан с точки зрения программирования, но с точки зрения работы устройства точно НЕТ. На датчик посылается 2а запроса.. первый на измерение а второй на передачу температуры ведущему устройству. Зазор запросов от 94-750мс ( в зависимости от битности измерения)... и главное... датчик ВРУЧНУЮ прописан в теле функции... а если его имя завтра будет другим? а если датчика станет 2а? копи-пастить вторую функцию и руками вбивать имя датчика? Или вычитывать функцию чтоб узнать как "правильно" назвать датчик чтоб все завелось?
2Watchdog ))) подход конечно радикальный... за "словарь" конечно спасибо... 787страниц это вообще не вопрос... это мы быстренько... )))
Всем доброго вечера!
Вопрос мой, надеюсь, простой... но ответа на просторах интернета я так и не нашел. Возможно это связано с неумением конкретизировать вопрос...
В общем ситуация такая: есть библиотека OneWire Тыць есть Nano есть скетч...
//для DS18b20
#include <OneWire.h>
//----------------------- МОДУЛИ -----------------------------
OneWire ds1(8);
OneWire ds2(9);
... в котором присутствуют 2а датчика один на 8м пине, второй на 9м (да, я в курсе что можно их на один пин вешать пачками )
и так: есть Библиотека(Класс(объект))-OneWire. Eсть ds1/ds2 - префикс экземпляра/метода (в сети как только это не называют) и собственно сам метод(функция) - OneWire myWire(pin) объясните плиз: что такое ds1/ds2 в смысле как "это" условное "имя" правильно называется? Возможно, для меня, это уже существенно ускорит поиск решения следующего вопроса...
Идем дальше... скетч:
//------------------ БИБЛИОТЕКИ --------------------
//для DS18b20
#include <OneWire.h>
//------------------- УСТАНОВКИ --------------------------
#define DEBUG 1 // ВКЛ/ВЫКЛ листинга в монитор порта
#define inPin 2 // пин 2 для прерывания 0 от датчика движения (HC-SR505)
#define myinterval 10000 // Время от последнего прерывания до заставки в мс
#define period1 10000 // Время от последнего прерывания до заставки в мс
//----------------------- МОДУЛИ -----------------------------
OneWire ds1(8); // Создаем объект (датчик температуры) OneWire для шины 1-Wire, на пине 8. Имя ds1.
OneWire ds2(9);
//----------------------ПЕРЕМЕННЫЕ-----------------------------
int temp_switcher = 1;
byte data[2]; // Место для значения температуры локального датчика
float temp_dev1 = 0, temp_dev2 = 0, temp_dev3 = 0; //Переменные значений температуры с датчиков
//----------------- Настройка железа --------------------------
void setup() {
#if (DEBUG==1)
Serial.begin(9600); //открываем порт для связи с ПК
#endif
}
//!!!!!!!!!!!!!!!!!!!!!!! Запускаем основной цикл !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void loop() {
switch (temp_switcher) {
case 1:
Serial.print("Case1! ");
static unsigned long start_time, stop_time;
static boolean is_once;
start_time = millis();
if (is_once == 0) {
stop_time = start_time + 1000;
is_once = 1;
temp_switcher = 2;
Serial.print("start_time - "); Serial.println(start_time / 1000);
Serial.println();
break;
}
stop_time = start_time + myinterval;
temp_switcher = 2;
Serial.print("start_time - "); Serial.println(start_time / 1000);
Serial.println();
break;
case 2:
if (millis() >= (stop_time - 1000) ) {
ds1.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds1.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устройство
ds1.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
temp_switcher = 3;
Serial.print("Case2!"); Serial.print("Time - "); Serial.println(millis() / 1000);
Serial.print("start_time - "); Serial.print(start_time / 1000); Serial.print(" stop_time - "); Serial.println(stop_time / 1000);
Serial.println();
}
break;
case 3:
if (millis() >= stop_time) {
ds1.reset(); // Теперь готовимся получить значение измеренной температуры
ds1.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устройство
ds1.write(0xBE); // Просим передать нам значение регистров со значением температуры
data[0] = ds1.read(); // Читаем младший байт значения температуры
data[1] = ds1.read(); // А теперь старший
temp_dev1 = ((data[1] << 8) | data[0]) * 0.0625; //Формируем значение: - сперва "склеиваем" значение, затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
temp_switcher = 1;
Serial.print("Case3!"); Serial.print("Time - "); Serial.println(millis() / 1000);
Serial.print("start_time - "); Serial.print(start_time / 1000); Serial.print(" stop_time - "); Serial.println(stop_time / 1000);
Serial.print("temp_dev1 = "); Serial.println(temp_dev1, 1);
Serial.println(" ");
}
break;
}
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Скетч, по сути, с просторов интернета но переделанный без delay и без "бесконечного долбления" датчика запросами на измерения температуры как здесь + замашка на многопоточность т.к. есть еще NRF24 + GLCD и много что будет вешаться в дальнейшем...
Хочется выше изложенный скетч "упаковать" в функцию вида: long myTemp( XXXXX, unsigned long myinterval) которая будет использоваться в loop-e - myTemp(ds1, 5000); myTemp(ds2, 10000); ... ну или как то близко к этому... подскажите как это сделать или ссылкой поделитесь где про это почитать можно... т.е. по сути я не могу понять как в "автоматическом" режиме менять данные в скетче(будущей функции): xxx.reset();
xxx.write(0xCC);
xxx.write(0x44);
а именно ххх на ds1, ds2, mySensor и все что взбредет в голову как имя датчика...
з.ы. код лично для себя... без тапков пожалуйста... но, готов к конструктивной критике как в плане реализации функции так и скетча в целом...
з.з.ы. знаю что "таймеры" в if-ках сделаны не правильно...переполнения не боюсь.. но постараюсь исправить...
з.з.з.ы надеюсь понятно изложил суть "проблемы"...
Сторінки 1