Связка Mega2560 с p10 led module

MikSer
Offline
Зарегистрирован: 27.01.2012
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include <Bounce2.h>
#define DISPLAYS_ACROSS 3
#define DISPLAYS_DOWN 1

#define Button1Pin 2
#define Button2Pin 3

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();

byte Button1Count, Button2Count;
boolean Button1State, Button2State;

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

unsigned long TimerMillis1 = 0;
unsigned long TimerMillis2 = 0;

char buffer1[10];
char buffer2[10];

boolean Timer1State = LOW;
boolean Timer2State = LOW;

boolean Timer1Off = LOW;
boolean Timer2Off = LOW;

long Interval1, Interval2;

long previousMillis1, previousMillis2;


void ScanDMD()
{
  dmd.scanDisplayBySPI();
  if (Timer1State == HIGH) {
    TimerMillis1++;
  }
  if (Timer2State == HIGH) {
    TimerMillis2++;
  }
}


void setup(void)
{
  pinMode(Button1Pin, INPUT_PULLUP);
  pinMode(Button2Pin, INPUT_PULLUP);

  debouncer1.attach(Button1Pin);
  debouncer2.attach(Button2Pin);

  debouncer1.interval(2);
  debouncer2.interval(2);

  Button1Count = 0;
  Button2Count = 0;
  Button1State = LOW;
  Button2State = LOW;

  Interval1 = 6000;
  Interval2 = 6000;

  previousMillis1 = 0;
  previousMillis2 = 0;

  Timer1.initialize( 5000 );
  Timer1.attachInterrupt( ScanDMD );
  dmd.clearScreen( true );
  dmd.selectFont(SystemFont5x7);
  print_time1(0);
  print_time2(0);
}

void loop(void)
{
  Button1State = debouncer1.update();
  Button2State = debouncer2.update();
  if (debouncer1.read() == LOW && Button1State == HIGH) Button1Count++;
  if (debouncer2.read() == LOW && Button2State == HIGH) Button2Count++;

  if (Button1Count == 1 && Timer1State == LOW) {
    TimerMillis1 = 0;
    Timer1State = HIGH; //1е нажате 1й кнопки - запуск 1го таймера
  }
  if (Button1Count == 2 && Timer2State == LOW) {
    TimerMillis2 = 0;
    Timer2State = HIGH; //2е нажате 1й кнопки - запуск 2го таймера
  }

  if (Button2Count == 1 && Timer1State == HIGH) { //1е нажатие 2й кнопки - стоп 1го таймера
    Timer1State = LOW;
    TimerMillis1 = 0;
    previousMillis1 = millis();
    Timer1Off = HIGH;
    Button1Count = 0;
  }
  if (Button2Count == 2 && Timer2State == HIGH) { //2е нажатие 2й кнопки - стоп 2го таймера
    Timer2State = LOW;
    TimerMillis2 = 0;
    previousMillis2 = millis();
    Timer2Off = HIGH;
    Button1Count = 0;
    Button2Count = 0;
  }

  unsigned long currentMillis1 = millis();
  if (currentMillis1 - previousMillis1 > Interval1 && Timer1Off == HIGH) {
    previousMillis1 = currentMillis1;
    TimerMillis1 = 0;
    print_time1(0);
    Timer1Off = LOW;
  }

  unsigned long currentMillis2 = millis();
  if (currentMillis2 - previousMillis2 > Interval2 && Timer2Off == HIGH) {
    previousMillis2 = currentMillis2;
    TimerMillis2 = 0;
    print_time2(0);
    Timer2Off = LOW;
  }

  if (Timer1State == HIGH) {
    print_time1(TimerMillis1 * 5);
  }
  if (Timer2State == HIGH) {
    print_time2(TimerMillis2 * 5);
  }
}

void print_time1(unsigned long t_milli)
{
  int days, hours, mins, secs;
  int fractime;
  unsigned long inttime;
  inttime  = t_milli / 1000;
  fractime = t_milli % 1000;
  days     = inttime / (24 * 3600);
  inttime  = inttime % (24 * 3600);
  hours    = inttime / 3600;
  inttime  = inttime % 3600;
  mins     = inttime / 60;
  inttime  = inttime % 60;
  secs = inttime;
  sprintf(buffer1, "%02d:%02d,%03d", mins, secs, fractime);
  dmd.drawString( 0, 0, buffer1, 9, GRAPHICS_NORMAL );
}

