millis()
- Войдите на сайт для отправки комментариев
Ср, 20/07/2016 - 16:34
Имеется вот такой код:
// задаем константы
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 молчит.
Serial Monitor молчит, потому что в скетче нет ни одного Serial.print(); или Serial.println();
И не int t1, t2, а unsigned long. И не long counter - а unsigned long counter. Изучите тип возвращаемого функцией millis значения, плз.
DIYMan, раз уж мы потратились на 4 дополнительных байта для t1 и t2, нужно бы компенсировать за счет buttonState, ledPin и buttonPin :)
DIYMan, раз уж мы потратились на 4 дополнительных байта для t1 и t2, нужно бы компенсировать за счет buttonState, ledPin и buttonPin :)
За живое что ли задело? Подъ@бка не засчитана :) Единственное, с чем согласен, так это с тем, что для counter unsigned long избыточно, остальное - только правки авторского скетча, т.к. не совпадали типы.
Как можно заметить - это только правки, я тут не вываливал с хером наперевес готовое "суперкрутое" решение, как любят некоторые. Вот если вывалю такое же г. - тогда и спрОсите.
Исправленый мной вариант
// задаем константы 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); }