Только начал изучать ардуино и купил книгу где описаны основные моменты. но не могу понять один скейтч. И обьяснить некому.
Я не могу понять нескольких вещей в коде. Вот например :
void loop() {
// put your main code here, to run repeatedly:
val = digitalRead (BUTTON);
if ((val = HIGH) && (old_val = LOW)) {
state = 1 - state;
startTime = millis();
delay (10);
В переменную val попадает значение нажата кнопка или нет. К примеру она нажата, тогда здесь верно if ((val = HIGH) && (old_val = LOW) { . После нее в переменную state попадает каким то образом из выражения if ((val = HIGH) && (old_val = LOW) { то есть state = 1 - 1 и state = 0. Сама переменная state стандартная для ардуино, что она каким то чудом получила в себя данные от оператора if ??
startTime = millis(); Я не могу понять следуюий момент. НАпрмер при первом проходе петли millis отдает значение 300 мл.сек и сравнивает это значение с переменной startTime и получается что оно тоже приобретает значение 300. Тогда зачем их в этой строке вычитают друг из друга. Если с большой долей вероятности результат будет 0 ??
const int LED = 9;
const int BUTTON = 7;
int val = 0;
int old_val = 0;
int state = 0;
int brightness = 128;
unsigned long startTime = 0;
void setup() {
// put your setup code here, to run once:
pinMode (LED, OUTPUT);
pinMode (BUTTON, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
val = digitalRead (BUTTON);
if ((val = HIGH) && (old_val = LOW)) {
state = 1 - state;
startTime = millis();
delay (10);
}
if ((val = HIGH) && (old_val = HIGH)) {
if (state == 1 && (millis() - startTime) > 500) {
brightness++;
delay(10);
Во-первых, если вы хотите обсудить скетч, приводите его ПОЛНОСТЬЮ. Куски что вы цитируете - по-отдельности не имеют смысла, так как переменные возникают ниоткуда.
Во-вторых, в том куске что вы показали - несколько грубых ошибок и поэтому я очень сомневаюсь, что это пример из книжки.
Справа под сообщением. Возможно в вашем браузере она спрятана под тремя точками * * *
Вообще ни у кого больше проблем с редактированием не возникает, так что, как говорят англичане, “проблема на вашей стороне”.
Что касается “примера из книжки” - если вы взялись вручную переписывать код со страницы - то будьте внимательны, иначе можно насажать столько опечаток, что ничего работать не будет.
Сравните, например, эту строчку из книжки с тем что у вас в скетче
Обратите внимание, что = и == это СОВСЕМ не одно и то же.
С опечаткой понятно. Возможно когда писал сюда не копировал. И сделал опечатку. В IDE код загрузился в ардуино, соотвественно был скопилирован. Но у меня был вопрос не в работе самого скейтча. А в логике его работы.
Хорошо. Отлично. Но суть вопроса не поменялся никак Я только пару дней назад начал изучать. Понятно что большинство из вас работает с ардуино годами. И режет глаз простые ошибки. НО мне нужен ответ на мой вопрос, а не “замечать ошибки орфографии”
То, что код компилируется - совершенно не означает, что он будет работать так, как задумано.
Например разницу между =и == компилятор ошибкой не считает и вам ее не подскажет.
я понял спасибо. буду впредь аккуратнее и проверять. НО вопрос по логике так и остался у меня.
В переменную val попадает значение нажата кнопка или нет. К примеру она нажата, тогда здесь верно if ((val = HIGH) && (old_val = LOW) { . После нее в переменную state попадает каким то образом из выражения if ((val = HIGH) && (old_val = LOW) { то есть state = 1 - 1 и state = 0. Сама переменная state стандартная для ардуино, что она каким то чудом получила в себя данные от оператора if ??
startTime = millis(); Я не могу понять следуюий момент. НАпрмер при первом проходе петли millis отдает значение 300 мл.сек и сравнивает это значение с переменной startTime и получается что оно тоже приобретает значение 300. Тогда зачем их в этой строке вычитают друг из друга. Если с большой долей вероятности результат будет 0 ??