void print_time2(unsigned long t_milli)
{
  int days, hours, mins, secs;
  int fractime;
  unsigned long inttime;
  inttime  = t_milli / 1000;
  fractime = t_milli % 1000;
  days     = inttime / (24 * 3600);
  inttime  = inttime % (24 * 3600);
  hours    = inttime / 3600;
  inttime  = inttime % 3600;
  mins     = inttime / 60;
  inttime  = inttime % 60;
  secs = inttime;
  sprintf(buffer2, "%02d:%02d,%03d", mins, secs, fractime);
  dmd.drawString( 0, 8, buffer2, 9, GRAPHICS_NORMAL );
}

 

MikSer
Offline
Зарегистрирован: 27.01.2012

Вот дали свет и есть решение.

tika
Offline
Зарегистрирован: 22.07.2015

Большое спасибо - сейчас и опробую.

tika
Offline
Зарегистрирован: 22.07.2015

Спасибо -опробовал - даже и не запускается таймер в 0. старая работает.

Ошибок нет.

MikSer
Offline
Зарегистрирован: 27.01.2012

Ничего не понял. Что значит не запускается таймер в 0?

 

tika
Offline
Зарегистрирован: 22.07.2015

Пи замыкание  PIN2(Button1Pin2)1раз,2-рой раз.-ТАИМЕРЫ НЕ ЗАПУСКАЮТСЯ.

Заливаю старый скеч все работает (ДИСПЛЕЙ -ТАЙМЕР)

MikSer
Offline
Зарегистрирован: 27.01.2012

У меня работает. 

tika
Offline
Зарегистрирован: 22.07.2015

Сори - а уменя нет -как . В чем может дело. Старую заливыю работает. Попробую вечером залить новый DMD. Спасибо за помощь. Дело в том, что при заливке не ругается. 

 

MikSer
Offline
Зарегистрирован: 27.01.2012
 
051   pinMode(Button1Pin, INPUT_PULLUP);
052   pinMode(Button2Pin, INPUT_PULLUP);

Я кнопки без резиков подключил.

tika
Offline
Зарегистрирован: 22.07.2015

Это прописано -подтягивающее сопративление встроеное. Пробовал и с ними- добавлял.

Буду пробовать вечером - хотя что изменится у меня? Перезалью DMD.

 

tika
Offline
Зарегистрирован: 22.07.2015

ВСЕ РАБОТАЕТ

MikSer
Offline
Зарегистрирован: 27.01.2012

Отож и оно. )))

tika
Offline
Зарегистрирован: 22.07.2015

Спасибо -у меня других версий нет. ОГРОМНОЕ СПАСИБО за творение рук человеческих.Это то, что мне надо. Но испоробую вечером.

Вопрос ширина цифравой ячейки 7 и ширину  точки нет возможности уменьшить. Скажем до 4 ? Или это строго прописано как ширина ячейки цифры строго 7.

MikSer
Offline
Зарегистрирован: 27.01.2012

В этой ветке обсуждался вопрос и средства по созданию кастомных шрифтов.

tika
Offline
Зарегистрирован: 22.07.2015

Ок. Сори.

tika
Offline
Зарегистрирован: 22.07.2015

Все работает -Спасибо.  Но просьба как исправить, чтобы после выполнения СТАРТ, СТОП и после сброса можно снова СТАРТОВАТЬ. Проблема такая -

 

1. при выполнение СТАРТ1, СТОП1 и СБРОС1 - не выполняет новый СТАРТ (а только после 2х нажатий на СТОП)          

2. при выполнение СТАРТ1, СТАРТ2  потом СТОП1и СБРОС1 после (обнуления 1 таймера - таймер 2 продолжает считать) не разрешает делать (обнуленного таймера) СТАРТ1 до того как не сработает СТОП2 и СБРОС2.

 

Нужно чтобы СТАРТ разрешался всегда свободному 1ному каналу ТАИМЕРА при условии, что он сброшен 00.00.000.

 

