Arduino Uno — внешнее питание работает неправильно

Я новичок в Arduino и создал свой первый проект. В проекте используется датчик ближнего действия Sharp и плата светодиода 7 сегментов (http://embedded-lab.com/blog/new-version-of-max7219-based-4-digit-serial-seven-segment-led-display/) для подсчета объектов.

Все работает нормально, когда я подключаю USB к компьютеру или использую сетевой адаптер 5 В 1 А с USB-кабелем. Проблема возникает, когда я использую внешний адаптер питания или источник постоянного тока к Vin. Плата включается, и я измерил выходное напряжение на выводе 5 В, и оно составляет около 4,8 В.

Датчик Sharp подключен к аналоговому входу A0, и я вижу колебания напряжения при прохождении объекта, но светодиод не отображает значение при внешнем питании. Дисплей подключен к GRD, 5v, где контакты DIN, CLK и LOAD дисплея подключены к контактам 7, 6 и 5, как указано в инструкции.

Я попробовал две разные платы Arduino и несколько разных адаптеров питания переменного тока в постоянный в диапазоне от 9 В до 12 В, а также использовал источник питания постоянного тока для Vin, и результаты были такими же.

Код ниже довольно прост (хотя я уверен, что есть способ сделать это гораздо лучше, но это мой первый проект на языке C, так что не судите строго, да и функция для цифр взята с веб-сайта, а не написана мной).

Если вам поможет фотография проекта, я могу ее загрузить.

Есть идеи или мысли? Спасибо, Стив

#include "LedControl.h"
#include <stdio.h>
#include <math.h>

// Arduino Pin 7 к DIN, 6 к Clk, 5 к LOAD, количество устройств равно 1
LedControl lc = LedControl(7, 6, 5, 1);
int sensorpin = 0;      // аналоговый вывод, используемый для подключения датчика резкости
int val = 0;            // переменная для хранения значений с датчика (изначально ноль)
int cnt = 1;

void setup()
{
    // Инициализируем устройство MAX7219
    lc.shutdown(0, false);   // Включить дисплей
    lc.setIntensity(0, 10);  // Установить уровень яркости (0 — минимум, 15 — максимум)
    lc.clearDisplay(0);     // Очистить регистр дисплея


}
void loop()
{


    val = analogRead(sensorpin);       // считывает значение датчика sharp
    if (val >= 650)
    {

    //записать значения в светодиод
    if (cnt<=9)
    {
        lc.setDigit(0, 0, cnt, false); // Отображение 4 в цифрах 1-9, " "
    }
    if (cnt >= 10 && cnt <= 99)
    {
        lc.setDigit(0, 0, getDigitFromNum(cnt,0), false); // Отображение 4 в цифрах 1-9, " "
        lc.setDigit(0, 1, getDigitFromNum(cnt, 1), false); // Отображение 3 в цифрах 1-9, " "
    }

    if (cnt >=100)
    {
        lc.setDigit(0, 0, getDigitFromNum(cnt, 0), false); // Отображение 4 в цифрах 1-9, " "
        lc.setDigit(0, 1, getDigitFromNum(cnt, 1), false); // Отображение 3 в цифрах 1-9, " "
        lc.setDigit(0, 2, getDigitFromNum(cnt, 2), false); // Отображение 2 в цифрах 1-9, " "
    }

    delay(400);
    cnt++;

}
}

// Функция: getDigitFromNum возвращает цифру по заданному индексу целого числа.
// Идет справа налево с начальным индексом 0.
int getDigitFromNum(int num, int digit) {
    num /= pow(10, digit);
    return num % 10;
}
// Функция: getDigitFromDec возвращает цифру по заданному индексу числа double.
// Идет слева направо с начальным индексом 0.
int getDigitFromDec(double dec, int digit) {
    dec *= pow(10, digit);
    return (int)dec % 10;
}
// Функция: getDigitFromNum возвращает десятичные значения числа двойной точности.
double getDecimals(double dec) {
    return dec - (int)dec;
}

, 👍2