поступающее напряжение с кнопки
Я использую этот простой код для 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 поступает определенное напряжение, мне интересно, почему и что причина этого?
@Med malik, 👍0
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 здесь у вас есть практический пример .
Обратите внимание, что есть другой, более простой способ сделать это. Если вместо установки вывода на INPUT вы установите его на INPUT_PULLUP, то внутри входная линия подключается через резистор к +5 Вольт. Затем, когда к контакту ничего не подключено, он читается как ВЫСОКИЙ. Вы подключаете свой вход к переключателю, а другой контакт переключателя подключаете к земле. Теперь, когда вы нажимаете переключатель, он заземляет входной контакт, опуская его на низкий уровень. Никакие резисторы не нужны, но это означает, что состояние вашего переключателя меняется на противоположное (ВЫСОКИЙ = переключатель не нажат, НИЗКИЙ = нажат)
- Определение того, была ли нажата и отпущена кнопка
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Как прервать функцию цикла и перезапустить ее?
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
это было вполне понятное объяснение, спасибо, мне удалось сделать то, что вы объяснили, но используя 2 резистора, такие же, как вы, и я добавил 100 Ом между контактом 2 и кнопкой переключателя, и все сработало отлично, @Med malik