Если есть возможность и драгоценное Ваше время помогите. Получается старт только друг за другом по 2 участника, и новый старт вазможен только после финиша 2х участника. Получается только пачками по 2участника.

 

MikSer
Offline
Зарегистрирован: 27.01.2012

Я выше просил все расписать как должно работать, но увы. То что Вы написали то я вам и сделал. Больше угадывать не буду. Хотя можете выслать мне ЛИТР Капитана Моргана и мы продолжим обучение )))

tika
Offline
Зарегистрирован: 22.07.2015

1. при выполнение СТАРТ1, СТОП1 и СБРОС1 - не выполняет новый СТАРТ (а только после 2х нажатий на СТОП)          

2. при выполнение СТАРТ1, СТАРТ2  потом СТОП1и СБРОС1 после (обнуления 1 таймера - таймер 2 продолжает считать) не разрешает делать (обнуленного таймера) СТАРТ1 до того как не сработает СТОП2 и СБРОС2.    

  ВСЕ ЭТО РЕШИЛ, добавив Button2Count = 0 после СБРОСОВ.  Но проблема со СТОПОМ сначало 1 останавливает потом 2 таймер а не наибольшее значение таймера. 

tika
Offline
Зарегистрирован: 22.07.2015

Я так понимаю, обучение будит индивидуальное. Просто жаль , что все это творение рук человеческих умрет. 

tika
Offline
Зарегистрирован: 22.07.2015

Вопрос -1 тона на карточку или тел? и доработка- можно в личке.

MikSer
Offline
Зарегистрирован: 27.01.2012

Нет, все на много банальней. Вы не можете сформировать ТЗ и описать ТУ. Я больше не хочу угадывать что Вам нужно, а так как я алкоголик, я с радостью получу от Вас посылку с бутылкой рома и продолжу здесь делать то что Вам интересно. )))

Coder
Coder аватар
Offline
Зарегистрирован: 04.03.2012

Добрый день. Поделитесь пожалуйста русскими шрифтами для DMD. Тот который вы уже выкладывали, за него огромное спасибо, но он великоват для меня. Может есть шрифты поменьше. Скажу сразу, пробовал рисовать шрифт в программе, но видать из меня плохой шрифтохудожник :), а в инете готовых не нашел. Уж думал что можно как-то в обычном русском ttf перенести русские буквы на адреса англ., а потом импортировать в программу для создания шрифтов и экспортировать для ардуино, но что-то не получается пока. Поделитесь или расскажите как вы их делали. Заранее благодарен.

MikSer
Offline
Зарегистрирован: 27.01.2012

шрифт русский маленький http://vk.com/doc27058323_437303228

извиняюсь что ссылка ВК (

Coder
Coder аватар
Offline
Зарегистрирован: 04.03.2012

Пишет: "Этот документ был удалён из общего доступа."

MikSer
Offline
Зарегистрирован: 27.01.2012
tika
Offline
Зарегистрирован: 22.07.2015

Доброго времени суток! Подскажите как модно уменьшить расстояние между точками в цифровом секундомере в панели P10 вот куски. 0:00.00 или точи занимают строго размер цифр? что- бы влезло в 1 панель P10. и это не возможно?



#include <SPI.h> //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)

#include <DMD.h> 

#include <TimerOne.h> 

//#include "Arial_black_16.h"

#include "SystemFont5x7.h"

//#include "Small.h"

#include <Bounce2.h



#define DISPLAYS_ACROSS 3

#define DISPLAYS_DOWN 1

________________________________________________________________________



//initialize TimerOne's interrupt/CPU usage used to scan and refresh the display

Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.

Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()

dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on)

// dmd.selectFont(Arial_Black_16);

dmd.selectFont(SystemFont5x7);

____________________________________________________________________

void print_time2(unsigned long t_milli)

{

int days, hours, mins, secs;

int fractime;

unsigned long inttime;



inttime = t_milli / 1000;

fractime = t_milli % 100;



days = inttime / (24*3600);

inttime = inttime % (24*3600);



hours = inttime / 3600;

inttime = inttime % 3600;



mins = inttime / 60;

inttime = inttime % 60;



secs = inttime;

sprintf(buffer2, "%01d:%02d.%02d", mins, secs, fractime);

dmd.drawString( 55,8, buffer2, 9, GRAPHICS_NORMAL );

}

