#26 Re: Апаратні питання » Как повлияет удлинение кабеля для датчика температуры Sensor-DS18B20? » 2017-03-20 03:15:44

lkj

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

#30 Re: Апаратні питання » помогите выбрать оборудование » 2016-10-25 18:49:43

lkj

Это похоже на рекламу комплектующих) Вы, комплектующие выбрали, и не плохие)

#32 Re: Програмування Arduino » Включение выключение нагрузки с отсрочкой » 2016-10-19 18:29:53

lkj

Отсчет таймера  millis(); Отсчет времени по срабатыванию геркона на открытие двери, и отсчет по срабатыванию геркона при закрытии двери.

#33 Re: Програмування Arduino » Включение выключение нагрузки с отсрочкой » 2016-10-19 17:22:09

lkj

Здеся нужно смотреть, что за тепловая завеса? Как часто проскальзывают через дверь?
Вдруг тепловую завесу нельзя часто включать.

#34 Re: Апаратні питання » Електронний перемикач (не реле) » 2016-10-13 15:02:05

lkj

Вообще-то, схема включения нагрузки в сеть 220В. Даже диммер можно замутить. T4 - оптосимистор, T1 - симистор

#37 Re: Програмування Arduino » Программа с кнопкой (короткое нажатие и длиное нажатие) » 2016-08-13 17:03:40

lkj
qwone пише:

Я не понял, что вы хотели сказать в последнем сообщении?

Для отчета времени вы пишите last_millis = millis() при выходе из функции опроса кнопки.
Получается, если кнопка не нажата или нажата, то вы запоминаете время  last_millis = millis() и выходите из функции. Где-то в коде после вызова нескольких функций вы снова вызываете botton() для определения нажатой кнопки. В то время значение счетчика millis()  уже  больше по сравнению last_millis.
……..
while (digitalRead(buttonPin) == 0);
delay(30);
……..
Цикл while будет выполняться до тех пор пока не будет отжата кнопка,  выход из цикла будет, когда кнопка отжата, т.е состояние кнопки было уже прочитано в цикле, поэтому
delay(30)  лишнее

за это время счетчик  millis() также увеличится и его значение будет больше

last_millis содержит меньшее значение времени по сравнению к millis(), потому что время было  записано при выходе из функции
……..
if (last_millis+300 > millis()){ // короткое нажатие меньше 0.30 сек
    //Serial.println(millis()-last_millis);
    last_millis = millis();
    return 1;}
last_millis = millis(); // длинное нажатие больше 0.30 сек
    return 2;
……..
Это условие не корректное, потому что если  (last_millis+300 > millis()) будет меньше, чем  millis(), то выполняется return 2, это будет считаться “длиное” нажатие кнопки, а было на самом деле “короткое” нажатие кнопки.

Правильнее запоминать в самом начале этой функции  last_millis = millis(), а в условии прошедшее время вычитать из текущего millis().

#38 Re: Програмування Arduino » Программа с кнопкой (короткое нажатие и длиное нажатие) » 2016-08-13 11:16:38

lkj
qwone пише:

Нажимаешь коротко сообщение "Short press" длиное "Long press".

const int buttonPin=2; // вывод кнопки 0 нажата 1 нет
uint32_t last_millis; // переменные: последний  millis

uint8_t botton(){

    /* Обратите внимание!  При первом вызове этой функции last_millis = millis() в Setup 
	потом в last_millis будет запоминаться прошедшее время для нового отсчета в этой       
        функции при
        выходе из функции */

    // Правильнее запоминать в самом начале этой функции  last_millis = millis()
	
    if (digitalRead(buttonPin) == 1){ //если кнопка не нажата, 
	 last_millis = millis();	           //то запоминаем время и    
	return 0;}					   //выход из функции с возвратом кода 0
	
	/* запоминать прошедшее время для нового отсчета  не следует при выходе из функции,
	    потому что будет сильно отставать от millis()
            т.е last_millis = millis() в то время как millis() увеличивает свое значение 
            в loop или в другой функции
            до вызова botton() соответственно всегда будет millis() больше last_millis
	
	/* Получается, в данном коде, для корректной работы перед вызовом botton() нужно 
            запоминать текущее время last_millis = millis(), иначе значение millis() будет больше
	    и условие не сработает
	    if (last_millis+300 > millis()) */
	
	//предполагаем, что кнопка нажата
	delay(30); / * приостановить программу на 30 миллисекунд 
                            это будет программное подавление дребезга кнопки */
	/* в цикле while подождать пока не будет отжата а кнопка,
            но кнопка  может быть нажата сколько угодно долго */
	while (digitalRead(buttonPin) == 0); 
	delay(30); /* приостановить программу на 30 миллисекунд это будет программное подавление 
                           дребезга после отжатия кнопки */
	//Кнопка уже отжата, delay - лишнее
	//поэтому  это условие не сработает, еще 2 х delay(30) дадут задержку 60 миллисекунд 
	
	if (last_millis+65 > millis()){ // ложное срабатывание
		//Serial.println(millis()-last_millis);
		last_millis = millis();
	return 0;}
	
	//не правильное условие, что если last_millis+300 > millis() будет меньше  
	if (last_millis+300 > millis()){ // короткое нажатие меньше 0.30 сек
		//Serial.println(millis()-last_millis);
		last_millis = millis();
	return 1;}
	//Serial.println(millis()-last_millis);
	last_millis = millis(); // длинное нажатие больше 0.30 сек
	return 2;
};

void setup()
{
	Serial.begin(9600); // Запускаем последовательный порт
	pinMode(buttonPin, INPUT_PULLUP); // вывод на ввод с подтягивающим резистром
	last_millis = millis();   
}

void loop()
{
  switch (botton()) {
	  case 1:  Serial.println("Short press");
	  break;
	  case 2:  Serial.println("Long press");
	  break;
  }

}

#39 Re: Програмування Arduino » Программа с кнопкой (короткое нажатие и длиное нажатие) » 2016-08-12 23:41:45

lkj
vvr пише:
lkj пише:

qwone, Смотри на свой бред и исправляй. Если тебе нравиться, то можешь оставить.
А пока это ты “трепло”.

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

ну а если хаять хочется то покажи что то лучшее или правильнее, иначе пустая трепня))))

Вы, наверное, прикалываетесь smile

#40 Re: Проекти » Большой робот на радио управлении » 2016-08-10 17:31:24

lkj

Классно! Такой градус робот взял без проблем. А имя роботу придумали? smile

#41 Re: Програмування Arduino » Программа с кнопкой (короткое нажатие и длиное нажатие) » 2016-08-10 15:06:24

lkj

qwone, Смотри на свой бред и исправляй. Если тебе нравиться, то можешь оставить.
А пока это ты “трепло”.

#45 Re: Апаратні питання » Прошу совета для старта » 2016-08-01 21:07:37

lkj

Если есть возможность можете сделать свою отладочную плату, какую хотите.
Программатор можно http://arduino-ua.com/prod396-Programmator_USBASP_AVR
Или такой как советует Андрей. В качестве программы программирования микроконтроллера  можно avrdude  - используется ARDUINO IDE.
Плату взять ARDUINO UNO можете программировать как ARDUINO так на СИ.
Этого контроллера хватит на многие проекты.

#46 Re: Апаратні питання » Прошу совета для старта » 2016-08-01 17:46:16

lkj
anezhyvyi пише:

Что я хочу:
  - Приобрести все что мне может понадобиться для программирования AVR ( я не уверен что понимаю вопрос до конца )
   - Отладочная плата ( или как там называется ) -- какая именно? Мне пока интересны ATMel Tiny ( для начала интересны проэкты предельно простые, типо мерцания светодиодов )
   - Микроконтроллеры, с ними вроде понятно но все же не до конца, что посоветуете для самого простого проекта?
P. S. Если нужна дополнительная информация я с радостью все объясню. Это мой первый топит в данной теме.

А почему вы выбрали Tiny а не Arduino. Просто занятно.  Плат Arduino очень много, ничего не нужно паять.

#47 Re: Проекти » 3G антенна с стабилизацией по трем осям-типа трех осевого стедикама » 2016-07-25 15:40:33

lkj

Cобственно больше нужен компас и гироскоп. А еще если у вас есть софт модема, в нем посмотрите, отображается уровень сигнала  дБ. Предположим (возможно) когда уровень сигнала уменьшается, разворачиваем антенну модема в сторону Антенны 3G.

#49 Re: Програмування Arduino » термостат на DS18B20 » 2016-06-24 21:37:49

lkj

Так в скетче вообще не подключен DS18B20, а по скетчу измеряется температура с терморезистора.

#50 Re: Проекти » повороты на мотоцикл » 2016-06-24 21:36:49

lkj

Сделайте несколько независимых устройств, arduino  будет контролером.
К примеру,  для поворотов можно применить мультивибратор.

Підвал форуму