Начал учиться, но не могу понять, почему так работает?

Александр81
Offline
Зарегистрирован: 27.12.2020

Здравствуйте! Начал учиться работать с ардуино. Писать для неё код и всё такое! Но вот не могу понять, почему код работает не так, как я его пишу!

void setup()
{
  pinMode(7, INPUT_PULLUP);
  pinMode(3, OUTPUT);
 
}
 
void loop()
{
 
  if (digitalRead(7 == LOW)) // если нажата кнопка
  {
    digitalWrite(3, HIGH);  // включить светодиод
  }
  else                       // не нажата
  {
    digitalWrite(3, LOW);   // выключить светодиод
  }
 
}
 
Что я жду от кода, при включении пин 3(светодиод) не горит
при нажатии кнопки (пин 7 ) светодиод должен загорается.
Но на деле, светодиод сразу загорается!
Подскажите, где я ошибку сделал?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Александр81 пишет:

где я ошибку сделал?

Для начала, вот здесь.

А что до кода, то в строке №ХЗ закрывающая скобка не на месте стоит.

Green
Offline
Зарегистрирован: 01.10.2015

11 строка. Вставьте код правильно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Green пишет:

11 строка. 

Вы что, пальцем считали? Я вот написал "строка №ХЗ" :-)

Green
Offline
Зарегистрирован: 01.10.2015

Аха.)

Александр81
Offline
Зарегистрирован: 27.12.2020
void setup()
{
  pinMode(7, INPUT_PULLUP);
  pinMode(13, OUTPUT);

}

void loop()
{

  if (digitalRead(7 == LOW)) // если нажата кнопка
  {
    digitalWrite(13, HIGH);  // включить светодиод
  }
  else                       // не нажата
  {
    digitalWrite(13, LOW);   // выключить светодиод
  }

}

Простите, только что прочитал, как правильно вставлять код. 

а теперь по стороке, где именно ошибка?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Александр81 пишет:

а теперь по стороке, где именно ошибка?

Я же написал - закрывающая скобка не на месте.

Александр81
Offline
Зарегистрирован: 27.12.2020

ЕвгенийП пишет:

Александр81 пишет:

а теперь по стороке, где именно ошибка?

Я же написал - закрывающая скобка не на месте.

А как, вернее где именно её место?

И почему компилятор не ругается, если я не правильно её поставил? 

Евгений, прошу вас , можно немного подробней, чтоб я понял, что к чему.

Благодарю за то что помогаете мне.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Таак ...

Вы что сравниваете с LOW? Семёрку? У Вас именно так написано. Зачем? Точно не равно. А что Вы хотели сравнить с LOW? Можете ответить?

Александр81
Offline
Зарегистрирован: 27.12.2020

ЕвгенийП пишет:

Таак ...

Вы что сравниваете с LOW? Семёрку? У Вас именно так написано. Зачем? Точно не равно. А что Вы хотели сравнить с LOW? Можете ответить?

Я в условии пишу , что если считанный пин(7)  равен низкому уровню то далее код который должен выполниться.

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Александр81 пишет:

ЕвгенийП пишет:

Таак ...

Вы что сравниваете с LOW? Семёрку? У Вас именно так написано. Зачем? Точно не равно. А что Вы хотели сравнить с LOW? Можете ответить?

Я в условии пишу , что если считанный пин(7)  равен низкому уровню то далее код который должен выполниться.

Вот эта строка

if (digitalRead(7 == LOW)) // если нажата кнопка

должна выглядеть вот так

if (digitalRead(7) == LOW) // если нажата кнопка

Ничего не замечаете?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Александр81 пишет:

Я в условии пишу , что если считанный пин(7) 

Да, нет же! Не это Вы пишете. Чтобы функция digitalRead считала значение пина, ей нужно передать номер пина - это параметр функции. Посмотрите внимательно, и скажите что именно у Вас передаётся функции digitalRead в качестве номера пина?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тьфу блин! Хотел, чтобы человек сам дошёл! :-(((

Александр81
Offline
Зарегистрирован: 27.12.2020

v258 пишет:

Александр81 пишет:

ЕвгенийП пишет:

Таак ...

Вы что сравниваете с LOW? Семёрку? У Вас именно так написано. Зачем? Точно не равно. А что Вы хотели сравнить с LOW? Можете ответить?

Я в условии пишу , что если считанный пин(7)  равен низкому уровню то далее код который должен выполниться.

Вот эта строка

if (digitalRead(7 == LOW)) // если нажата кнопка

должна выглядеть вот так

if (digitalRead(7) == LOW) // если нажата кнопка

Ничего не замечаете?

Спасибо! Теперь я понял, где я ошибся!!!

 

Александр81
Offline
Зарегистрирован: 27.12.2020

ЕвгенийП пишет:

Александр81 пишет:

Я в условии пишу , что если считанный пин(7) 

Да, нет же! Не это Вы пишете. Чтобы функция digitalRead считала значение пина, ей нужно передать номер пина - это параметр функции. Посмотрите внимательно, и скажите что именно у Вас передаётся функции digitalRead в качестве номера пина?

 

ДА да, именно номер пина, япоказал как просто цифра, а не конкретно что это номер пина! Спасибо вам!

 

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

ЕвгенийП пишет:

Да, нет же! Не это Вы пишете. Чтобы функция digitalRead считала значение пина, ей нужно передать номер пина - это параметр функции. Посмотрите внимательно, и скажите что именно у Вас передаётся функции digitalRead в качестве номера пина?

Интересно, что компилятор на digitalRead(7 == LOW) не ругается, а выдает правильное true, компилятор обрезает всё лишнее после семёрки? А нет, всегда true выдаёт.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

ЕвгенийП пишет:

Тьфу блин! Хотел, чтобы человек сам дошёл! :-(((

Да ладно, ошибка слишком детская, сам он до утра искал бы, а все объяснения только сильнее бы его запутали ))

Вот подите объясните ему, что в реале данные считывались с нулевого пина, а не с седьмого ))

Александр81
Offline
Зарегистрирован: 27.12.2020

v258 пишет:

ЕвгенийП пишет:

Тьфу блин! Хотел, чтобы человек сам дошёл! :-(((

Да ладно, ошибка слишком детская, сам он до утра искал бы, а все объяснения только сильнее бы его запутали ))

Вот подите объясните ему, что в реале данные считывались с нулевого пина, а не с седьмого ))

Ребят, прошу вас, не судите строго, я ж только начал постигать язык программирования. Ну как мне ещё или у кого поинтересоваться, чтоб получалось с ним работать. Вот я к вам и пришёл, так сказать за первой помощью, буду в этом топике все вопросы задавать, набирать и обтачивать опыт!  

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

AndreyD пишет:

Интересно, что компилятор на digitalRead(7 == LOW) не ругается, а выдает правильное true, компилятор обрезает всё лишнее после семёрки? А нет, всегда true выдаёт.

Компилятор преобразует сроку digitalRead(7 == LOW) в digitalRead(0)

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

v258 пишет:

Вот подите объясните ему, что в реале данные считывались с нулевого пина, а не с седьмого ))

А, понял 6 == LOW это false и tx1, 7 == LOW это true и rx0.

Александр81
Offline
Зарегистрирован: 27.12.2020

v258 пишет:

AndreyD пишет:

Интересно, что компилятор на digitalRead(7 == LOW) не ругается, а выдает правильное true, компилятор обрезает всё лишнее после семёрки? А нет, всегда true выдаёт.

Компилятор преобразует сроку digitalRead(7 == LOW) в digitalRead(0)

Вот этого я тоже не знал, хорошая подсказка! Спасибо!

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

AndreyD пишет:

А, понял 6 == LOW это false и tx0, 7 == LOW это true и rx1.

Интересная трактовка. Значит 6 не равно нулю, а 7 равно? Как такое возможно? )))

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

v258 пишет:

AndreyD пишет:

А, понял 6 == LOW это false и tx0, 7 == LOW это true и rx1.

Интересная трактовка. Значит 6 не равно нулю, а 7 равно? Как такое возможно? )))

Чёт я не то сморозил )) LOW == 0, выражение a == LOW, где a != 0 всегда будет false.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

v258 пишет:

Как такое возможно? )))

Да, запросто! Синус вон в войну до пяти доходил! :-)

А если без шуток, то в языке Fortran IV такое было вполне возможно. Там был механизм, позволяющей константе (например, семёрке) присвоить любое число. И, что важно, это был не ляп компилятора, а свойство языка. Сделать компилятор в котором такое бы не проходило, было почти невозможно, т.к. при этом многое другое бы посыпалось.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Честно говоря, Фортран я в свое время так и не понял. Абсолютно ))

Александр81
Offline
Зарегистрирован: 27.12.2020

А вот ещё интересен вопрос, в герконе есть дребезг контакта или нет?

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Любые механические контакты подвержены

Александр81
Offline
Зарегистрирован: 27.12.2020

Понял, спасибо!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Александр81 пишет:

А вот ещё интересен вопрос, в герконе есть дребезг контакта или нет?

Герконы разные бывают. В ртутном - нет.