поступающее напряжение с кнопки

Я использую этот простой код для Arduino:

const int buttonPin = 2;
const int ledPin =  13;      

int buttonState = 0;        

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin ( 9600 ) ;
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
    Serial.println ( buttonState ) ;
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println ( buttonState ) ;
  }
}

Это очень простая программа, я видел, как некоторые люди работают с резисторами, когда они используют кнопки, поэтому я хотел знать, почему я подключил одну сторону кнопки к контакту 2, независимо от того, подключил ли я другую стороны кнопки или нет источника 5 В, Arduino начал выдавать мне несколько единиц и нулей, поэтому светодиод мигает, так что по сути это означает, что от кнопки к контакту 2 поступает определенное напряжение, мне интересно, почему и что причина этого?

, 👍0


2 ответа


2

Я вижу, вы новичок в Arduino, поэтому начнем: 1) если вы говорите, что это работает, возможно, вы используете такую схему:

кнопка без заземления

Это не так уж и плохо, но у вас могут возникнуть проблемы. Объясняю:

1. Когда вы устанавливаете pinMode(pin,INPUT); вы говорите Arduino включить состояние высокого сопротивления на этом выводе: это эквивалентно резистору 100 МОм, включенному последовательно перед этим выводом, что хорошо для получения показаний датчика, но когда вы используйте переключатель, состояние/чтение этого контакта (ВЫСОКИЙ или НИЗКИЙ) является «плавающим», когда переключатель разомкнут, что приведет к непредсказуемым показаниям. Вот почему вам нужно использовать «понижающий» резистор, что означает, что вы понижаете значение этого контакта, когда переключатель ОТКРЫТ, используя GND в качестве опорного значения для LOW, чтобы вы были уверены, что оно понижается, когда переключатель разомкнут. Резистор также служит защитой (рекомендуется 10 кОм), когда переключатель ЗАКРЫТ, поскольку он останавливает протекание / сток сильного тока (!! контакт 5 В, подключенный к GND !!), без которого Arduino не может поддерживать (так называемое короткое замыкание).

2. В итоге у вас получится что-то вроде этого: кнопка с раскрывающимся меню Я бы лично поместил резистор и провод GND между кнопкой и проводом цифрового контакта. Надеюсь, я был полезен! Если вам нужна дополнительная документация, воспользуйтесь этими двумя ссылками:

https://www.arduino.cc/en/Reference/Constants ознакомьтесь с разделом "Определение цифровых выводов ". раздел "режимы"

https://www.arduino.cc/en/Tutorial/DigitalReadSerial здесь у вас есть практический пример .

,

это было вполне понятное объяснение, спасибо, мне удалось сделать то, что вы объяснили, но используя 2 резистора, такие же, как вы, и я добавил 100 Ом между контактом 2 и кнопкой переключателя, и все сработало отлично, @Med malik


1

Обратите внимание, что есть другой, более простой способ сделать это. Если вместо установки вывода на INPUT вы установите его на INPUT_PULLUP, то внутри входная линия подключается через резистор к +5 Вольт. Затем, когда к контакту ничего не подключено, он читается как ВЫСОКИЙ. Вы подключаете свой вход к переключателю, а другой контакт переключателя подключаете к земле. Теперь, когда вы нажимаете переключатель, он заземляет входной контакт, опуская его на низкий уровень. Никакие резисторы не нужны, но это означает, что состояние вашего переключателя меняется на противоположное (ВЫСОКИЙ = переключатель не нажат, НИЗКИЙ = нажат)

,