MikSer
Offline
Зарегистрирован: 27.01.2012

Чтобы модно уменьшить расстояние между точками печатайте не весь буфер а в цикле по буквенно. Переменная цикла и будет нужным смещением, и уменьшайте его когда идет печать точки.

tika
Offline
Зарегистрирован: 22.07.2015

Пытался подключить уменьшинные шрифты из GLCD Font Creator - (хотел уместить на 1 панель 0:00.00) не получилось . Думаю без бутылки не обойтись.

tika
Offline
Зарегистрирован: 22.07.2015

0:00.00

0:00.00

borey2005
Offline
Зарегистрирован: 13.01.2017

Доброго всем,

Товарищи проконсультируйте пожалуйста немного по простому вопросу.

Собираюсь соединить Arduino Nano(+1 датчик с небольшим потреблением) и P10. Я правильно понимаю что можно организовать общее питание без дополнительной обвязки ? Подать на Vin и на панель - 7В к примеру ( судя по даташиту P10 поддерживает) и общую землю. На прототипе вроде всё нормально работает, даже от USB тока хватает(0.5 А) . Задача в общем запитать от прикуривателя, но там 12В. Думаю панели поплохеет. Нужна ли будет какая ещё обвязка или стабилизатора на Nano хватит?

Спасибо.

 

MikSer
Offline
Зарегистрирован: 27.01.2012

Доброго! Нет не хватит. 1а панель при полном свечении будет потреблять 2Ампера. Я бы разломал зарядку ЮСБи от прикуривателя и выдрал бы из неё стаб. Как раз получится 5в 2а.

7в я бы не подавал на Р10.

borey2005
Offline
Зарегистрирован: 13.01.2017

Ок. Спасибо.

А если мне впринципе достаточно той яркости которую даёт P10 при 0.5А?

Про зарядку от прикуривателя я тоже думал, спасибо. Только не подавать же 5В от зарядки прямо на +5V ардуино , напряжение не стабилизированное и ардуину скорее всего будет "штормить". А на Vin (где есть стабилизатор) +5В вроде мало. Я собственно и хотел сделать на входе 7 чтобы и на Vin и на P10 сразу.

MikSer
Offline
Зарегистрирован: 27.01.2012

Не заморачивайся. Подавай 5в на VIN. Работать будет. 

borey2005
Offline
Зарегистрирован: 13.01.2017

Ок. Спасибо. Будем так.

На входе +5В на Vin и P10.

lex
Offline
Зарегистрирован: 13.01.2017

Всем привет!
Начну с того, что только буду изучать Arduino. UNO R3 китайская с али в пути.

Дак вот. Поставил задачу к следующему Новому году сделать сетку из RGB диодов на балкон, разрешением 32х48 либо 32х64.
В китае полно описаных в статье модулей.
! Мне же нужно вместо диодов в панели сделать сетку, желательно RGB, т.е. собрать\купить только саму плату розжига диодов. А к ней уже Arduino или же китайский контролер готовый.

Также видел управляемые диоды на WS2801 и APA102, но это за дорого.
Кто-то на TLC5940 делает. 

Направьте меня на истеный путь с чего начать. Если не ясно описал задачу свою, уточню моменты.

lex
Offline
Зарегистрирован: 13.01.2017

