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
0
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату