Написание библиотек для Arduino IDE

Lion777
Offline
Зарегистрирован: 20.05.2016

Здравствуйте, решил потренироватся и с протоколами передачи данных и с написанием библиотек, пока баловался с 1-wire, написал библиотеки для DHT11, DHT22 и библиотеку для работы с 1-wire. С DHT22 точно незнаю работает ли, так как нету этого датчика, вроде делал по даташиту. Если есть возможность, то проверьте работает ли с DHT22 и скажите какие есть косяки в коде библиотек. 

https://github.com/uaLion777/MyDHT

https://github.com/uaLion777/MyOneWire

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не позорился бы ты....

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Критика принимается? Короче - всё плохо. Не совсем всё, но читать при помощи digitalRead, при этом пытаясь попасть в маленькие тайминги - идея такая себе. Сравните: https://github.com/Porokhnya/GreenhouseProject/blob/master/Main/DHTSupport.cpp - это чтение с DHT, там читается напрямую из порта, чтобы исключить накладные расходы вызова digitalRead (внутри которой каждый раз делается то же самое - ищется соответствие пина порту и т.п., короче - много муторных ненужных операций).

С OneWire вообще по таймингам всё должно быть очень аккуратно - привередлив этот протокол к ним, аж жуть. Там, строго говоря, надо делать всё на прерываниях и таймерах, и забыть о digitalRead/digitalWrite как о страшном сне.

Такие мысли.

Lion777
Offline
Зарегистрирован: 20.05.2016

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

---

детсемен, тебя как бы тут тоже не хвалят )))

http://arduino.ru/forum/programmirovanie/trebuetsya-pomoshch-znatokov-si#comment-317362

Lion777
Offline
Зарегистрирован: 20.05.2016

DIYMan, в том скетче есть такая строчка

pinMode(pin, OUTPUT);

digitalWrite(pin, HIGH);

так же вроде делать нельзя, может быть КЗ, как я читал?

b707
Offline
Зарегистрирован: 26.05.2017

Lion777 пишет:

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

А чего вы хотели? Реакцию Дед-симена очень легко понять. Зачем браться за библиотеки, если не знаком с тонкостями? Кому нужны такие библиотеки?

Это графоманство называется, бумагу марать ради самоудовлетворения...

Lion777
Offline
Зарегистрирован: 20.05.2016

b707 пишет:

 Зачем браться за библиотеки, если не знаком с тонкостями? Кому нужны такие библиотеки?

Это графоманство называется, бумагу марать ради самоудовлетворения...

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

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

Lion777 пишет:

Для того что-бы знакомится с тонкостями... ))

Для того, чтобы знакомиться с тонкостями - надо брать даташит на микроконтрроллер и учиться программировать на более низком уровне используя регистры (тех же портов ввода-вывода). А использовать в своих библиотеках ардуиновские функции типа pinMode(), digitalWrite(), digitalRead()  - это обёртка поверх обёртки...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Jeka_M пишет:
Для того, чтобы знакомиться с тонкостями - надо брать даташит на микроконтрроллер и учиться программировать на более низком уровне используя регистры (тех же портов ввода-вывода). А использовать в своих библиотеках ардуиновские функции типа pinMode(), digitalWrite(), digitalRead()  - это обёртка поверх обёртки...
  Ну вообще-то это и используется в библиотеках. Но вот там где скорость обмена не критична. Иногда даже есть гибрид . Одни пины так, а другие иначе. 

По теме: библиотеки не пишутся от балды. Библиотеки создаются под маштабные проекты. Человек - программист захотел , что бы все уровни проекта были в едином стиле и без всяких "костылей" и "дыр", вот и пишет все, сверху вниз.

Lion777
Offline
Зарегистрирован: 20.05.2016

согласен, тем сейчас и пытаюсь заниматся.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:

DIYMan, в том скетче есть такая строчка

pinMode(pin, OUTPUT);

digitalWrite(pin, HIGH);

так же вроде делать нельзя, может быть КЗ, как я читал?

С чего бы там быть КЗ?

Lion777
Offline
Зарегистрирован: 20.05.2016

