Яркость панели P10

superflint

✩✩✩✩✩✩✩
14 Авг 2019
34
4
помогите пожалуйста выставить яркость панели P10 32x16 pix…
Делаю часики себе в гараж на одной панельке матричной одноцветной.
через юсб светится тускло, при подключенном питании чуть ярче, но не настолько ярко как с контроллером типа 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;

      }

    }



    //_____________________________________________________

  }



}

//------------------------------------------------------------------------
 
Изменено: