что за кодировка

alexey3
Offline
Зарегистрирован: 25.11.2017

Подскажите пожалусто , этим запрограмирован модуль что ето за кодировка ?

char sl4 [] = {//Слово ЗНАМЕНСК жирный шрифт
28,3,6,67,99,99,127,99,99,51,51,51,99,99,107,119,127,96,124,96,99,99,127,99,28,96,96,97,99,108,112,110,
62,3,28,103,99,99,127,99,51,51,51,59,99,99,107,99,127,96,124,96,99,99,127,99,62,96,96,115,99,108,112,103,
103,3,14,62,99,99,99,99,51,63,51,31,99,99,119,99,96,96,96,127,99,99,99,99,115,96,96,62,102,120,120,99,
67,7,3,28,99,99,99,99,51,63,51,15,99,107,119,99,96,96,96,127,99,99,99,99,97,96,96,28,102,120,124,97
};

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

Подскажите пожалусто , этим запрограмирован модуль что ето за кодировка ?

судя по колиеству байт, это не кодировка, а фактически битмап этой строки в виде конкретного фонта для конкретного дисплея.

alexey3
Offline
Зарегистрирован: 25.11.2017

ну в общем то да, Поясните что такое битмап и как мне его победить ?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, это просто картинка.  А как Вам надо его побеждать? Что Вы с ним хотите делать?

alexey3
Offline
Зарегистрирован: 25.11.2017

Евгений здраствуйте вообще вывести цифры надо на модуль р10 16х32

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, это просто картинка. Если Вам нужно разные цифры выводить, то лучше нарисовать цифровой шрифт. Это очень легко. Пишете цифры в пэйнте или любом друго графическом редакторе. Сохраняете каждую цифру как картинку (.bmp например). На картинки напускаете бесплатную программку типа "LCD Assistant" и она выдаёт Вам примерно такой как у Вас в первом посте массив для каждой цифры. Т.е. каждая цифра будет отдельной "катрнкой". Потом, когда нужно напечатать цифру, просто выводите на экранн нужную "картинку".

Можно и готовый шрифт скачать, но это искать надо, по мне так бстрее сделать. Да и когда делаешь - можешь выбрать любой шрифт и вообще выпендриться.

alexey3
Offline
Зарегистрирован: 25.11.2017

ну а пока что вот что вышло

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Возьмите тот же LCD Assistant, проведите через него рожицу (смайлик) и выведите на свой экран - красиво будет.

alexey3
Offline
Зарегистрирован: 25.11.2017

щас буду пробовать

 

alexey3
Offline
Зарегистрирован: 25.11.2017

Чтото не выходит с ассистом

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

работайте - выйдет

alexey3
Offline
Зарегистрирован: 25.11.2017

отчитываюсь вышло всё работает но есть мерцание

И Евгений если можно подскажите по коду что не так я сделал

код про сдвиговые регистры семисегментные уже но ето будет вместе всё работать с модулем

проблема такова что одинаковые цифры выводятся верно разные вызывают хаос

// DS отвечает за поток битов(данные). На Схеме 595 пин 14
#define DATA_PIN    12
//STCP  отвечает за так называемое защелкивание. Когда мы все свои биты передали, посылаем сигнал, что окончили передачу. На Схеме 595 пин 12
#define LATCH_PIN  4
// SHCP отвечает за ШИМ. Когда 1 из данных забирается бит, 0 пропускается.Синхронизация потока. На Схеме 595 пин 11
#define CLOCK_PIN  10
const int digitPins[3] = {52,51,50}; //Массив пинов. Выбрал произвольные кониакты у меня Мега
int8_t Disp[3]={0};// задается тип int8_t чтобы к нам ничего, кроме набора бит не попало.
int Value = 111; //значение для отображения на индикаторе ---- и вот беда одинаковые выводятся идеально разные выводят хаос
byte i=0;
byte segments[10] = { //Массив из 10 значений
B01111111, //0
B00010100, //1
B10101110, //2
B10011110, //3
B11010100, //4
B11011010, //5
B11111010, //6
B00010110, //7
B11111111, //8
B11011111 //9 Бинарное значение цифры в моем подключении индикатора и сдвигового регистра, когда q1->a,..q7->g,q0->DP
};