дубль :(

borey2005
Offline
Зарегистрирован: 13.01.2017

Работет как то странно. Если подать общее питание на p10(отдельный VCC контакт на панели) и ардуино(Vin), но не соединять землю на панели с общей землёй ардуино - то работает, нормально. Как только заземлить выделенный GND вывод панели с землёй ардуины работает не стабильно, ардуина ребутается когда панель потребляет какой то повышенный ток (показывается много движущегося текста). Панели хватает земли с дата кабеля чтоли и достаточно VCC на Vin?

Подаю 4.5 или 6 вольт со стабилизированного источника(1.4 А) на Vin.

Что странно с USB хоть тускло но работает стабильно (с обоими подключёнными VCC->Vin и GND->GND ). Хотя тока она выдаёт максимум 0.5 А.

tika
Offline
Зарегистрирован: 22.07.2015

Здравствуйте –Вопрос. Нет готовых шрифтов для панели P-10 размером SystemFont (4x7) – пробовал через  « GLCD Font Creator 2» . получаются в живую каля -баля .

-что бы уместить  на 1 панели P-10 две строки по 000:00

-  и в одну строку 000:00 в размер панели 32Х16

Vitali-71
Offline
Зарегистрирован: 25.04.2017
Добрый день! У меня просьба помочь разобраться с такой проблемой!
у меня:
+Arduino Мега 2560 R3
+ 3.2-дюймовый TFT IPS ЖК-дисплей 480 х 320 
+4 сервопривода
как управлять сервоприводами знаю, подключил. но мне надо вывести угол отклонений на дисплей.
Вот скетч для работы сервоприводов.
#include <Servo.h> 

const int servo1 = 4; // первая серва
const int servo2 = 10; // вторая серва
const int joyH = 3; // выход L/R джойстика Parallax
const int joyV = 4; // выход U/D джойстика Parallax
int servoVal; // переменная для хранения данных с аналогового пина
Servo myservo1; // создаем объект Servo для управления первой сервой
Servo myservo2; // создаем объект Servo для управления второй сервой
void setup() {

// Servo
myservo1.attach(servo1); // подключаем серву
myservo2.attach(servo2); // подключаем серву
// Инициализация серийного протокола связи

Serial.begin(9600);
}

void loop(){
// отображаем значения с джойстика с использованием серийного монитора
outputJoystick();
// считываем значение с джойстика по горизонтали (значение между 0 и 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)
myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 0, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 0 до 180)
myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением
delay(15); // ждем, пока серва обеспечит заданное положение
}
/**
* отображаем значения джойстика
*/
void outputJoystick(){

Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}

А вот для дисплея.


# <UTFT.h>

// Объявляем, какие шрифты мы будем использовать
       
extern uint8_t BigFont[];

// Не забудьте изменить параметр модели в соответствии с вашим модулем отображения!
UTFT myGLCD(CTE32HR,38,39,40,41);

void setup()
{
  randomSeed(analogRead(0));
  
// Setup the LCD
  myGLCD.InitLCD();
  myGLCD.setFont(BigFont);
}

void loop()
{
  myGLCD.clrScr();
  
  myGLCD.setColor(0, 0, 255);       //фон экрана
  myGLCD.fillRect(0, 0, 479, 319);  //границы фона

  myGLCD.setBackColor(0, 0, 255);   //цвет фона
  myGLCD.setColor(255, 255, 0);     //цвер шрифта
  myGLCD.print("UDALENOST", 285, 1);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(241, 17, 479, 160);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(242, 18, 478, 159);
  
  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("NAKLON PO Y", 275, 161);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(241, 177, 479, 319);
  
  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(242, 178, 478, 318); 
  
  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("POVOROT NA 360", 10, 1);
  
  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(0, 17, 239, 160);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(1, 18, 238, 159);

  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("NAKLON PO X", 30, 161);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(0, 177, 239, 319);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(1, 178, 238, 318);


  while (true) {}; //от мигания
}

Задача объединить скетч дидисплея и приводов в один и чтобы при повороте того или другого сервоприводов,
в соответствующем окне отображался (процент, угол, градус, число) поворота. Прошу помочь доработать
скетч, или показать самый примитивный, а доработаем сами! Заранее спасибо, всех с праздниками!

 

 

 

Vitali-71
Offline
Зарегистрирован: 25.04.2017
Добрый день! У меня просьба помочь разобраться с такой проблемой!
у меня:
+Arduino Мега 2560 R3
+ 3.2-дюймовый TFT IPS ЖК-дисплей 480 х 320 
+4 сервопривода
как управлять сервоприводами знаю, подключил. но мне надо вывести угол отклонений на дисплей.
Вот скетч для работы сервоприводов.
#include <Servo.h> 