Датчик подключен как монтажное " и " и если на твою единицу выдаст 0 вот и замыкание, должен быть в z состоянии, прижимаешь к нулю и отпускаешь, нужно порт просто перевести в режим приема и линия сама перейдет в 1 так как подтянуто резистором.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:
Датчик подключен как монтажное " и " и если на твою единицу выдаст 0 вот и замыкание, должен быть в z состоянии, прижимаешь к нулю и отпускаешь, нужно порт просто перевести в режим приема и линия сама перейдет в 1 так как подтянуто резистором.

Ну вот не поверишь: этот код прекрасно опрашивает DHT и никакого КЗ при этом нет :) 

Lion777
Offline
Зарегистрирован: 20.05.2016

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:
Я поверю, мой код тоже со всем справляется на ура но критика же есть ))), я тоже как у вас делал, а потом вычитал, что это неверно и так делать нельзя.

Где вы это вычитали? В даташите написано, что высокий уровень на линии говорит датчику, что данные с него не требуются - это и делается, собственно. О каком КЗ вы говорите на линии данных - непонятно. Вот выдержка из даташита:

Цитата:

Data-bus's free status is high voltage level. When communication between MCU and DHT22 begin, program of MCU will transform data-bus's voltage level from high to low level and this process must beyond at least 1ms to ensure DHT22 could detect MCU's signal, then MCU will wait 20-40us for DHT22's response.

Lion777
Offline
Зарегистрирован: 20.05.2016

вот например как устанавливаются входы

Step 2: Microprocessor I / O set to output at the same time output low, and low hold time can not be less than 18ms, then the microprocessor I / O is set to input state, due to the pull-up resistor, a microprocessor/ O DHT11 the dATA data lines also will be high, waiting DHT11 to answer signal, send the signal as shown:

и что такое монтажное "и"

http://easyelectronics.ru/montazhnoe-i.html

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:

вот например как устанавливаются входы

Step 2: Microprocessor I / O set to output at the same time output low, and low hold time can not be less than 18ms, then the microprocessor I / O is set to input state, due to the pull-up resistor, a microprocessor/ O DHT11 the dATA data lines also will be high, waiting DHT11 to answer signal, send the signal as shown:

и что такое монтажное "и"

http://easyelectronics.ru/montazhnoe-i.html

 

И? Чего вы хотите сказать-то? Написано про подтягивающий резистор, который просто медленнее тянет линию вверх, чем принудительное выставление высокого уровня на линии, вот и всё. Вы бы посмотрели полностью даташит и код, и увидели бы, что линия переводится на ВЫХОД только тогда, когда с датчика уже всё прочитано, и ему надо сказать, что всё - он свободен. Вместо тех двух строчек кода можно тупо подтяжку к питанию сделать, не вопрос - будет РОВНО ТО ЖЕ САМОЕ, ибо В НАЧАЛЕ работы с датчиком мы ВСЁ РАВНО настраиваем линию НА ВЫХОД. И кстати - встроенная подтяжка к питанию также юзается, если вы не заметили.

Вопросы? Или опять будете ссылками, ненужными в контексте обсуждаемого, бравировать? Ещё раз повторюсь: когда DHT отсылает 40 бит - он переходит в low power consumption mode и ничего с линией не делает, о каком КЗ вы говорите?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я 5 коп. добавлю? Тут Лион прав, не обижайтесь, плз.!

Хороший тон - выставлять 1 переодом в чтение. Значение имеет только в режиме мульти мастера, что понятно. Если у тебя 1 и кто-то ресетит шину - может волшебгый дым выйти.

Для одного мастера - просто полезный стиль.

Lion777
Offline
Зарегистрирован: 20.05.2016

В даташите указанно, что низкий уровень устанавливается переводом i/o на вход, переводом на выход устанавливается единица подтягивающим резистором, все доказывать вам ниче не хочу, вот еще ссылка с поясненниями, хотите верьте, хотите нет, это с протокол 1-wire, тут принцип тот же

Внимание: ни ведущий, ни ведомые не выставляют на шине "единицу" - это черевато коротким замыканием: если одно устройство выставит на шине "1", а другое – "0"; поэтому как ведущий, так и ведомый могут использовать только два состояния: "на выход в ноль" и "z-состояние" (на вход без подтяжки). Подтяжка к питанию осуществляется резистором (!).

http://avr.ru/beginer/understand/1wire

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:

В даташите указанно, что низкий уровень устанавливается переводом i/o на вход

