проблема с пинами

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

Есть простой скетч для примера

int dv = A1;
int AUT5 = 2;

void setup()
{
Serial.begin(9600);
pinMode(AUT5, OUTPUT);
}
void loop()
{
int D = digitalRead(dv);
  if(D == LOW ) {digitalWrite(AUT5, LOW);}
  if(D == HIGH ) { digitalWrite(AUT5,HIGH ); delay(2000); }
}

если подать на А1 наприжения,то на пине 2 будет 5в

В моём случаи даже если пальцем прикаснуться то этот HIGH срабатывает,пин просто реагирует на малейшее прикосновения всего кроме полнейшего диэлектрика.Может у меня ардуино накрылась?

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

На водки. Вход надо настроить с паттяжкой.

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

а можно попадробней для чайника))?мне от GND резистор этак на  15кОм пустить?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

pinMode(dv, INPUT_PULLUP);

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

пробовал.тоже самое выходит

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нуууу.... чюдеса случаюца...

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

сделал так

int dv = A1;
int AUT5 = 2;

void setup()
{
Serial.begin(9600);

pinMode(dv, INPUT_PULLUP);
pinMode(AUT5, OUTPUT);
}
void loop()
{
int D = digitalRead(dv);
  if(D == LOW ) {digitalWrite(AUT5, LOW);}
  if(D == HIGH ) { digitalWrite(AUT5,HIGH ); delay(2000); }
}

 

теперь на 2 пине всегда +5.Либо я дурак либо лыжи не едут)

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

у меня: ардуино нано подкл. к компу,на пине gnd и D2 сидит диод(с резист.)ВСЁ.первый скетч при касании даже пальцем к А1 -диод горит.По второму скетчу (где pinMode(dv, INPUT_PULLUP)) -диод горит постоянно .
Что не так?(((

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

а нужно что бы диод горел от сигнала хотябы 1 вольт,а не от микро вольтов)) или дажо нано)

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ну а как ты хотел ? У тебя кнопка подключена к аналоговому входу. И в условии D=digitalRead(dv).
Т.е. D при любой наводке true.
Если подтягивает его INPUT_PULLUP, то там всегда будет 5в, и для управления надо с кнопки подавать на него 0(gnd), и в программе это учитывать( ну или сразу инвертировать сигнал, примерно так
D=!digitalRead(dv);
Ещё поди и кнопка сенсорная ?

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

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

Если поставить D=!digitalRead(dv); то работает,но от gnd но мне надо что бы работала от + сигнала(((

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Тогда подтягивающий резистор ставь 10-20 кОм.
И если использование аналогового пина принципиально , а подтягивать неохота, то пиши так
D=analogRead(dv);
if(D>=x){digitalWrite(AUT5,LOW);}

if(D меньше х) (знак меньше неадекватно движком форума воспринимается){digitalWrite(AUT5,HIGH;}

Где х-порог нужной чувствительности, на палец не срабатывает, на кнопку да.(можешь в мониторе подглядеть значения).
Подтягивающий резистор-между пином и gnd

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

Vlad-i-mir пишет:

 

теперь на 2 пине всегда +5.

а что вас в этом удивляет? Так и должно быть.

Нет никакой "проблемы с пинами".

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

int D=analogRead(A1);
if(D"знак меньше"=400){digitalWrite(AUT5,LOW);}
if(D>=400){digitalWrite(AUT5,HIGH);}

+подтяг. 10кОМ

спасибо заработала)

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

Vlad-i-mir пишет:

int D=analogRead(A1);
if(D"знак меньше"=400){digitalWrite(AUT5,LOW);}
if(D>=400){digitalWrite(AUT5,HIGH);}

+подтяг. 10кОМ

спасибо заработала)

Во-первых, analogКead() - это из пушки по воробьям (он работает раз в 20 дольше digitalRead()), а во вторых, в Вашем втором варианте отсутствует delay() в одной из веток, что радикальным образом меняет поведение программы.

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

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

'[[ ghfd/я сделал так

int AUT1 = 2;//этот пин вкл. светодиод

void setup()
{

Serial.begin(9600);
pinMode(AUT1, OUTPUT);

}

void loop()
{

int L = digitalRead(10);// протинул от него резистор 10 кОМ на GND
  if(L == false) {digitalWrite(AUT1,LOW);}
  if(L == true) { digitalWrite(AUT1,HIGH ); }

delay(1000);

}

Теперь диод то вкл,то выкл,живёт своей жизнью ,но первые 10 сек работает

Vlad-i-mir
Offline
Зарегистрирован: 17.02.2018

вроде нашёл проблему резисто не 10 кОм поставил а 20 кОм