void setup()
{
      for(byte j=0;j<3;j++)pinMode(digitPins[j],OUTPUT); //цикл - назначаем всем режим выход из нашего массива пинов
      pinMode(DATA_PIN, OUTPUT);
      pinMode(CLOCK_PIN, OUTPUT);
      pinMode(LATCH_PIN, OUTPUT);
}
        // Моя функция для работы с индикатором и сдвиговым регистром 74НС595
        void printInd()
        {
        //цифровые выходы из массива в 0 (LOW) - отключаем используем цикл
        for(byte d=0; d<3; d++) digitalWrite(digitPins[d], LOW);

        //Для начала записи в 74HC595 нужно подать 0 на STCP (открыть)
        digitalWrite(LATCH_PIN, LOW);
        // с данными выпускаем поток битов на DS  синхроннированные с SHCP
        shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, segments[Disp[i]]);
        // А теперь когда последний бит числа передали закрываем
        digitalWrite(LATCH_PIN, HIGH);
        //на индикатор подаем 5V смотреть в DATASHEET вашего индикатора!!!
        digitalWrite(digitPins[i], HIGH);
        delayMicroseconds(300); //Частота мирцания и собственно она же яркость индикатора:)
        //delay(1000);// проследить появление
        i++;
        if(i > 2) i=0;
        }
void loop()
{
//Выводим значение отсрочки срабатывания таймера на дисплей
Disp[0] = (Value/100)%10; //сотни
Disp[1] = (Value/10)%10; //десятки
Disp[2] = Value%10; //единицы
printInd(); //Функция для отображения на индикаторе
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У Вас неверный подход к написани комментариев, потому программа непонятна (через месяц Вы её и сами не поймёте). Писать надо не то, что итак написано в коде (только словаит), а то, что этот код означает в терминах сутевой задачи.

Вот сейчас я возму хрустальный шар и попытаюсь угадать, что такое массив digitPins, про который Вы скромно написали, что "Массив пинов. Выбрал произвольные кониакты у меня Мега". Если угадаю - подскажу Вам, а не угадаю - буду зря пальцы об клавиатуру бить. А я должен был не угадывать, а знать точно из Ваших комментариев.

Итак, я предполагаю, что у Вас трёхразрядный семисегментник и в массиве digitPins содержатся номера пинов к которым подключены общие вывод трёх разрядов. Правильно? А выводы сегментов подсоединены к регистру. Так? Угадываю далее, чтобы разряд начал светиться. на соответвующий пин из массива нужно digitPins подать LOW, а если подать HIGH, то он гаснет. Или наоборот? Возможно и так, и так. Точно как у Вас? Ответьте. Только ответьте не теоретически, а проверьте (я ниже напишу как проверять) Дело в том, что в Вашей программе есть элементы и такого и такого подходов :(

В общем, судя по массиву segments, хотя он у Вас вообще странный. В цифре 0 должны светиться 6 сегментов, а у Вас там 7 единиц. Это что? В общем, все цифры тоже надо проверить.

В программе у Вас точно неверно программируется динамическая индикация. И задержка какая-то левая и разряды как попало включаются.

Но, давайте, прежде, чем мне Вам что-то обяснять, Вы ответите на мои вопросы. Для этого сделайте такую проверку:

1. Забудьте про loop всё делаем в setup. lopp пустой
2. В setup. Включаете 1 разряд (любой) в выводите цифры от 0 до 9 с интервалом скажем в 1 сек. Никакой динамики - вывели цифру, подождали секунду, вывели другую. Можно циклом. Работаем только с одним разрядом.

Таким образом Вы А) полюбуетесь на цифры и, если надо подправите их в массиве segments (а я думаю, что надо) и Б) убедитесь, что Вы точно правильно понимаете как включать сегмент и как выключать.