Где вы такое вычитали? У вас странная интерпретация написанного: "Microprocessor I / O set to output at the same time output low, and low hold time can not be less than 18ms". Переведите плз эту фразу правильно, ок? Я переведу, если вы не осилили: выход МК устанавливается НА ВЫХОД и в это же время там должен быть НИЗКИЙ сигнал, который не может быть меньше 18 мс. Короче - это фрейм старта чтения с датчика, и ЯСНО написано, что нога МК конфигурируется НА ВЫХОД. Не бредьте.

Lion777 пишет:

 это с протокол 1-wire, тут принцип тот же

Внимание: ни ведущий, ни ведомые не выставляют на шине "единицу" - это черевато коротким замыканием: если одно устройство выставит на шине "1", а другое – "0"; поэтому как ведущий, так и ведомый могут использовать только два состояния: "на выход в ноль" и "z-состояние" (на вход без подтяжки). Подтяжка к питанию осуществляется резистором (!).

http://avr.ru/beginer/understand/1wire

Блин, давайте мух от котлет отдельно, ок? Приплели 1-Wire, которая как раз с монтажным "и", к DHT, который ОДИН на линии. И который, согласно даташиту, после отдачи 40 бит уходит в сон, и с линией можно делать всё что угодно.

Всё смешалось в доме Облонских, блин. Странно, как мой код вообще работает, ни одного DHT ещё не попалил, и ни один порт ардуины? Вот не должен, цуко, судя по словам путающих тёплое с круглым - а работает. Ок, у меня всё неправильно, пойду поглажу по головке бедный DHT, который об этом и не подозревает.

 
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

wdrakula пишет:

Я 5 коп. добавлю? Тут Лион прав, не обижайтесь, плз.!

Хороший тон - выставлять 1 переодом в чтение. Значение имеет только в режиме мульти мастера, что понятно. Если у тебя 1 и кто-то ресетит шину - может волшебгый дым выйти.

Для одного мастера - просто полезный стиль.

Каким боком это к DHT, поясните? Или это чисто так - потеоретизировать? DHT - один на линии, после стартового фрейма МК читает с линии 40 бит, после отдачи 40 бит DHT ничего с линией не делает, более того, в даташите сказано - если на линии ПОСТОЯННО ВЫСОКИЙ уровень - это поломка DHT. Каким каком при таком раскладе может случиться КЗ - объясните мне, недалёкому? И при чём тут монтажное "и", если мастер при чтении 40 бит НИЧЕГО не делает с линией, а только читает из неё?

Давайте не теоретизировать, а следовать строго рамкам обсуждения, плз. А то вон сюда уже 1-Wire приплели, о чём речь вообще не велась.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Внимательно смотрим на картинку:

Чёрненьким цветом показано, что делает МК, остальное - подтяжка к питанию. В коде сделано РОВНО так же, за исключением того, что после получения данных я не жду подтяжки, а принудительно поднимаю линию, ибо: "DHT will change to low-power-consumption-mode when data collecting finish if it don't receive start signal from MCU again". Что ещё добавить - я не знаю. Думаю даже, что программное поднятие линии вверх работает медленнее, чем подтяжка вытягивает её наверх, ибо - тучу тактов проца надо, чтобы переварить pinMode и digitalWrite. Короче - беды в этих двух строчках ровно ноль целых хер десятых.

Lion777
Offline
Зарегистрирован: 20.05.2016

а тут че не монтажное и, зачем резистор?

тут по вашей цитате из даташита сказанно

Data-bus's free status is high voltage level. When communication between MCU and DHT22 begin, program of MCU will transform data-bus's voltage level from high to low level and this process must beyond at least 1ms to ensure DHT22 could detect MCU's signal, then MCU will wait 20-40us for DHT22's response.

что когда высокий уровень это свободное состояние шины

вот из даташита как и что делать с выводами.

Step 2

Microprocessor I/O set to output, while output low, and low hold time can not be less than 800us, typical
values are down 1MS, then the microprocessor I/O is set to input state, the release of the bus, due to the
pull-up resistor, the microprocessor I/O AM2303 the SDA data line also will be high, the bus master has
released the AM2303 send a response signal, that is, the output 80 microseconds low as the response signal,
tightthen output high of 80 microseconds notice peripheral is ready to receive data signal transmission as shown 
 
 
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Lion777 пишет:

а тут че не монтажное и, зачем резистор?

тут по вашей цитате из даташита сказанно

Data-bus's free status is high voltage level. When communication between MCU and DHT22 begin, program of MCU will transform data-bus's voltage level from high to low level and this process must beyond at least 1ms to ensure DHT22 could detect MCU's signal, then MCU will wait 20-40us for DHT22's response.

что когда высокий уровень это свободное состояние шины

вот из даташита как и что делать с выводами.

Step 2

Microprocessor I/O set to output, while output low, and low hold time can not be less than 800us, typical
values are down 1MS, then the microprocessor I/O is set to input state, the release of the bus, due to the
pull-up resistor, the microprocessor I/O AM2303 the SDA data line also will be high, the bus master has
released the AM2303 send a response signal, that is, the output 80 microseconds low as the response signal,
tightthen output high of 80 microseconds notice peripheral is ready to receive data signal transmission as shown 
 
 

Млять, уже сил нет: да переведите вы наконец с английского! Как начинается фрейм, цуко! "Microprocessor I/O set to output" - это хер собачий, что ли? Какая разница, когда я буду переводить линию на выход, если датчик отдал данные и отвалился? Где, блять, КЗ? У вас в голове, по ходу. Отстаньте от меня со своим КЗ, с приплетённым не к месту 1-Wire и неумением читать простейшие даташиты. Просто - отстаньте, всё у вас хорошо, а у меня не правильно. Один хер деревянному не докажешь, вам к Логику в компанию надо, есть тут такой петуч.

Lion777
Offline
Зарегистрирован: 20.05.2016

 я то перевел, там указано, что для перевода линии в ноль установите порт как выход, для перевода в высокий уровень - установите порт как вход и с помощью подтягивающего резистора линия перейдет в высокий уровень, резистор там для чего ? ))), вам не объяснили в даташите чем это чревато, значит так делать можно ))), где там сказанно, что нужно переводить линию самому в высокий уровень ???? А знаете почему ? ссылки выше!

даже на картинке "вашей" указанно где контроллер шлет сигнал, а где просто "отпускает" pull up

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Мля, вы отлезете? Юзается у меня pull-up, сто лет уже. Вам этого достаточно? К чему вы докопались-то? К несуществующему КЗ? Вы ни одного довода не слышите, не читаете, что вам пишут, от слова "вообще". Я же говорю - чистый Логик, может, это он перелогинился?

Повторюсь, если не доходит с трёх раз: КЗ НЕ БУДЕТ, понимаете? Почему - я писал выше, неоднократно. Почему безопасно переводить линию на выход и писать туда уровни и когда это делается - тоже писал. Вам похер мороз, похоже, а меня от таких невменяшек немного подбешивает, по жизни. Поэтому скажу как на духу - идите нахер со своими говноподелками в виде "библиотек" - вот уж где дичь, так дичь.

Lion777
Offline
Зарегистрирован: 20.05.2016

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

---

Вот кусок из твоего гавнокода

 while ((*PIR & bit) == LOW )//while(digitalRead(pin) == LOW) // читаем, пока низкий уровень на пине
  {
    if(!--tmout_guard)
     return answer; // таймаут поймали
  }
  tmout_guard = mstcc;
  while ((*PIR & bit) != LOW )//while(digitalRead(pin) == HIGH) // читаем, пока высокий уровень на пине
  {
    if(!--tmout_guard)
     return answer; // таймаут поймали
  }

тут закомментированны строки или твой мозг не понимает, что такое while ((*PIR & bit) == LOW )

 while ((*PIR & bit) != LOW )//while(digitalRead(pin) == HIGH) // читаем, пока высокий уровень на пине

это значит, что ты раннее так же использовал digitalRead(), но сейчас ты стал пиздц умным ))) и у кого-то гавнокод, а у тебя - нет ))), вот и звездная болезнь на лицо..

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

конечно принимается критика, адекватная, а не как у дрочуна одного ))), с тонкостями пока мало знаком, 

все не как не отпустит ? )))) яж тебя имел ввиду, пока ты посты правил и в гугл ходил ))) ладно проехали...

 

по текущему срачу соглашусь с Дракулой, в общем случае да, в конкректном - пох!!

