помогите пожалуйста выставить яркость панели P10 32x16 pix…
Делаю часики себе в гараж на одной панельке матричной одноцветной.
через юсб светится тускло, при подключенном питании чуть ярче, но не настолько ярко как с контроллером типа HD-W02 и ему подобным. Есть много ардуинок нано, контроллер покупать неохота.
есть ощущение какого то косяка с библиотекой dmd, попробовал и закомментировал свои эксперименты) как активировать шим на pin 1 enable панели с 9 пина ардуины?
Помогите дополнить код пожалуйста.
Делаю часики себе в гараж на одной панельке матричной одноцветной.
через юсб светится тускло, при подключенном питании чуть ярче, но не настолько ярко как с контроллером типа HD-W02 и ему подобным. Есть много ардуинок нано, контроллер покупать неохота.
есть ощущение какого то косяка с библиотекой dmd, попробовал и закомментировал свои эксперименты) как активировать шим на pin 1 enable панели с 9 пина ардуины?
Помогите дополнить код пожалуйста.
C++:
//--------------------------------------------------------------------------------Arduino P10 Digital Clock Demo 2------------------------------------
/*
######################################################################################################################################################
# -DS1307 12 Hour Format : https://forum.arduino.cc/index.php?topic=22029.0 #
# -RTClib.h : https://github.com/adafruit/RTClib #
# #
# Installation: #
# Arduino Uno DS1307 #
# A5 ---------> SCL #
# A4 ---------> SDA #
# 5V ---------> VCC #
# GND ---------> GND #
######################################################################################################################################################
######################################################################################################################################################
# DMD.h - Function and support library for the Freetronics DMD, a 512 LED matrix display panel arranged in a 32 x 16 layout. #
# Copyright (C) 2011 Marc Alexander (info <at> freetronics <dot> com) http://www.freetronics.com/dmd #
# #
# Installation: #
# Arduino Uno P10 Panel #
# 13 ---------> S / CLK #
# 11 ---------> R #
# 9 ---------> nOE / OE #
# 8 ---------> L / SCLK #
# 7 ---------> B #
# 6 ---------> A #
# GND ---------> GND #
# #
# The P10 panel can still turn on without 5V Power Input if it only uses one panel, but to increase brightness it must be added with 5V Power Input. #
# 5V Power Input must also be used if using more than one P10 Panel. #
######################################################################################################################################################
*/
//--------------------------------------------------------------------------------------Wire and RTC Library
#include <Wire.h>
#include "RTClib.h"
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------The SPI, DMD, TimerOne and Font libraries are used.
#include <SPI.h>
#include <DMD.h>
//#include <DMD2.h>
#include <TimerOne.h>
#include "SystemFont5x7C.h" // SystemFont5x7.h или SystemFont5x7C.h
#include "Font_6x14.h" //-> This font only contains numbers from 0-9
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------Configuration P10
#define DISPLAYS_ACROSS 1 //-> Number of P10 panels used, side to side.
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
//--------------------------------------------------------------------------------------
RTC_DS1307 rtc; //-> RTC Declaration
//--------------------------------------------------------------------------------------Variables for time and date
int _day, _month, _year, _hour24, _hour12, _minute, _second, _dtw;
int hr24;
String st;
char nameoftheday[7][12] = {"BOCKPECEHbE", "яOHEф", "BTOPHuK", "CPEфA", "ЗETBEPу", "яНTHшЖA", "CГППюTA"};
char month_name[12][12] = {"01","02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------Variable for Millis
const long interval = 1000; //-> Retrieve time and date data every 1 second
unsigned long previousMillis = 0;
const long interval_for_date = 75; //-> Скорость прокрутки даты бегущей строки (75 стандарт)
unsigned long previousMillis_for_date = 0;
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------Variable to display hours and minutes
char hr_24 [3];
String str_hr_24;
char mn [3];
String str_mn;
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------ScanDMD()
void ScanDMD() {
dmd.scanDisplayBySPI();
}
//--------------------------------------------------------------------------------------setup
//int pwm = 9; // This is the pin that we will use //
void setup() {
Serial.begin(115200);
// dmd.setBrightness(255);
// pinMode(pwm, OUTPUT); // declare the pin to be an output //
// analogWrite(pwm, 150); // medium brightness (50%)
Serial.println("Arduino RTC DS1307");
delay(1000);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled (Set the time and date based on your computer time and date)
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //-> Set the time and date based on your computer time and date. If that doesn't work, use this line of code outside of "if (! rtc.isrunning())"
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
// following line sets the RTC to the date & time this sketch was compiled (Set the time and date based on your computer time and date)
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //-> Set the time and date based on your computer time and date. Use this line of code if it doesn't work in "if (! rtc.isrunning())"
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
// If the time and date are successfully set, then deactivate the code line (make the code a comment), then re-upload the code.
// if not done then the time and date will return to the beginning when it was set when arduino is reset or restarted.
Timer1.initialize(1000);
Timer1.attachInterrupt(ScanDMD);
dmd.clearScreen(true);
}
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------loop
void loop() {
//_____________________________________________________millis() to display time
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; //-> save the last time
GetDateTime(); //-> Retrieve time and date data from DS1307
dmd.selectFont(Font_6x14);
//=====================================================Showing the clock in P10
str_hr_24=String(_hour24);
str_hr_24.toCharArray(hr_24,3);
if (_hour24<10) {
dmd.drawString(0, 0, "0", 1, GRAPHICS_NORMAL);
dmd.drawString(7, 0, hr_24, 1, GRAPHICS_NORMAL);
}
else {
dmd.drawString(0, 0, hr_24, 2, GRAPHICS_NORMAL);
}
//=====================================================
//=====================================================Showing ":" in P10
if (_second %2 == 0) {
dmd.drawFilledBox(15,3,16,4, GRAPHICS_OR);
dmd.drawFilledBox(15,11,16,12, GRAPHICS_OR);
}
else {
dmd.drawFilledBox(15,3,16,4, GRAPHICS_NOR);
dmd.drawFilledBox(15,11,16,12, GRAPHICS_NOR);
}
//=====================================================
//=====================================================Showing minutes in P10
str_mn=String(_minute);
str_mn.toCharArray(mn,3);
if (_minute<10) {
dmd.drawString(19, 0, "0", 1, GRAPHICS_NORMAL);
dmd.drawString(26, 0, mn, 1, GRAPHICS_NORMAL);
}
else {
dmd.drawString(19, 0, mn, 2, GRAPHICS_NORMAL);
}
//=====================================================
//=====================================================Call the scrolling_date() subroutine to display the date.
if (_second==11) { //-> Display the date when seconds equal to 11
scrolling_date();
}
//=====================================================
}
//_____________________________________________________
}
//--------------------------------------------------------------------------------------
//------------------------------------------------------------------------Subroutine to retrieve or update the time and date from DS1307
void GetDateTime() {
DateTime now = rtc.now();
_day=now.day();
_month=now.month();
_year=now.year();
_hour24=now.hour();
_minute=now.minute();
_second=now.second();
_dtw=now.dayOfTheWeek();
hr24=_hour24;
if (hr24>12) {
_hour12=hr24-12;
}
else if (hr24==0) {
_hour12=12;
}
else {
_hour12=hr24;
}
if (hr24<12) {
st="AM";
}
else {
st="PM";
}
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------Subroutine to display days, months and years
void scrolling_date() {
dmd.clearScreen(true);
delay(100);
//=====================================================Holds date data to display
String Date = String(nameoftheday[_dtw]) + ", " + String(_day) + "/" + String(month_name[_month-1]) + "/" + String(_year);
char dt[50];
Date.toCharArray(dt,50);
int i=32+10;
int j=strlen(dt)+(strlen(dt)*5);
//=====================================================
dmd.selectFont(SystemFont5x7C); // SystemFont5x7.h
while(1) {
//_____________________________________________________millis() to display time
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; //-> save the last time
//=====================================================Showing the clock in P10
str_hr_24=String(_hour24);
str_hr_24.toCharArray(hr_24,3);
if (_hour24<10) {
dmd.drawString(2, 0, "0", 1, GRAPHICS_NORMAL);
dmd.drawString(8, 0, hr_24, 1, GRAPHICS_NORMAL);
}
else {
dmd.drawString(2, 0, hr_24, 2, GRAPHICS_NORMAL);
}
//=====================================================
//=====================================================Showing ":" in P10
GetDateTime(); //-> Retrieve time and date data from DS1307
if (_second %2 == 0) {
dmd.drawString(14, 0, ":", 2, GRAPHICS_OR);
}
else {
dmd.drawString(14, 0, ":", 2, GRAPHICS_NOR);
}
//=====================================================
//=====================================================Showing minutes in P10
str_mn=String(_minute);
str_mn.toCharArray(mn,3);
if (_minute<10) {
dmd.drawString(19, 0, "0", 1, GRAPHICS_NORMAL);
dmd.drawString(25, 0, mn, 1, GRAPHICS_NORMAL);
}
else {
dmd.drawString(19, 0, mn, 2, GRAPHICS_NORMAL);
}
//=====================================================
}
//_____________________________________________________
//_____________________________________________________millis() for display & scrolling date
unsigned long currentMillis_for_date = millis();
if (currentMillis_for_date - previousMillis_for_date >= interval_for_date) {
previousMillis_for_date = currentMillis_for_date; //-> save the last time
i--;
dmd.drawString(i, 9, dt, strlen(dt), GRAPHICS_NORMAL);
if (i<=~j) {
dmd.clearScreen(true);
delay(100);
return;
}
}
//_____________________________________________________
}
}
//------------------------------------------------------------------------
Изменено: