Ви не увійшли.
Датчик передает с измеренной температурой контрольную сумму CRC, по этой сумме можно проверять корректность принятой температуры
Всех с Новым Годом и Рождеством Христовым!
Например, вроде что-то такого
http://livefly.com.ua/boi-na-dronah/#drone
А в чем идея? Про какие Ик идет речь?
Зависти от задачи.
Это похоже на рекламу комплектующих) Вы, комплектующие выбрали, и не плохие)
IDE arduino
Файл -> Примеры -> LiquidCrystal -> HelloWordl
Отсчет таймера millis(); Отсчет времени по срабатыванию геркона на открытие двери, и отсчет по срабатыванию геркона при закрытии двери.
Здеся нужно смотреть, что за тепловая завеса? Как часто проскальзывают через дверь?
Вдруг тепловую завесу нельзя часто включать.
Вообще-то, схема включения нагрузки в сеть 220В. Даже диммер можно замутить. T4 - оптосимистор, T1 - симистор
что-то подобное https://youtu.be/NXvyFcXA0gc
arduino servo thermometer – поиск
http://www.letsarduino.com/project-14-s … c-arduino/
Я не понял, что вы хотели сказать в последнем сообщении?
Для отчета времени вы пишите 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().
Нажимаешь коротко сообщение "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;
}
}lkj пише:qwone, Смотри на свой бред и исправляй. Если тебе нравиться, то можешь оставить.
А пока это ты “трепло”.ты не прав...
если чел выкладывает свои наработки - спасибо ему.
а использовать их или нет - дело сугубо личное.ну а если хаять хочется то покажи что то лучшее или правильнее, иначе пустая трепня))))
Вы, наверное, прикалываетесь ![]()
Классно! Такой градус робот взял без проблем. А имя роботу придумали? ![]()
qwone, Смотри на свой бред и исправляй. Если тебе нравиться, то можешь оставить.
А пока это ты “трепло”.
Прикольно, нравится)))
Если есть возможность можете сделать свою отладочную плату, какую хотите.
Программатор можно http://arduino-ua.com/prod396-Programmator_USBASP_AVR
Или такой как советует Андрей. В качестве программы программирования микроконтроллера можно avrdude - используется ARDUINO IDE.
Плату взять ARDUINO UNO можете программировать как ARDUINO так на СИ.
Этого контроллера хватит на многие проекты.
Что я хочу:
- Приобрести все что мне может понадобиться для программирования AVR ( я не уверен что понимаю вопрос до конца )
- Отладочная плата ( или как там называется ) -- какая именно? Мне пока интересны ATMel Tiny ( для начала интересны проэкты предельно простые, типо мерцания светодиодов )
- Микроконтроллеры, с ними вроде понятно но все же не до конца, что посоветуете для самого простого проекта?
P. S. Если нужна дополнительная информация я с радостью все объясню. Это мой первый топит в данной теме.
А почему вы выбрали Tiny а не Arduino. Просто занятно. Плат Arduino очень много, ничего не нужно паять.
Cобственно больше нужен компас и гироскоп. А еще если у вас есть софт модема, в нем посмотрите, отображается уровень сигнала дБ. Предположим (возможно) когда уровень сигнала уменьшается, разворачиваем антенну модема в сторону Антенны 3G.
Attiny13 и DS18B20 вполне дружны.
Так в скетче вообще не подключен DS18B20, а по скетчу измеряется температура с терморезистора.
Сделайте несколько независимых устройств, arduino будет контролером.
К примеру, для поворотов можно применить мультивибратор.