const int servo1 = 4; // первая серва
const int servo2 = 10; // вторая серва
const int joyH = 3; // выход L/R джойстика Parallax
const int joyV = 4; // выход U/D джойстика Parallax
int servoVal; // переменная для хранения данных с аналогового пина
Servo myservo1; // создаем объект Servo для управления первой сервой
Servo myservo2; // создаем объект Servo для управления второй сервой
void setup() {

// Servo
myservo1.attach(servo1); // подключаем серву
myservo2.attach(servo2); // подключаем серву
// Инициализация серийного протокола связи

Serial.begin(9600);
}

void loop(){
// отображаем значения с джойстика с использованием серийного монитора
outputJoystick();
// считываем значение с джойстика по горизонтали (значение между 0 и 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)
myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 0, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 0 до 180)
myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением
delay(15); // ждем, пока серва обеспечит заданное положение
}
/**
* отображаем значения джойстика
*/
void outputJoystick(){

Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}

А вот для дисплея.


# <UTFT.h>

// Объявляем, какие шрифты мы будем использовать
       
extern uint8_t BigFont[];

// Не забудьте изменить параметр модели в соответствии с вашим модулем отображения!
UTFT myGLCD(CTE32HR,38,39,40,41);

void setup()
{
  randomSeed(analogRead(0));
  
// Setup the LCD
  myGLCD.InitLCD();
  myGLCD.setFont(BigFont);
}

void loop()
{
  myGLCD.clrScr();
  
  myGLCD.setColor(0, 0, 255);       //фон экрана
  myGLCD.fillRect(0, 0, 479, 319);  //границы фона

  myGLCD.setBackColor(0, 0, 255);   //цвет фона
  myGLCD.setColor(255, 255, 0);     //цвер шрифта
  myGLCD.print("UDALENOST", 285, 1);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(241, 17, 479, 160);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(242, 18, 478, 159);
  
  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("NAKLON PO Y", 275, 161);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(241, 177, 479, 319);
  
  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(242, 178, 478, 318); 
  
  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("POVOROT NA 360", 10, 1);
  
  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(0, 17, 239, 160);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(1, 18, 238, 159);

  myGLCD.setBackColor(0, 0, 255); //цвет фона
  myGLCD.setColor(255, 255, 0);   //цвер шрифта
  myGLCD.print("NAKLON PO X", 30, 161);

  myGLCD.setColor(0, 150, 255);
  myGLCD.drawRect(0, 177, 239, 319);

  myGLCD.setColor(25, 25, 25);
  myGLCD.fillRect(1, 178, 238, 318);


  while (true) {}; //от мигания
}
Помогите доработать скетч!

 

LVS
Offline
Зарегистрирован: 31.05.2017

Доброго времени суток всем! А кто-нибудь управлял RGB матрицей 16х32 через DMD библиотеку? Все, что находила, про одноцветные. У меня arduino uno и китайская матрица p8. Задача соединить 4 матрицы в один экран и небольшая графика.

LVS
Offline
Зарегистрирован: 31.05.2017

Доброго времени суток всем! А кто-нибудь управлял RGB матрицей 16х32 через DMD библиотеку? Все, что находила, про одноцветные. У меня arduino uno и китайская матрица p8. Задача соединить 4 матрицы в один экран и небольшая графика.

Hr.Smartus
Offline
Зарегистрирован: 27.05.2017

попробуйте библиотеку AdafruitGFX https://github.com/adafruit/Adafruit-GFX-Library, китайские матрицы от Elecrow работают на ней. У них же и пец.шилды есть для подключение мартиц. Дорогие, но удобные http://embedded-lab.com/blog/hookup-guide-for-16x32-rgb-led-panel/

LVS
Offline
Зарегистрирован: 31.05.2017

Hr.Smartus пишет:

попробуйте библиотеку AdafruitGFX https://github.com/adafruit/Adafruit-GFX-Library, китайские матрицы от Elecrow работают на ней. У них же и пец.шилды есть для подключение мартиц. Дорогие, но удобные http://embedded-lab.com/blog/hookup-guide-for-16x32-rgb-led-panel/

Пробовала, и спец.иблиотеку RGB matrix panel, тоже от Adafruit, они с Adafruit_GFX в связке работают. Ерунда получается. Несоответствие по регистрам, пробовала в этих библиотеках менять кое-что, или не компилируется или по прежнему зажигает не тот пиксел, скетч из примеров тоже идет криво (несоответствие по регистрам)..... Похоже определяется как 2 матрицы 16х16... и там тоже ерунда... вечером фото сделаю, выложу как это все выглядит.

