что за кодировка
- Войдите на сайт для отправки комментариев
Пнд, 07/01/2019 - 15:57
Подскажите пожалусто , этим запрограмирован модуль что ето за кодировка ?
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
};
Подскажите пожалусто , этим запрограмирован модуль что ето за кодировка ?
судя по колиеству байт, это не кодировка, а фактически битмап этой строки в виде конкретного фонта для конкретного дисплея.
ну в общем то да, Поясните что такое битмап и как мне его победить ?
Ну, это просто картинка. А как Вам надо его побеждать? Что Вы с ним хотите делать?
Евгений здраствуйте вообще вывести цифры надо на модуль р10 16х32
Ну, это просто картинка. Если Вам нужно разные цифры выводить, то лучше нарисовать цифровой шрифт. Это очень легко. Пишете цифры в пэйнте или любом друго графическом редакторе. Сохраняете каждую цифру как картинку (.bmp например). На картинки напускаете бесплатную программку типа "LCD Assistant" и она выдаёт Вам примерно такой как у Вас в первом посте массив для каждой цифры. Т.е. каждая цифра будет отдельной "катрнкой". Потом, когда нужно напечатать цифру, просто выводите на экранн нужную "картинку".
Можно и готовый шрифт скачать, но это искать надо, по мне так бстрее сделать. Да и когда делаешь - можешь выбрать любой шрифт и вообще выпендриться.
ну а пока что вот что вышло
Возьмите тот же LCD Assistant, проведите через него рожицу (смайлик) и выведите на свой экран - красиво будет.
щас буду пробовать
Чтото не выходит с ассистом
работайте - выйдет
отчитываюсь вышло всё работает но есть мерцание
И Евгений если можно подскажите по коду что не так я сделал
код про сдвиговые регистры семисегментные уже но ето будет вместе всё работать с модулем
проблема такова что одинаковые цифры выводятся верно разные вызывают хаос
// 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(); //Функция для отображения на индикаторе }У Вас неверный подход к написани комментариев, потому программа непонятна (через месяц Вы её и сами не поймёте). Писать надо не то, что итак написано в коде (только словаит), а то, что этот код означает в терминах сутевой задачи.
Вот сейчас я возму хрустальный шар и попытаюсь угадать, что такое массив digitPins, про который Вы скромно написали, что "Массив пинов. Выбрал произвольные кониакты у меня Мега". Если угадаю - подскажу Вам, а не угадаю - буду зря пальцы об клавиатуру бить. А я должен был не угадывать, а знать точно из Ваших комментариев.
Итак, я предполагаю, что у Вас трёхразрядный семисегментник и в массиве digitPins содержатся номера пинов к которым подключены общие вывод трёх разрядов. Правильно? А выводы сегментов подсоединены к регистру. Так? Угадываю далее, чтобы разряд начал светиться. на соответвующий пин из массива нужно digitPins подать LOW, а если подать HIGH, то он гаснет. Или наоборот? Возможно и так, и так. Точно как у Вас? Ответьте. Только ответьте не теоретически, а проверьте (я ниже напишу как проверять) Дело в том, что в Вашей программе есть элементы и такого и такого подходов :(
В общем, судя по массиву segments, хотя он у Вас вообще странный. В цифре 0 должны светиться 6 сегментов, а у Вас там 7 единиц. Это что? В общем, все цифры тоже надо проверить.
В программе у Вас точно неверно программируется динамическая индикация. И задержка какая-то левая и разряды как попало включаются.
Но, давайте, прежде, чем мне Вам что-то обяснять, Вы ответите на мои вопросы. Для этого сделайте такую проверку:
1. Забудьте про loop всё делаем в setup. lopp пустой
2. В setup. Включаете 1 разряд (любой) в выводите цифры от 0 до 9 с интервалом скажем в 1 сек. Никакой динамики - вывели цифру, подождали секунду, вывели другую. Можно циклом. Работаем только с одним разрядом.
Таким образом Вы А) полюбуетесь на цифры и, если надо подправите их в массиве segments (а я думаю, что надо) и Б) убедитесь, что Вы точно правильно понимаете как включать сегмент и как выключать.
Когда это сделаете, выложите получившийся код, я расскажу Вам как делать динамическую индикацию. У Вас к ней сам подход неверный. Какая-то 300мс задержка, светятся по два сразу (потоу у Вас и "одинаковые нормально, а разные - грязь). При динамической индикации всегда светится только один разряд - никогда два! В общем, делайте что я сказал, потом продолжим.
Ну в общем всё не совсем так
Скетчь я скопировал так как написать сам не смог, синтаксис подводит
В цифре 0 первый бит стоит 0
суть задачи прицепить семисегментный дисплей, и модуль p10, и 2 кнопки для того чтобы прибавлять и убавлять цифры
на обоих "дисплеях должно выводится одно и тоже
дядька на автобусе работает попросил ему сделать такую штуку , менять номер маршрута
по поводу диджит пинс ломаю голову у меня к этим пинам ничего не подключено
собираю щас на уне.
Ну вот как то так
Семисегментник с регистрами собирал сам
Это светодиодная матрица 32х16 с разьемом hub08? типа такой https://habr.com/post/372215/
Именно так, но с матрицей я разобрался только мерцание осталось
А вот и фото проекта
там в статье все есть и про мерцание тоже, еще 256
по поводу диджит пинс ломаю голову у меня к этим пинам ничего не подключено
И Вы используете их в программе?
Пойду, накачу за то, чтоб миллиc не переполнялся от такой жизни :(
И как всегда вы правы Евгений плагиат плохо
Прилагаю код уже сам написал всё выводится нормально но не могу вставить миллис вместо делей
И беда в том что цыфры в семисегментнике смещаются или устал я уже
#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() { }Ну в общем вы меня и научили работать с семисегментниками
беда в том что я не постоянно занимаюсь только ими
А потому многое забываю
Всё равно спасибо, и вы мне так и не обьяснили действия строк по формуле % для десяток сотен
Я вечером посмотрю код. А про формулу,я не понял вопроса, что объяснить-то?
Вы вставляли формулу для регистров 10ки , сотни, единцы, и я все скетчи перерыл не могу найти тот для станции где вы формулы вставляли
Я не помню когда и что я вставлял. Если что-то непонятно, задайте вопрос полностью, не ссылаясь на предыдущие действия, чтобы я понял что Вы спрашиваете.
Сейчас я отваливаю, но ближе к вечеру посмотрю и отвечу.
tisyacha = 1234/1000;
sotnya = (1234 % 1000) / 100;
desatka = (1234 % 100) / 10;
edinica = 1234 % 10
Вот не пойму я куда в скетчь поставить формулы и где и как прибавить разряд