Таймер

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Подскажите, пожалуйста, что не так в программе? Я, видимо, не так понял оператор millis..

const int senD = 2;
const int led = 3;
unsigned long timing; // Переменная для хранения точки отсчета

void setup() {
    Serial.begin(9600);
    pinMode(senD, INPUT);
    pinMode(led, OUTPUT);
}

void loop(void){

if (senD == HIGH) {  // Считываю показания ДД. Если ДД сработал, то:
      timing = millis();  // Присваиваю переменной значение времени пройденного с момента запуска контроллера.
}

if (millis() - timing < 20000) { // Далее условие: если разница между временем с момента запуска контроллера и значением переменной менее 20сек, то:
      digitalWrite(led, HIGH); // Включаю свет.
}
}

sadman41
Онлайн
Зарегистрирован: 19.10.2016

В программе все так. А вот Вам зайти бы в "песочницу", первый пост почитать.

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Вы имеете ввиду  "читай перечень литературы"?)

b707
Онлайн
Зарегистрирован: 26.05.2017

ATAMAH пишет:

Вы имеете ввиду  "читай перечень литературы"?)

нет,

1)вставляй код правильно

2) грамотно формулируй вопрос

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Прошу прощения, не заметил. Исправляюсь.

Я в железе более мене разбираюсь. Собирал шкафы автоматики. В программировании только VisualBasic в универе.

Задача: Включать свет по датчику движения на заданный интервал времени. При этом, если датчик срабатывает повтороно - обнулять отсчет времени.

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

Вот что я написал начитавшись разных источников:

const int sensorD = 2;
const int led = 3;
unsigned long timing; // Переменная для хранения точки отсчета

void setup() {
  Serial.begin(9600);
  pinMode(sensorD, INPUT);
  pinMode(led, OUTPUT);
}

void loop(void) {

  if (sensorD == HIGH) { // Считываю показания ДД. Если ДД сработал, то:
    timing = millis();  // Присваиваю переменной "Таймер" значение времени на пройденного с момента запуска контроллера.
  }

  if (millis() - timing < 20000) { // Далее условие: если разница между временем с момента запуска контроллера и значением переменной "Таймер"  менее 20сек, то:
    digitalWrite(led, HIGH); // Включаю свет.
  }
}

При заливки данного скетча ничего не происходит, реле не срабатывает.

При этом,  если напрямую включаю свет по срабатыванию датчика, то все работает (просто не нравится что дискатека получается):

const int movPin = 2;
const int relPin = 3;

void setup() {
    Serial.begin(9600);
    pinMode(movPin, INPUT);
    pinMode(relPin, OUTPUT);
}

void loop(){
    int val = digitalRead(movPin);
    if (val)
        digitalWrite(relPin, LOW);
    else
        digitalWrite(relPin, HIGH);
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

у вас в первой же строке скетча переменной sensorD присваивается 2 и больше это значение в скетче не меняется. Оно никогда не станет HIGH

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ну то есть вместо

if (sensorD == HIGH) { // Считываю показания ДД. Если ДД сработал, то:

надо

if (digitalRead(sensorD)  == HIGH) {

А еще свет, то включается, а где он выключается?

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Так, я так понял, это я присваиваю второму входу тип данных и имя в программе.

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Ок. спасибо!

То есть надо добавить

else {
digitalWrite(led, LOW)
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

ATAMAH пишет:

Так, я так понял, это я присваиваю второму входу тип данных и имя в программе.

Похоже совет "почитай книжки" выше был верным, а то пишете откровенную фигню.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

ATAMAH пишет:

Так, я так понял, это я присваиваю второму входу тип данных и имя в программе.

Это не программируемый контроллер... нет тут никаких присвоений входам и т.п. Есть команды "считать со входа #.." и "установить значение на выходе #.."

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

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Ну я первый день пробую, буду читать.

ATAMAH
Offline
Зарегистрирован: 14.12.2018

Да, уже такие же ощущения посетили. Спасибо.

 

Спасибо всем за советы и уделенное внимание. Пробую, дальше.