millis()

Denchik200401
Offline
Зарегистрирован: 17.07.2016

Имеется вот такой код:

// задаем константы
const int buttonPin = 2;     // номер входа, подключенный к кнопке
const int ledPin =  13;      // номер выхода светодиода
 
// переменные
int buttonState = 0;         // переменная для хранения состояния кнопки
 int t1;
 int t2;
void setup() {
  Serial.begin(9600);
  // инициализируем пин, подключенный к светодиоду, как выход
  pinMode(ledPin, OUTPUT);     
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT); 
  
}
 
void loop(){
  // считываем значения с входа кнопки
  buttonState = digitalRead(buttonPin);
 
  // проверяем нажата ли кнопка
  // если нажата, то buttonState будет HIGH:
  if (buttonState == HIGH) {   
    // включаем светодиод   
   t1 = millis(); 
  }
  delay(70);
  if (buttonState == HIGH) {   
    // включаем светодиод   
    t2 = millis(); 
  }
  long counter = t2 - t1;
if (counter > 0 ) {
digitalWrite(ledPin, HIGH);
}
//Serial.print(counter);
}

И почему-то светодиод не загорается, а Serial Monitor молчит. 

Araris
Offline
Зарегистрирован: 09.11.2012

Serial Monitor молчит, потому что в скетче нет ни одного Serial.print(); или Serial.println();

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

И не int t1, t2, а unsigned long. И не long counter - а unsigned long counter. Изучите тип возвращаемого функцией millis значения, плз.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DIYMan, раз уж мы потратились на 4 дополнительных байта для t1 и t2, нужно бы компенсировать за счет buttonState, ledPin и buttonPin :)

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

andriano пишет:

DIYMan, раз уж мы потратились на 4 дополнительных байта для t1 и t2, нужно бы компенсировать за счет buttonState, ledPin и buttonPin :)

За живое что ли задело? Подъ@бка не засчитана :) Единственное, с чем согласен, так это с тем, что для counter unsigned long избыточно, остальное - только правки авторского скетча, т.к. не совпадали типы.

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

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

Исправленый мной вариант

// задаем константы
const int ledPin =  13;   // номер выхода светодиода HIGH горит/LOW потушен
const int btnPin = 2;     // номер входа, подключенный к кнопке  HIGH нажата/LOW отпущена
// переменные
unsigned long t1,t2,counter;
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);  // инициализируем пин, подключенный к светодиоду, как выход    
  pinMode(btnPin, INPUT);   // инициализируем пин, подключенный к кнопке, как вход
}
 
void loop(){
 while (digitalRead(btnPin) == LOW);  // ждем первое нажатие кнопки 
  t1 = millis(); 
  delay(70);
 while (digitalRead(btnPin) == LOW);  // ждем второе нажатие кнопки   
  t2 = millis(); 
  counter = t2 - t1;
digitalWrite(ledPin, HIGH);
Serial.print(counter);
}