только если нуб внешнюю подтяжку +5 не поставит, твой код не работает, код приведенный DIYMan сработает.

ща про гогвнокод сочиню....

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

говнокод номер раз 

/*** Метод считывания данных на шине 1-Wire ***/
uint8_t  MyOneWire::masterRead()
{
	uint8_t bit;
	// читаем ответ, прижимаем к 0 на от 1мкс и до < 15мкс слушаем ответ
	delayMicroseconds(60);
	pinMode(pinIO_, OUTPUT);
	delayMicroseconds(4);
	pinMode(pinIO_, INPUT); // отпускаем и до  < 15мкс смотрим ответ - 0 или 1
	delayMicroseconds(4);

	if (digitalRead(pinIO_) == LOW)
	{
		bit = 0x00; // возвращаем 0
	}
	else
	{
		bit = 0x01; // возвращаем 1
	}
	//delayMicroseconds(68);
	return bit;
}

зачем uint8_t bit ?

говнокод медленно превращается ....

/*** Метод считывания данных на шине 1-Wire ***/
uint8_t  MyOneWire::masterRead()
{
	// читаем ответ, прижимаем к 0 на от 1мкс и до < 15мкс слушаем ответ
	delayMicroseconds(60);
	pinMode(pinIO_, OUTPUT);
	delayMicroseconds(4);
	pinMode(pinIO_, INPUT); // отпускаем и до  < 15мкс смотрим ответ - 0 или 1
	delayMicroseconds(4);
        return digitalRead(pinIO_);
}

 

Lion777
Offline
Зарегистрирован: 20.05.2016

Ну питухи солидарности будут еще долго кукарекать )))

---

bit там тестировалась часть кода, забылось переправить на return

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

говнокод номер два

// Метод определения точки росы
float DHT::dewPoint()
{
	if (temperature == 255 && humidity == 255)
		return 255;
	float
		a = 17.27,
		b = 237.7,
		T = (float)temperature,
		RH = (float)humidity / 100;

	return (b * ((a * T) / (b + T) + log(RH))) /
		   (a - ((a * T) / (b + T) + log(RH)));
}

приведение float к float зачем ?

тады надо 

return (float) (b * ((a * T) / (b + T) + log(RH))) /
		   (a - ((a * T) / (b + T) + log(RH)));

и почему нет this-> как в коде выше

		case DHT11: 
		{
			this->humidity = data[0];
			this->temperature = data[2];
			break;
		}

уже не нужно ? или вообще не нужно ? или еще чего ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Ну питухи солидарности будут еще долго кукарекать )))

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

Lion777
Offline
Зарегистрирован: 20.05.2016

bit, float, this там переделывал код и не успел убрать все, это не проблема и от этого поведение самого кода не изменится 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Ну питухи солидарности будут еще долго кукарекать )))

---

bit там тестировалась часть кода, забылось переправить на return

ну да,  ну да .

даташит до конца непрочитал.... а говнокод выложил.

 

Lion777
Offline
Зарегистрирован: 20.05.2016

а че ты питух ожидал услышать когда кукарекаешь ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я так понимаю замечания (критика) принята ?

Lion777
Offline
Зарегистрирован: 20.05.2016

эту питушиную критику, ты называешь критикой ?

все не как не отпустит ? )))) яж тебя имел ввиду, пока ты посты правил и в гугл ходил ))) ладно проехали...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

у нас в Роccии слово "питух" пишется через "е"

https://ru.wikipedia.org/wiki/Петух

кокое отношение это имеет ко мне ? 

ты перешел на личности ?

Lion777
Offline
Зарегистрирован: 20.05.2016

Вас это коробит ? Оскарбляет ? Вот почитай сначала как ты ко мне обратился, а потом о личностях спрашивай.

Строят из себя творцами от бога ))), выделываются, вместо адекватного ответа, за этот высер тебе спасибо сказать ? )))

"все не как не отпустит ? )))) яж тебя имел ввиду, пока ты посты правил и в гугл ходил ))) ладно проехали..."

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

говнокод номер три

фукции 

uint8_t DHT::getDataDHT()

и 

int MyOneWire::resetPresence()

чего то возвращают, как догадатся что они возпращают ?

даже общепринятое в С сравнение результата с нулем (ой мля я опять по живому) ничего не дает 

прокомментируй плиз...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

