Отправка цифрового сигнала с одного arduino на другой
У меня есть один arduino с двумя датчиками приближения, которые посылают два сигнала цифровой записи при обнаружении объекта. Я проверил, чтобы убедиться, что они работают правильно и посылают высокие сигналы только тогда, когда должны. У меня есть второй arduino, который подключен непосредственно к этим двум выходам в виде двух цифровых потоков и печатает независимо от того, высокие они или низкие.
Проблема в том, что, хотя первый arduino не посылает высокий сигнал, цифровые потоки второго arduino показывают высокий уровень. Я попытался вставить резистор 1k или 10k между ними, и это, казалось, просто уменьшило частоту этого, но также уменьшило частоту появления высокого сигнала, когда он действительно был.
Кто-нибудь знает, что я делаю не так?
Соединения:
Код Arduino 2 (датчики):
/* Два ультразвуковых датчика для обнаружения столкновений
Под углом по передним сторонам
Проверяет наличие объекта и отправляет цифровой сигнал, если расстояние меньше установленного порога
(закончились контакты pwm на основном arduino).
*/
#define LEFT_INPUT 5
#define RIGHT_INPUT 6
#define LEFT_OUTPUT 8
#define RIGHT_OUTPUT 9
// расстояние до остановки
int stopThreshold = 24; // ~10cm
// vars
long ultraLeft, inchesLeft, cmLeft;
long ultraRight, inchesRight, cmRight;
int objectDetectedLeft, objectDetectedRight;
void Poll_Ultrasonic()
{
// слева
ultraLeft = pulseIn(LEFT_INPUT, HIGH);
inchesLeft = ultraLeft / 147;
cmLeft = inchesLeft * 2.54;
if (cmLeft < stopThreshold)
objectDetectedLeft = 1;
else
objectDetectedLeft = 0;
// справа
ultraRight = pulseIn(RIGHT_INPUT, HIGH);
inchesRight = ultraRight / 147;
cmRight = inchesRight * 2.54;
if (cmRight < stopThreshold)
objectDetectedRight = 1;
else
objectDetectedRight = 0;
}
void setup()
{
// Serial monitor
Serial.begin(9600);
// pins
pinMode(LEFT_INPUT, INPUT);
pinMode(RIGHT_INPUT, INPUT);
pinMode(LEFT_OUTPUT, OUTPUT);
pinMode(RIGHT_OUTPUT, OUTPUT);
}
void loop()
{
//проверка расстояния, установка флажков
Poll_Ultrasonic();
// установить выходные контакты с высоким уровнем обнаружения, выводить сообщения об обнаружении
if (objectDetectedLeft) {
digitalWrite(LEFT_OUTPUT, HIGH);
Serial.println("\n LEFT object detected!\n");
}
else
digitalWrite(LEFT_OUTPUT, LOW);
if (objectDetectedRight) {
digitalWrite(RIGHT_OUTPUT, HIGH);
Serial.println("\n RIGHT object detected!\n");
}
else
digitalWrite(RIGHT_OUTPUT, LOW);
// Печать расстояний
Serial.print("Ультразвуковое расстояние слева: ");
Serial.print(cmLeft);
Serial.println("cm");
Serial.print("Ультразвуковое расстояние справа: ");
Serial.print(cmRight);
Serial.println("cm");
}
Фрагмент кода Arduino 1 (основной):
// Ультразвуковые штифты
#define ULTRA_LEFT 7
#define ULTRA_RIGHT 11
// Ultrasonics
pinMode(ULTRA_LEFT, INPUT);
pinMode(ULTRA_RIGHT, INPUT);
void Poll_Ultrasonic()
{
if(digitalRead(ULTRA_LEFT) && digitalRead(ULTRA_RIGHT))
leftOrRight = 2;
else if (digitalRead(ULTRA_LEFT))
leftOrRight = -1;
else if (digitalRead(ULTRA_RIGHT))
leftOrRight = 1;
else
leftOrRight = 0;
if (leftOrRight)
objectDetected = 1;
else
objectDetected = 0;
}
...
void StopCar()
{
esc.write(90);
if (leftOrRight == -1)
Serial.println("Объект обнаружен СЛЕВА! Останавливаюсь".);
else if (leftOrRight == 1)
Serial.println("Объект обнаружен СПРАВА! Останавливаюсь".);
else if (leftOrRight == 2)
Serial.println("Объект обнаружен на ОБОИХ! Останавливаюсь".);
else // никогда не должно дойти до этого
Serial.println("Инструкция по ультразвуковой отладке: плохое состояние");
}
@Austin, 👍1
Обсуждение1 ответ
Хорошо , начните с подключения светодиода на выходе 2 контактов Arduino .. ( надеюсь, он будет светиться).
Также измерьте ток на выходных выводах Arduino 2
- Функция digitalRead() ардуино не считывает входное значение, отправленное датчиком после обнаружения объекта
- Помогите совместить цифровой и аналоговый код в программировании ардуино
- Как преобразовать мгновенную кнопку в сенсорный датчик TTP223?
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
На втором arduino вы переключаете контакты в режим ввода с помощью pinMode(); ?, @jose can u c
Я полагаю, у вас есть основания для двух ардуино, соединенных вместе?, @Andrew
У меня правильно установлен режим контакта, но нет, я не соединил земли вместе. Когда я это делаю, это перестает казаться высоким, но даже когда оно должно быть высоким., @Austin
Можете ли вы показать нам код в обоих arduino? Вы говорите, что правильно установили контакт, но вы могли бы установить его в значение INPUT_PULLUP или просто ВВЕСТИ; разница имеет значение., @jose can u c
Основания **должны** быть связаны вместе. Пожалуйста, покажите свою схему., @Edgar Bonet
Без соединенных вместе оснований нет общей точки отсчета. Как второе устройство может узнать, является ли входной сигнал высоким или низким, если он измеряется из другой 0-й точки? Подключите заземление, а затем выясните, почему он не видит высокого сигнала., @Andrew
Хорошо, я опубликую свою схему и код через секунду., @Austin
Вы проверили контакты 8 и 9 Arduino 2 с помощью мультиметра, чтобы убедиться, что они находятся в диапазоне от 0 В до 5 В?, @jose can u c
Да, я проверил мультиметром, и 8,9 контактов изменяются от 0 до ~4,92 В при обнаружении объекта, @Austin
А напряжения на выводах 7 и 11 на Arduino 1 (измерение с помощью заземления счетчика на Arduino 1, а не 2)? Если вы не получаете 0 или 4,92 В, затем измерьте напряжение между двумя концами сигнальных проводов и между двумя заземлениями, попробуйте найти, в чем разница., @Andrew
Покажите немного больше кода из Arduino 1, чтобы мы могли видеть, как вызывается функция Poll_Ultrasonic ()., @jose can u c
Спасибо всем за предложения и комментарии, в которых я нуждался. Я только что понял, что другая проблема заключалась в том, что моя батарея, похоже, использует функцию энергосбережения и очень быстро выключается, но без каких-либо признаков того, что она это делает., @Austin
ОК, начните с подключения светодиода к выходным контактам Arduino 2 .. (надеюсь, он будет светиться). Также измерьте ток на выходных контактах Arduino 2., @Omar Hussein