Когда это сделаете, выложите получившийся код, я расскажу Вам как делать динамическую индикацию. У Вас к ней сам подход неверный. Какая-то 300мс задержка, светятся по два сразу (потоу у Вас и "одинаковые нормально, а разные - грязь). При динамической индикации всегда светится только один разряд - никогда два! В общем, делайте что я сказал, потом продолжим.

alexey3
Offline
Зарегистрирован: 25.11.2017

Ну в общем всё не совсем так

Скетчь я скопировал так как написать сам не смог, синтаксис подводит

В цифре 0 первый бит стоит 0

суть задачи прицепить семисегментный дисплей, и модуль p10, и 2 кнопки для того чтобы прибавлять и убавлять цифры

на обоих "дисплеях должно выводится одно и тоже

дядька на автобусе работает попросил ему сделать такую штуку , менять номер маршрута

по поводу диджит пинс ломаю голову у меня к этим пинам ничего не подключено

собираю щас на уне.

Ну вот как то так

Семисегментник с регистрами собирал сам

 

lean_74
Offline
Зарегистрирован: 22.12.2015

Это светодиодная матрица 32х16 с разьемом hub08? типа такой https://habr.com/post/372215/

alexey3
Offline
Зарегистрирован: 25.11.2017

Именно так, но с матрицей я разобрался только мерцание осталось

А вот и фото проекта

lean_74
Offline
Зарегистрирован: 22.12.2015

там в статье все есть и про мерцание тоже, еще 256

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexey3 пишет:

по поводу диджит пинс ломаю голову у меня к этим пинам ничего не подключено

И Вы используете их в программе? 

Пойду, накачу за то, чтоб миллиc не переполнялся от такой жизни :(

alexey3
Offline
Зарегистрирован: 25.11.2017

И как всегда вы правы Евгений плагиат плохо

Прилагаю код уже сам написал всё выводится нормально но не могу вставить миллис вместо делей

И беда в том что цыфры в семисегментнике смещаются или устал я уже

#include <SPI.h>
#include <DMD2.h>
#include <fonts/Arial_Black_16.h>     // Используемый шрифт
#define CLOCK 10 //SH_CP 11 74СН
#define DATA 12 //DS 14 74СН
#define LATCH 4 //ST_CP 12 74СН
int inPin1 = 3;
int inPin2 = 5;
int val = 0;

//- распиновка сегментов
byte numberSegments[10] = {
0b11111110, 0b00101000, 0b01110101, 0b01111001, 0b00101011,
0b01011011, 0b01011111, 0b01101000, 0b11111111, 0b11111011,
};
  
//Number of P10 panels used X, Y
SoftDMD dmd(1,1);                     // Установка количества модулей

// Set Box (dmd, x, y, Height, Width)  // Устанoвка размера
DMD_TextBox box(dmd, 4, 1, 32, 16); 

void setup()
{
  Serial.begin(9600); 
  pinMode(inPin1, INPUT_PULLUP);
  pinMode(inPin2, INPUT_PULLUP);
  dmd.setBrightness(5);               // Установка яркости 0 - 255 
  dmd.selectFont(Arial_Black_16);      // Используемый шрифт
  dmd.begin();                         // Старт вывода 
  box.print(val);                    // Текст для отображения

  //настраиваем контакты на выход
  pinMode(CLOCK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(LATCH, OUTPUT);

  //отключаем LATCH (чтобы регистр не ждал данных)
  digitalWrite(LATCH, HIGH);
  
}

void loop()
{
   int sensorVal = digitalRead(inPin1);
   if (sensorVal == LOW)
     {
       val = (val+1);
     }
   int sensorVal1 = digitalRead(inPin2);
   if (sensorVal1 == LOW)
     {
       val = (val-1);

     }

{
//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, numberSegments[val]);
//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, HIGH);

}

     
   DMD_TextBox box(dmd, 5, 1, 32, 16); 
   dmd.begin();                         // Старт вывода 
   box.print(val);                    // Текст для отображения
   delay (251);
   Serial.println(val);
}

//___________________________________________________________________________________

void UP()
{

}

//___________________________________________________________________________________


void DOWDN()
{
  
}

Ну в общем вы меня и научили работать с семисегментниками

беда в том что я не постоянно занимаюсь только ими

А потому многое забываю

Всё равно спасибо, и вы мне так и не обьяснили действия строк по формуле % для десяток сотен

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я вечером посмотрю код. А про формулу,я не понял вопроса, что объяснить-то?

alexey3
Offline
Зарегистрирован: 25.11.2017

Вы вставляли формулу для регистров 10ки , сотни, единцы, и я все скетчи перерыл не могу найти тот для станции где вы формулы вставляли

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я не помню когда и что я вставлял. Если что-то непонятно, задайте вопрос полностью, не ссылаясь на предыдущие действия, чтобы я понял что Вы спрашиваете.

Сейчас я отваливаю, но ближе к вечеру посмотрю и отвечу.

alexey3
Offline
Зарегистрирован: 25.11.2017

tisyacha = 1234/1000;
sotnya = (1234 % 1000) / 100;
desatka = (1234 % 100) / 10;
edinica = 1234 % 10

Вот не пойму я куда в скетчь поставить формулы и где и как прибавить разряд