Нужно получить данные о состоянии выключателя

halfliffe
Offline
Зарегистрирован: 08.11.2020

Мне нужно получить данные о состоянии выключателя.
Для этого собираю элементарную схему:

Код:
 

int volumePin = A0;

void setup() {
  pinMode(volumePin, INPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(volumePin));
  delay(100);  
}

При замкнутом выключателе на порту - значение 1023.
А вот при разомкнутом - получается какое-то циклическое значение:
 

0
0
0
0
0
0
0
0
0
0
713
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
30
299
649
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
637
0
0
0
0
0
0
0
0

Объясните пожалуйста, почему так?
Что нужно сделать, что бы при разомкнутом выключателе был 0?
rkit
Offline
Зарегистрирован: 23.11.2016

Потому что ты полез собирать приборы не читая учебника?

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

halfliffe, Вы измеряете напряжение на контакте, который либо соединен с питанием, либо ни с чем не соединен. В первом случае, очевидно, Вы получаете 5 В, а что Вы надеетесь получить во втором случае?

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

Хотя, обычно делают наоборот: подтягивают контакт к питанию, а кнопкой замыкают на землю.

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

И какой смысл цеплять его на аналоговый вход?

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

v258 пишет:

И какой смысл цеплять его на аналоговый вход?

В данном случае - никакого.

Но обычно сначала нужно добиться работоспособности и только потом думать об оптимизации.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Аналоговый порт используют в том случае, если данные надо получать с  многопозиционного устройства, к примеру матрица кнопок, в вашем случае логичнее использовать цифровой порт

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А я так название темы прочёл, что вроде как нужно знать (включено/выключено) о выключателе, который к дуне вообще не относится. 
ТС - это Вам препод задание такое дал или сами пытаетесь ардуино «познать»?

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

andriano пишет:

Но обычно сначала нужно добиться работоспособности и только потом думать об оптимизации.

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

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

v258 пишет:

andriano пишет:

Но обычно сначала нужно добиться работоспособности и только потом думать об оптимизации.

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

Если для задачи без разницы, сколько времени будет затрачено (5 мс или 112 мс), а также не критичен объем кода, то какая разница?

Понимаете, байты или микросекунды, сэкономленные в одной прошивке, никак нельзя использовать в другой.

То, что "сразу надо писать правильно" - это, конечно, так. Только, чтобы написать правильно, нужно знать, как писать правильно, а это от рождения не приходит.

Поэтому приоритет усовершенствования кода именно таков:

- сначала добиваемся работоспособности,

- потом - оптимизируем по тем или иным критериям.

halfliffe
Offline
Зарегистрирован: 08.11.2020

Вот так заработало :-)
Так правильно?
Или нет?

int volumePin = 13;

void setup() {
  pinMode(volumePin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  Serial.println(digitalRead(volumePin));
  delay(100);  
}

То, что выключатель одной ногой замкнут на +5В, это нормально?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Троллинг однако )))

halfliffe
Offline
Зарегистрирован: 08.11.2020

ua6em пишет:

Троллинг однако )))

На всякий случай посмотрел раздел. "Песочница. Раздел для новичков". Да, вроде всё правильно.

Что не так?

sadman41
Offline
Зарегистрирован: 19.10.2016

Есть стандартный пример "Arduino button". Вы его методом тыка переизобретаете?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

halfliffe пишет:

Что не так?

Либо ты выложил не ту схему подключения, либо не тот код (сообщение #9). Или что в твоём понимании "заработало"? То, что оно выдаёт в мониторе порта одни единицы?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Выражение "Темно как у негра в шопе" возникло после того, как неграм дали свободу и они стали открывать магазиньчики (шопы по ихнему). А поскольку они экономили даже на освещении, то в этих шопах было темно.

Так и тут - как у негра в шопе. Темно че-то.

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

halfliffe пишет:

Вот так заработало :-)
Так правильно?
Или нет?

То, что выключатель одной ногой замкнут на +5В, это нормально?

Неправильно.

И даже, если вдруг показалось, что работает, то это ненадолго.

Выключатель нужно переключить с +5В на землю.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

halfliffe пишет:

ua6em пишет:

Троллинг однако )))

На всякий случай посмотрел раздел. "Песочница. Раздел для новичков". Да, вроде всё правильно.

Что не так?

ты же пишешь код осмысленно?
В одной строчке кода подтягиваешь пин к +5 вольт и кнопку подключаешь к +5вольт, смотрится это как троллинг в чистом виде )))