Всегда определяет тот же вывод, что и HIGH, даже если он не подключен
Я тренируюсь с платой arduino UNO (я новичок), и я пытаюсь включить некоторые светодиоды в зависимости от того, какой аналоговый вывод подключен к 5V. Вот мой код:
int statusLed = 11;
int out1 = 2;
int out2 = 3;
int out3 = 4;
int out4 = 5;
int in1 = A0;
int in2 = A1;
int in3 = A2;
int in4 = A3;
int statusLedBrightness = 3;
int incBrillo = 3;
int fadeDelay = 5;
void blinkFade(int pin){
analogWrite(pin, statusLedBrightness);
statusLedBrightness = statusLedBrightness + incBrillo;
if (statusLedBrightness <= 0 || statusLedBrightness >= 255){
incBrillo = -incBrillo;
}
delay(fadeDelay);
}
void wait(){
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
digitalWrite(out3, LOW);
digitalWrite(out4, LOW);
blinkFade(statusLed);
}
void setup() {
// поместите сюда свой установочный код, чтобы запустить его один раз:
pinMode(out1,OUTPUT);
pinMode(out2,OUTPUT);
pinMode(out3,OUTPUT);
pinMode(out4,OUTPUT);
pinMode(in1, INPUT);
pinMode(in2, INPUT);
pinMode(in3, INPUT);
pinMode(in4, INPUT);
Serial.begin(115200);
}
void loop() {
// поместите сюда свой основной код для повторного запуска:
if (analogRead(in1)>=500){
Serial.println("1: ");
Serial.println(analogRead(in1)); //Выведите "1" и считайте вывод A0
turnOff();
digitalWrite(out1,HIGH);
}
else if (analogRead(in2)>=500){
Serial.println("2: ");
Serial.println(analogRead(in2));//Выведите "2" и считайте вывод A1
turnOff();
digitalWrite(out2,HIGH);
}
else if (analogRead(in3)>=500){
Serial.println("3: ");
Serial.println(analogRead(in3));//Выведите "3" и считайте вывод A2
turnOff();
digitalWrite(out3,HIGH);
}
else if (analogRead(in4)>=500){
Serial.println("4: ");
Serial.println(analogRead(in4));//Выведите "4" и считайте вывод A3
turnOff();
digitalWrite(out4,HIGH);
}
else{
Serial.println("Stand By");
wait();
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что когда я подключаю провод от 5 В к любому аналоговому контакту (от A0 до A3), он всегда запускает этот сегмент кода:
Serial.println("1: ");
Serial.println(analogRead(in1));
turnOff();
digitalWrite(out1,HIGH);
Насколько я понимаю, он обнаруживает, как если бы он всегда был A0, который подключен к 5V, но я не понимаю, почему это происходит или как это решить.
Это снимок экрана последовательного монитора, когда 5 В подключено к контакту A2. В нем должно быть напечатано "3:" и надпись [] 1
@Lucas Fernandez, 👍1
1 ответ
Лучший ответ:
Вы не показываете свою схему, но я уверен, что вы просто оставляете контакты Ax ОТКРЫТЫМИ, когда не подключаете их к своей линии +V. В этом случае они "плавают" и как таковые могут плавать ВЫСОКО или НИЗКО или практически где угодно. Что происходит, так это то, что когда вы подключаете +V к любому из них, это приводит к побочному эффекту вытягивания по крайней мере A0 вместе с ним, поскольку вы позволили ему плавать.
Здесь нужно сделать две вещи:
- Не допускайте перемещения строк и ожидайте детерминированного поведения. Привяжите их к +V или к ЗЕМЛЕ, когда вы ими не пользуетесь.
- Потяните линии Ax к + V или GND через резистор, например, 10 Ком. Это предотвратит их плавучесть и даст вам предсказуемые результаты.
- Почему значение analogRead уменьшается, когда я уменьшаю значение резистора?(Я использую digitalWrite(high) к положительной клемме резистора)
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
вот и все, добавление резисторов для подключения линий Ax к GND сделало это. Спасибо!, @Lucas Fernandez