Цифровые пины работают не корректно

Rolland2
Offline
Зарегистрирован: 10.04.2018

После долгих экспериментов на дуине, появилась проблема: самопроизвольное нажатие кнопки подключенной к цифровому пину (вроде 7 не важно). Долго размышляя над проблемой и меняя прошивку, пришел к выводу , что с моей дуиной, что то не так. Написал тестовую прошивку :

unsigned long butt;
void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  Serial.println("Привет Александр");}
void loop() {
  butt = analogRead(8);
 if (butt > 0) { Serial.println(butt);}
delay(250);}

И выяснилось, что все цифровые пины от 2 до 13 (1 не проверял) выдают высокое значение данных: 

374
348
372
343
370
339
368
348
364
381
387
379
380
Но при таком же тесте аналоговых пинов (с А0 по А5) значения равны нулю, а при закорачивании на +5 вольт выдает высокое значение.
Пожалуйста скажите, что с моей дуиной не так или что не так со мной :)
Rolland2
Offline
Зарегистрирован: 10.04.2018

При том же тесте аналогового пина А0 значение = 0 , при закорачивании на +5 вольт = 1018 +\- , а при закорачивании на +3.3 вольт = 650 +\-

 

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

Rolland2 пишет:

Пожалуйста скажите, что с моей дуиной не так или что не так со мной :)

Вам тоже в комплект резисторов не положили? См. https://www.arduino.cc/en/Tutorial/button

Rolland2
Offline
Зарегистрирован: 10.04.2018

Изначально кнопку подключал через резистор 10 килоом подтянутый к земле.

 

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

Значит замыкание где-то происходит. Или скетч неправильный. 

Предваряя вопросы: analogRead() в данном случае на самом деле меряет напругу не на 8-м диджитальном, а пытается подключить АЦП к 8-му аналоговому. 

nik182
Offline
Зарегистрирован: 04.05.2015

Да уж, жертвушки ЕГЭ, analogRead(8) это чтение температурного датчика внутри микросхемы. Поздравляю. Температура померяна.

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

Rolland2 пишет:
Написал тестовую прошивку :

unsigned long butt;
void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  Serial.println("Привет Александр");}
void loop() {
  butt = analogRead(8);
 if (butt > 0) { Serial.println(butt);}
delay(250);}

Не понял, Вы прочитали текущую температуру (не уверен, что так её читать можно, но, похоже, что можно). И что? Проблема-то в чём?

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

sadman41 пишет:
а пытается подключить АЦП к 8-му аналоговому.
И вполне успешно это делает, возвращая температуру чипа. Может а wiring это не пройдёт, но кажется, всё там нормально проходит и это действительно температура.

b707
Offline
Зарегистрирован: 26.05.2017

ТС пишет, что проверял так все пины до 13-ого. Ну пусть аналоговый 8 - температура. а что такое аналоговый пин 9, 10, 11?

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

b707 пишет:

ТС пишет, что проверял так все пины до 13-ого. Ну пусть аналоговый 8 - температура. а что такое аналоговый пин 9, 10, 11?

Вообще-то ТС не написал что у него за ардуина, потому и температура и всё остальное - кофейная гуща,

Но пины №№  9, 10, 11 (равное как и  100500) - берутся младшие три бита (pin & 0x07); - а что там будет - сами считайте.

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну так померяйте напряжение прям на пине контроллера,если причина не в вышеуказаном.

Rolland2
Offline
Зарегистрирован: 10.04.2018

Друзья, спасибо, что указали на мою тупость и помогли узнать чутка больше про дуину.

Тему можно закрыть ))