пследнее слово сочетание (мое) " ладно проехали..." ,у нас в России, трактуется как - примерение сторон.

по делу есть что сказать или будем обиды обсуждать ?

Lion777
Offline
Зарегистрирован: 20.05.2016

скетче с примером написанно, что возвращает getDataDHT()

/*
   * Ошибки: 0   - без ошибок
   *         1-4 - таймаут
   *         5   - неверная контрольная сумма
   * если метод getDataDHT() возвращает ошибку,
   * то все данные возвращают 255
   */
 
int MyOneWire::resetPresence()
так же возвращает ошибки: 250, -60 это таймауты, если 1 значит без ошибок, так написанно потому что тестировалось, поэтому и такие данные.
согласен, надо было указать, что возвращает, я не планировал куда-то это выкладывать, таких библиотек полно, я для себя тренировался.
Lion777
Offline
Зарегистрирован: 20.05.2016

те издержки, что вы указали это просто следы тестирования, меня больше интересовало правильно ли использовать методы pinMode(), digitalWrite(), digitalRead(). Так, да, много муссора оставил, переделывал под DHT22, от прежнего осталось float и т.д. муссор уберу

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну надо объявить их в дефайны ошибок, а то кто зноет что такое 2 или 3. 

ну хорошо с getDataDHT() понятно, а что с resetPresence()

может всетаки ноль в конце вернуть ?
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

те издержки, что вы указали это просто следы тестирования, меня больше интересовало правильно ли использовать методы pinMode(), digitalWrite(), digitalRead(). Так, да, много муссора оставил, переделывал под DHT22, от прежнего осталось float и т.д. муссор уберу

если чесно, из за этого все и началось...

делаешь свою библу, постулат - не используй других библ.

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

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

 

Lion777
Offline
Зарегистрирован: 20.05.2016

 resetPresence возвращает ошибки, если не 1. 250 и -60 это таймауты, такие значение, не должны быть, тестил и так осталось, так и с 0 в getDataDHT(), это приведу в порядок, согласен, набо было сразу так сделать.

Но меня интересовало pinMode, digitalRead, использвание micros() для подсчета времени в цикле, например.

---

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

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

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

ну я не хочу срачь опять разводить,  но завести ветку с громким названием

"Написание библиотек для Arduino IDE" должно было человека подготовить к критике, но на первый же пост оветил ДедСимен и вас/тебя эта та сильно задело. а ща столько оплиух накидали...

у меня куча СВОИХ библ и под пики,аврки,стмки но я как то стисняюсь их тут или еще где то выкладывать (хотя как говорится они все рабочие) потому что Егений, сто пудово найдет изъян, а еще кто нибудь может послать...

а еще хлеще, вообще запретить ! ))) 

Lion777
Offline
Зарегистрирован: 20.05.2016

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

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну вот по делу, у тебя код

	// инициализация по шине 1-Wire, посылаем сигнал сброса
	pinMode(pinIO_, OUTPUT); // прижимаем шину к 0
	delayMicroseconds(480); // ... на 480мкс
	pinMode(pinIO_, INPUT); // отпускаем к 1
	delayMicroseconds(60); // ... и ждем 15-60мкс заряжаем конденсаторы

почему ты так игнорируешь 

PinMode(pin, INPUT_PULLUP); // переводим пин на чтение

??

ведь нибудь  у тебя внешней подтяжки - датчикв в ауте, так ?

честно, я тоже не совсем понимаю, зачем выставлять HIGH на выход, а потом переводить пин в инпут с подтяжкой, по сути получая тот же HIGT

  digitalWrite(pin,HIGH); // поднимаем линию
  delayMicroseconds(40); // ждём 40us, как написано в даташите
  PinMode(pin, INPUT_PULLUP); // переводим пин на чтение

я бы переписал так

  PinMode(pin, INPUT_PULLUP); // переводим пин на чтение // поднимаем линию
  delayMicroseconds(40); // ждём 40us, как написано в даташите

 

Lion777
Offline
Зарегистрирован: 20.05.2016

да я делал так вначале, для перестраховки отсутствия подтягивающего резистора, но встроенный 20кОм и датчик не сможет нармально работать на дальних расстояниях ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

это была "задача" в выложеной тобой "библиотеке" ?

ты это, не озвучивал, вилять не принято в приличном обществе....