LVS
Offline
Зарегистрирован: 31.05.2017

попять 2 раза отправила, извините, тороплюсь.

LVS
Offline
Зарегистрирован: 31.05.2017

Произвоидетель моих матриц J.CAI, сама матрица заказная позиция P8_1_4_3535_PR4538_HSD_32x16_NRES.

LVS
Offline
Зарегистрирован: 31.05.2017

В заказной позиции, насколько я понимаю, PR4538 - это либо буфер, либо дешифратор, регистры - CH331S.1JK6 TG5020GR (здесь могу ошибаться). По распиновке Hab соответствует распиновке матриц Adafruit.

LVS
Offline
Зарегистрирован: 31.05.2017

И так, имеем: Arduino uno R3, RGB матрицу 32х16, 2 библиотеки Adafruit_GFX и RGB Matrix Panel, код из примера библиотеки, подключаю соответственно рекомандаций от Adafruit (https://learn.adafruit.com/32x16-32x32-rgb-led-matrix/connecting-with-ju...) и получаю (должен быть текст):

LVS
Offline
Зарегистрирован: 31.05.2017

Код примера из библиотеки:

#include <Adafruit_GFX.h>   // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library

#define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

void setup() {

  matrix.begin();
  
  // draw a pixel in solid white
  matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); 
  delay(500);

  // fix the screen with green
  matrix.fillRect(0, 0, 32, 16, matrix.Color333(0, 7, 0));
  delay(500);

  // draw a box in yellow
  matrix.drawRect(0, 0, 32, 16, matrix.Color333(7, 7, 0));
  delay(500);
  
  // draw an 'X' in red
  matrix.drawLine(0, 0, 31, 15, matrix.Color333(7, 0, 0));
  matrix.drawLine(31, 0, 0, 15, matrix.Color333(7, 0, 0));
  delay(500);
  
  // draw a blue circle
  matrix.drawCircle(7, 7, 7, matrix.Color333(0, 0, 7));
  delay(500);
  
  // fill a violet circle
  matrix.fillCircle(23, 7, 7, matrix.Color333(7, 0, 7));
  delay(500);
  
  // fill the screen with 'black'
  matrix.fillScreen(matrix.Color333(0, 0, 0));
  
  // draw some text!
  matrix.setCursor(1, 0);   // start at top left, with one pixel of spacing
  matrix.setTextSize(1);    // size 1 == 8 pixels high
  
  // print each letter with a rainbow color
  matrix.setTextColor(matrix.Color333(7,0,0));
  matrix.print('1');
  matrix.setTextColor(matrix.Color333(7,4,0)); 
  matrix.print('6');
  matrix.setTextColor(matrix.Color333(7,7,0));
  matrix.print('x');
  matrix.setTextColor(matrix.Color333(4,7,0)); 
  matrix.print('3');
  matrix.setTextColor(matrix.Color333(0,7,0));  
  matrix.print('2');
  
  matrix.setCursor(1, 9);   // next line
  matrix.setTextColor(matrix.Color333(0,7,7)); 
  matrix.print('*');
  matrix.setTextColor(matrix.Color333(0,4,7)); 
  matrix.print('R');
  matrix.setTextColor(matrix.Color333(0,0,7));
  matrix.print('G');
  matrix.setTextColor(matrix.Color333(4,0,7)); 
  matrix.print("B");
  matrix.setTextColor(matrix.Color333(7,0,4)); 
  matrix.print("*");

  // whew!
}

void loop() {
  // do nothing
}

 

LVS
Offline
Зарегистрирован: 31.05.2017

Дальше убираю из примера все лишнее и пытаюсь зажечь левый верхний "пиксел"

#include <Adafruit_GFX.h>   // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library

#define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2
//#define WIDTH   32
//#define HEIGHT  16
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

void setup() {

  matrix.begin();
  
  // draw a pixel in solid white
  matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7)); 
  delay(500);

}

void loop() {
  // do nothing
}