Почему цифровой вывод не читает ON от кнопочных переключателей, подключенных к 5 В и понижающему резистору 10 кОм?
Вот моя схема:
И код:
//контакты
const int control1 = 2;
const int control2 = 3;
const int enable = 9;
const int pinDirection = 4;
const int pinOnOff = 5;
const int pot = A0;
//состояния
int stateOnOff = 0;
int stateOnOffPrev = 0;
int stateDirection = 0;
int stateDirectionPrev = 0;
int motorEnabled = 0;
int motorSpeed = 0;
int motorDirection = 1;
void setup(){
pinMode(pinDirection, INPUT);
pinMode(pinOnOff, INPUT);
pinMode(control1, OUTPUT);
pinMode(control2, OUTPUT);
pinMode(enable, OUTPUT);
digitalWrite(enable, LOW);
Serial.begin(9600);
}
void loop(){
stateOnOff = digitalRead(pinOnOff);
delay(10);
stateDirection = digitalRead(pinDirection);
motorSpeed = analogRead(pot)/4;
if(stateOnOff != stateOnOffPrev){
if(stateOnOff == HIGH){
motorEnabled = !motorEnabled;
}
}
if(stateDirection != stateDirectionPrev){
if(stateDirection == HIGH){
motorDirection = !motorDirection;
}
}
Serial.println(stateDirection);
if(motorDirection == 1){
digitalWrite(control1, HIGH);
digitalWrite(control2, LOW);
}else{
digitalWrite(control1, LOW);
digitalWrite(control2, HIGH);
}
if(motorEnabled == 1){
analogWrite(enable, motorSpeed);
}else{
analogWrite(enable, 0);
}
stateDirectionPrev = stateDirection;
stateOnOffPrev = stateOnOff;
}
Как видите, переключатель на контакте 5 контролирует включение двигателя, а потенциометр контролирует скорость двигателя. Оба работают.
Однако, когда переключатель на контакте 4 замкнут, переменная stateDirection
по-прежнему имеет значение 0 или цепь разомкнута. При его нажатии должно измениться направление вращения двигателя через Н-мост. Я перепробовал все, что мог: новые переключатели, более высокое сопротивление. Единственный раз, когда он читал ВЫСОКИЙ, это когда я буквально подключил переключатель к GND.
Последовательный номер отображает stateDirection
как бесконечную цепочку нулей.
И, наконец, схемы из оригинального проекта.
Спасибо.
**PS: Простите за отсутствие комментариев! Но я думаю, что хороший Arduino-программист в комментариях не нуждается. **
@Roman, 👍5
Обсуждение2 ответа
когда переключатель на контакте 4 замкнут, переменная stateDirection все еще имеет значение 0 или цепь разомкнута.
Вы могли бы включить подтягивание на этом выводе: при номинальном значении 50 кОм, понижение на 10 кОм находится на пороге перехода на низкий логический уровень.
решение?
1) отключить подтягивание; 2) используйте более сильное понижение; 3) избавиться от тяги вниз и полагаться только на подтягивания. ...
Если при обходе переключателя и замыкании на землю он показывает низкий уровень... Значит, либо неисправен переключатель, либо, возможно, просто неправильная ориентация переключателя.
Изменить: если GND по логике устанавливает высокий уровень на контакте 5, тогда ваша кнопка должна перейти на GND и включить резистор на 5 В. На данный момент по вашей схеме все наоборот.
- digitalRead не читает входной контакт ESP8266-01
- Отправка цифрового сигнала с одного Arduino на другой для запуска события
- Отправка информации (например, строки) через цифровые контакты
- Нужна помощь с программой для кнопки смены отображения на OLED-дисплее
- Управление двигателем Arduino Uno с помощью 2 реле, 2 концевых выключателей и Bluetooth. Вперед Назад Стоп
- Отправка цифрового сигнала с одного arduino на другой
- Можно ли использовать скользящий переключатель без резистора?
- Светодиод на том же контакте, что и тумблер, не горит
Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в чат](http://chat.stackexchange.com/rooms/57189/discussion-on-question-by-roman-why-digital-pin-not-reading-on-from-push- кнопка)., @Nick Gammon
Что, если вы используете пустой макет и вставляете только кнопку и резистор? И заставить ваш код снова и снова печатать состояние кнопки?, @Paul