Спасибо за критику, хоть немного и с перебором. Я на форуме первый раз в жизни, а ардуинку в руки неделю назад взял. Час назад даже как правильно код вставить не знал, lean_74 не даст соврать. Уровень у всех разный. По поводу сетап и луп понимание есть, но по моему чем детальнее опишешь проблему, тем понятнее специалисту. Теперь о главно, начал с конца, т.е. убрал делей и ВСЕ ЗАРАБОТАЛО , за помощь безмерно благодарен. Проблема только в том, что очень быстро меняется значение - не успеваешь, 2-3 цифры проскакивают. Думаю дело не в дребезге. Удерживая кнопку перелистывание продолжается и при переходе с 9 в 0 старший разряд увеличивается на единицу. Можно ли как нибудь это победить? Спасибо.
Нужно наверно исправить саму
функцию вывода числа void ShowClockNumbers
Там все четыре числа( разряда) выводятся, в этом нет необходимости
если вы меняете по нажатию кнопки то можно менять одно число(разряд)
Или нет!
как вариант запоминать число после нажатия высшего разряда клавиши, сравнивать его с числом из нижнего и если оно больше на 10 то отнимать от переменной - 10.
С сотнями так же, если больше 100 то -100, с тысячами так же, если больше или равно 1000 то -1000
Как то так. Нужно подумать.
На счёт дребезга, я бы не был так уверен что его нет.
Возможно нужно поиграть со светодиодами, кнопками и простыми примерами с тем по семисегментным индикаторам.
iupd
У вас не разряды десятки сотни тысячи единици, и вам нужно 4отдельных функции вывода каждой цифры
Если 9+1 это не 10 а 0
Изменить
Проще всего для каждого числа(разряда) завести свою переменную
Четыре переменных крути от 0 до 9 если 10 то =0
В void ShowClockNumbers изменить переменные
void ShowClockNumbers ( unsigned int ui )
Это для того. чтобы с помощью 4 кнопок выставить любое 4-значное число, а связи между разрядами быть не должно. От одной до 4 команд -участников возможно. Если 9+1будет равно 10, то придется кнопки долго нажимать...Так решили, так будем делать. Спасибо. Буду пробовать подставлять.
// задаем константы
const int buttonAPin = 13; // номер входа, подключенный к кнопке A
const int buttonBPin = 2; // номер входа, подключенный к кнопке B
const int buttonCPin = 3; // номер входа, подключенный к кнопке C
const int buttonDPin = 4; // номер входа, подключенный к кнопке D
// переменные
int buttonStateA = 0; // переменная для хранения состояния кнопки a
int buttonStateB = 0; // переменная для хранения состояния кнопки b
int buttonStateC = 0; // переменная для хранения состояния кнопки c
int buttonStateD = 0; // переменная для хранения состояния кнопки d
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;
void setup() {
// initialize serial:
Serial.begin(9600);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonAPin, INPUT);
pinMode(buttonBPin, INPUT);
pinMode(buttonCPin, INPUT);
pinMode(buttonDPin, INPUT);
}
void loop(){
// считываем значения с входа кнопки
buttonStateA = digitalRead(buttonAPin);
// проверяем нажата ли кнопка a
// если нажата, то buttonStateA будет HIGH:
if (buttonStateA == HIGH&& flag1 == 0) {
Serial.println("a");
flag1 = 1;//поднимаем флаг
}
if (digitalRead(buttonAPin) == LOW && flag1 == 1) //если первая кнопка не нажата ..
{
flag1 = 0; //обнуляем переменную flag, опускаем флаг
}
//// проверяем нажата ли кнопка b
// // если нажата, то buttonState будет HIGH:
// if (buttonState == HIGH&& flag2 == 0) {
// Serial.println("b");
// flag2 = 1;//поднимаем флаг
// }
//
// if (buttonState == LOW && flag2 == 1) //если первая кнопка не нажата ..
// {
// flag2 = 0; //обнуляем переменную flag, опускаем флаг
// }
//
//// проверяем нажата ли кнопка c
// // если нажата, то buttonState будет HIGH:
// if (buttonState == HIGH&& flag3 == 0) {
// Serial.println("a");
// flag3 = 1;//поднимаем флаг
// }
//
// if (buttonState == LOW && flag3 == 1) //если первая кнопка не нажата ..
// {
// flag3 = 0; //обнуляем переменную flag, опускаем флаг
// }
//
//
// // проверяем нажата ли кнопка d
// // если нажата, то buttonState будет HIGH:
// if (buttonState == HIGH&& flag4 == 0) {
// Serial.println("a");
// flag4 = 1;//поднимаем флаг
// }
//
// if (buttonState == LOW && flag4 == 1) //если первая кнопка не нажата ..
// {
// flag4 = 0; //обнуляем переменную flag, опускаем флаг
// }
}
Сообщения 305 и 307 еще не прорабатывал, позже... У меня такой вопрос а нельзя ли для замедления смены цифры воспользоваться delay ? К примеру вот так:
void loop(void)
{
if(digitalRead(1)==HIGH)//если кнопка нажата ..
ui = ui+1; // прибавляем 1
ShowClockNumbers( ui, true );
delay (100);
}
И так для каждой кнопки. Можно было-бы получить желаемую задержку. Спасибо.
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит. И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит. И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.
Уважаемый,b707 не ужели Вы подумали, что я не пробовал с delay? Очень ПО РАЗНОМУ пытался, но не компилируется и все тут, ну и спросить решил. Смотрю сообщение новое, обрадовался. А получилось как в том анекдоте: желая получить беспл. консультацию у врача человек спрашивает - доктор, что вы делаете когда простудились? На что доктор отвечает - лечусь. Сможет кто помоч разобраться - благодарен буду, нет - нет так нет. Земля же не остановит свое вращение. Рано или поздно разберусь - опыта наберусь. А обидел если - извините.
Убираю delay - все компилируется и работает, только быстро перелистывает. С помощью delay думал замедлить. Самому не понятно, вроде все работать должно... Спасибо.
VsemDobra - попробуйте переключить ИДЕ на любую другую плату и запустите компиляцию (не важно, что будут ошибки). Потом снова вернитесь на нужную плату и соберите снова, вполне возможно, что ошибка линкера исчесзнет.
Переключение на другие платы ничего не дало. Воспользовался предыдущим Вашим советом, снес IDE 1.6.7 и установил 1.8.7 и все получилось. Заметил и раньше, что старая IDE 1.6.7 кривая была - пару раз окно скетча само по себе закрывалось. Есть конечно над чем еще поработать, но и показать уже есть что. Хочется разделить разряды, ну чтобы крутилась по кругу только одна цифра. Позже вернусь к этой задаче. Но в первую очередь неплохо бы организовать сохранение текущих значений цифр. Тут я пока совсем мелко плаваю. Полагаю следует в код вписать команду. Но, что это за команда и куда ее привинтить?
Огромное СПАСИБО dneese, d707 за реальную помощь в решении реальной задачи.
Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица). На сегодня достаточно, продолжу завтра на свежую голову - все перепроверю, может сам пропустил чего.
Спасибо dneese за Вашу помощь. Код предложенный Вами в начале - вполне рабочий. Как я уже написал, IDE у меня оказалась кривой. delay хоть и не рекомендуется, но в данном случае неплохо справляется. И с дребезгом паралельно борется.
VsemDobra - во-первых, посмотрите исправленный код dneese в сообщении #325 и исправте у себя.
А во-вторых, зачем вы показываете мне его код - вы же вроде написали, что вы его код поправили и добавили делеи... не вижу их в коде. Выкладывайте свой код, который у вас не работает.
Господа, случилась набольшая путаница. В #316 код от dneese в который я добавил делеи и который скомпилировался и заработал только при ИДЕ 1.8.7. (не считая перелистывание цифр пока нажата кнопка - это видно по коду и этим в принципе можно пренебреч). В #324 я добавлил только 2 кнопки, без делеев. Просто не успел его детальнее проработать - профукал копипаст. Учусь пока я - опыта почти нет. Проверю код из #325 и отпишусь. Спасибо.
pinMode(1, INPUT); // устанавливает режим работы - вход для 0го вход/выхода (pin)
pinMode(2, INPUT); // устанавливает режим работы - вход для 1го вход/выхода (pin)
pinMode(3, INPUT); // устанавливает режим работы - вход для 2го вход/выхода (pin)
pinMode(4, INPUT); // устанавливает режим работы - вход для 3го вход/выхода (pin)
}
void loop(void)
{
if(digitalRead(1)==HIGH)//если кнопка нажата ..
{ ui = ui+1; // прибавляем 1
ShowClockNumbers( ui, true );
delay(100);
}
if(digitalRead(2)==HIGH)//если кнопка нажата ..
{ ui = ui+10; // прибавляем 10
ShowClockNumbers( ui, true );
delay(100);
}
if(digitalRead(3)==HIGH)//если кнопка нажата ..
{ ui = ui+100; // прибавляем 100
ShowClockNumbers( ui, true );
delay(100);
}
if(digitalRead(4)==HIGH)//если кнопка нажата ..
{ ui = ui+1000; // прибавляем 1000
ShowClockNumbers( ui, true );
delay(100);
}
}
прикрутить запоминание текущих значений цифр при отключении питания. Есть понимание, что это делается с помощью EEPROM (на борту IDE имеется). А как?, что?, куда? - нет мыслей. Направьте пожалуйста на путь истинный. Спасибо.
void writeEprom(){ // запись числа в память
int bigNum = ui; // число > 255 разбиваем на 2 байта (макс. 65536)
byte hi = highByte(bigNum); // старший байт
byte low = lowByte(bigNum); // младший байт
EEPROM.write(1, hi); // записываем в ячейку 1 старший байт
EEPROM.write(2, low); // записываем в ячейку 2 младший байт
}
void readEprom (){ //читаем из памяти число
byte val1 = EEPROM.read(1); // считываем 1 байт по адресу ячейки
byte val2 = EEPROM.read(2); // считываем 1 байт по адресу ячейки
ui=val1*256+val2; //складываем число и присваеваем переменной ui
}
dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты
dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты
void writeEprom(){ // запись числа в память
int bigNum = ui; // число > 255 разбиваем на 2 байта (макс. 65536)
byte hi = highByte(bigNum); // старший байт
byte low = lowByte(bigNum); // младший байт
EEPROM.write(1, hi); // записываем в ячейку 1 старший байт
EEPROM.write(2, low); // записываем в ячейку 2 младший байт
}
для записи bigNum в ЕЕПРОМ достаточно одной строчки
Доброго времени суток. Как обещал проверил код из #325. Немного причесал - пронумеровал переменные, добавил еще 2 кнопки. Все работает. Правда при включении ничего не светится. Цифры появляются только при первом нажатии на любую из кнопок. Думаю это легко исправить, попробую справиться сам... В итоге получилось 2 варианта решения одной задачи и оба по своему хороши. Респект dneese и b707.
Всем - здравствуйте. Мой незатейливый девайс (#289 #291) сделаный для дет.сада заинтересовал учителя физкультуры из местной школы. Только вот экран из одного модуля 32Х16 оказалось маловат. Решили собрать из четырех подобных модулей, на таком же ардуино уно. Модули соединяются так
1 2
3 4
Шрифт оказался так же мал, хоть и удалось выставить по центру. Решил по совету из #247 с помощью GLCD Font Creator создать новый шрифт. Файл экспортировал в DMD. Но скетч упорно не желает компилироваться 3-й день бьюсь. Помогите разобраться , что не так или может есть другой способ вывести 4 цифры на экран из четырех модулей, с возможностью выставлять любую цифру с помощью 4-х кнопок. Спасибо.
In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from sketch\sketch_apr05b.ino.cpp:1:
C:\Documents and Settings\Admin\Мои документы\Arduino\libraries\DMD/Small.h:48:27: error: variable 'new_Font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Здравствуйте. С памятью не удается разобраться. Надо чтобы при подаче питания на дисплее появлялись цифры какие были на момент выключения питания. Скетч компилируется, но на дисплее при включении нули. Подскажите пожалуйста, чего не хватает или что не на своем месте в коде? Спасибо.
#include <EEPROM.h>
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "Smmall.h"
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
unsigned int ui;
int bigNum = ui;
void ScanDMD()
{
dmd.scanDisplayBySPI();
}
void ShowClockNumbers( unsigned int uiTime, byte bColonOn )
Э-эээ... такое впечатление, что вы программирование совсем не знаете... надо либо осваивать, либо, простите, не стоит и лезть.
В этом коде очевидно не на своем месте EEPROM.get() и EEPROM.put().
EEPROM.get должен вызываться в setup() до использования bigNum, а EEPROM.put вообще нельзя вызывать в Loop() - вы так EEPROM убьете за пару часов, если еще не убили.
Вставьте код правиьно, чтобы можно было обсуждать с номерами строк.
Э-эээ... такое впечатление, что вы программирование совсем не знаете... надо либо осваивать, либо, простите, не стоит и лезть.
Знаний по программированию - минимум, с самого начала говорил об этом. Ну уж очень интересно и увлекательно. Код как надо вставил, гляньте пожалуйста. Спасибо.
/*This example illustrates two user funcions of LedP10 library
*First function-showmsg_single_scroll is for scroling of single message on P10 panel with 4 arguments which are message, no. of times of message scrolling, speed and font.
*for message, pointer to a character string can be passed. For continuously running the message, INF can be passed in second argument, spped can be in range of 0-30,
and font can be 0 or 1 as two type of fonts are currently supported for full screen messages.
* For second function-showmsg_double_scroll, there would be 7 arguments, 2 for messages, two for no. of times of message scrolling, two for speed, and last one for font.
* Specification being same as for single scrolling function, except only ont font id provided for double scrolling and it's value should be 0.
*
*/
#include <TimerOne.h>
#include"SPI.h"
#include <ledP10.h>
LedP10 myled;
void setup()
{
myled.init(6,7,8,9 ,1);
/*
P10 Select Line A - Arduino Pin 6
P10 Select Line B - Arduino Pin 7
P10 Store Line - Arduino Pin 8
P10 OE Line - Arduino Pin 9
No. of Panels - 1 (Can be up to 10)
*/
myled.showmsg_single_scroll("this is single led test",2,3,0);
//(сообщение,сколько раз,скорость,шрифт)
delay(30000);
myled.showmsg_double_scroll("this is double led test1","this is double led test2",10,INF,3,1,0);
//("mesage1","mesage2",сколько раз,inf,speed,speed,font)
//inf-безконечно
}
void loop() {
}
Уважаемый dneese
Спасибо за критику, хоть немного и с перебором. Я на форуме первый раз в жизни, а ардуинку в руки неделю назад взял. Час назад даже как правильно код вставить не знал, lean_74 не даст соврать. Уровень у всех разный. По поводу сетап и луп понимание есть, но по моему чем детальнее опишешь проблему, тем понятнее специалисту. Теперь о главно, начал с конца, т.е. убрал делей и ВСЕ ЗАРАБОТАЛО , за помощь безмерно благодарен. Проблема только в том, что очень быстро меняется значение - не успеваешь, 2-3 цифры проскакивают. Думаю дело не в дребезге. Удерживая кнопку перелистывание продолжается и при переходе с 9 в 0 старший разряд увеличивается на единицу. Можно ли как нибудь это победить? Спасибо.
Нужно наверно исправить саму
функцию вывода числа void ShowClockNumbers
Там все четыре числа( разряда) выводятся, в этом нет необходимости
если вы меняете по нажатию кнопки то можно менять одно число(разряд)
Или нет!
как вариант запоминать число после нажатия высшего разряда клавиши, сравнивать его с числом из нижнего и если оно больше на 10 то отнимать от переменной - 10.
С сотнями так же, если больше 100 то -100, с тысячами так же, если больше или равно 1000 то -1000
Как то так. Нужно подумать.
На счёт дребезга, я бы не был так уверен что его нет.
Возможно нужно поиграть со светодиодами, кнопками и простыми примерами с тем по семисегментным индикаторам.
iupd
У вас не разряды десятки сотни тысячи единици, и вам нужно 4отдельных функции вывода каждой цифры
Если 9+1 это не 10 а 0
Изменить
Проще всего для каждого числа(разряда) завести свою переменную
Четыре переменных крути от 0 до 9 если 10 то =0
В void ShowClockNumbers изменить переменные
void ShowClockNumbers ( unsigned int ui )
{
dmd.clearScreen(true);
dmd.drawChar( 0, 1, '0'+((ui1), GRAPHICS_NORMAL ); // thousands
dmd.drawChar( 8, 1, '0'+((ui2), GRAPHICS_NORMAL ); // hundreds
dmd.drawChar( 17, 1, '0'+((ui3), GRAPHICS_NORMAL ); // tens
dmd.drawChar( 25, 1, '0'+ (ui4), GRAPHICS_NORMAL ); // units
dmd.drawChar( 15, 3, '.', GRAPHICS_OR ); // clock colon overlay on
}
В сетупе назначить их И в лупе их обработать
Примерно так?
попробуйте сами,
и ещё после
с другими так же.
только я не пойму что это за девайс такой в котором 9+1 не равно 10 а равно 0 ?
Это для того. чтобы с помощью 4 кнопок выставить любое 4-значное число, а связи между разрядами быть не должно. От одной до 4 команд -участников возможно. Если 9+1будет равно 10, то придется кнопки долго нажимать...Так решили, так будем делать. Спасибо. Буду пробовать подставлять.
Попробовал, работает. От 0 до 9 крутится, другие разряды не задевает. А скорость осталась прежней, все равно проскакиваешь.
все равно проскакиваешь.
для других кнопок подправить код
Сообщения 305 и 307 еще не прорабатывал, позже... У меня такой вопрос а нельзя ли для замедления смены цифры воспользоваться delay ? К примеру вот так:
VsemDobra - ну так попробуйте, чего спрашивать7
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
Если спросил, значит не зря спросил...
ты неделю назад зарегился, а уже хамишь, неправильно это, и обращение на ВЫ, тебя врядли отмажет.
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит. И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.
А я , извините не у Вас спрашивал, а у человека который реально помог советами. А Ваши "ценный" совет оставте пожалуйста себе. Если спросил, значит не зря спросил...
А почему мой совет - "ценный" в кавычках? - я посмотрел код и мне кажется, что delay() тут ничего не испортит. И в любом случае, исправив одну строчку кода - ответ вы могли бы узнать за 2 минуты, вместо того чтоб хамить. Но если больше нравится ждать у моря погоды несколько часов - а может и дней - то ждите.
Уважаемый,b707 не ужели Вы подумали, что я не пробовал с delay? Очень ПО РАЗНОМУ пытался, но не компилируется и все тут, ну и спросить решил. Смотрю сообщение новое, обрадовался. А получилось как в том анекдоте: желая получить беспл. консультацию у врача человек спрашивает - доктор, что вы делаете когда простудились? На что доктор отвечает - лечусь. Сможет кто помоч разобраться - благодарен буду, нет - нет так нет. Земля же не остановит свое вращение. Рано или поздно разберусь - опыта наберусь. А обидел если - извините.
не ужели Вы подумали, что я не пробовал с delay? Очень ПО РАЗНОМУ пытался, но не компилируется и все тут
VsemDobra, что вообще в этом крохотном кусочке может не компилироваться? Или вы о том, что там скобки не хватало? - добавил:
если опять будут проблемы - приведите точный текст сообщения об ошибке
не флудите пожалуйста на техническом форуме,
я выше предложил уже такую конструкцию, вы её пробовали? делей вам не нужен, не используйте его без надобности, упростил Вам код
такая конструкция кода позволяет нажимать кнопку и испольнять код один раз пока кнопка не отожмётся и снова не нажмётся
, у меня нет свободных выходов поэтому проверить немогу, проверьте сами только не перепутайте выходы кнопок с выходами на дисплей
dneese - поясните, плиз, смысл вот этой заковыристой конструкции:
чему все-таки должен равнятся первый член выражения - HIGh или LOW ?
А насчет делеев Вы зря. В том элементарном коде, что привел VsemDobra, они, ИМХО, вполне будут работать
Только что собрал Ваш код - никаких ошибок. Результат:
Ардуино ИДЕ 1.8.3 , библиотеки с гитхаба.
Думаю, у вас какие-то проблемы с конфигурацией среды, с делеями это вряд ли связано
VsemDobra - попробуйте переключить ИДЕ на любую другую плату и запустите компиляцию (не важно, что будут ошибки). Потом снова вернитесь на нужную плату и соберите снова, вполне возможно, что ошибка линкера исчесзнет.
Переключение на другие платы ничего не дало. Воспользовался предыдущим Вашим советом, снес IDE 1.6.7 и установил 1.8.7 и все получилось. Заметил и раньше, что старая IDE 1.6.7 кривая была - пару раз окно скетча само по себе закрывалось. Есть конечно над чем еще поработать, но и показать уже есть что. Хочется разделить разряды, ну чтобы крутилась по кругу только одна цифра. Позже вернусь к этой задаче. Но в первую очередь неплохо бы организовать сохранение текущих значений цифр. Тут я пока совсем мелко плаваю. Полагаю следует в код вписать команду. Но, что это за команда и куда ее привинтить?
Огромное СПАСИБО dneese, d707 за реальную помощь в решении реальной задачи.
Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица). На сегодня достаточно, продолжу завтра на свежую голову - все перепроверю, может сам пропустил чего.
Спасибо dneese за Вашу помощь. Код предложенный Вами в начале - вполне рабочий. Как я уже написал, IDE у меня оказалась кривой. delay хоть и не рекомендуется, но в данном случае неплохо справляется. И с дребезгом паралельно борется.
dneese - поясните, плиз, смысл вот этой заковыристой конструкции:
чему все-таки должен равнятся первый член выражения - HIGh или LOW ?
Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица).
код выкладывайте
Попробовал, добавил еще 2 кнопки. Компилируется, но коректно работает только вторая кнопка (одно нажатие, одна единица).
код выкладывайте
Код из сообшения 315 , + 2 кнопки.
исправил копипаст был, а сами не догадались? :-)
не флудите пожалуйста на техническом форуме,
я выше предложил уже такую конструкцию, вы её пробовали? делей вам не нужен, не используйте его без надобности, упростил Вам код
такая конструкция кода позволяет нажимать кнопку и испольнять код один раз пока кнопка не отожмётся и снова не нажмётся
, у меня нет свободных выходов поэтому проверить немогу, проверьте сами только не перепутайте выходы кнопок с выходами на дисплей
VsemDobra - во-первых, посмотрите исправленный код dneese в сообщении #325 и исправте у себя.
А во-вторых, зачем вы показываете мне его код - вы же вроде написали, что вы его код поправили и добавили делеи... не вижу их в коде. Выкладывайте свой код, который у вас не работает.
Господа, случилась набольшая путаница. В #316 код от dneese в который я добавил делеи и который скомпилировался и заработал только при ИДЕ 1.8.7. (не считая перелистывание цифр пока нажата кнопка - это видно по коду и этим в принципе можно пренебреч). В #324 я добавлил только 2 кнопки, без делеев. Просто не успел его детальнее проработать - профукал копипаст. Учусь пока я - опыта почти нет. Проверю код из #325 и отпишусь. Спасибо.
Уважаемые форумчане. Поразмыслил и пришел к выводу, что не плохо бы к выстраданному коду
прикрутить запоминание текущих значений цифр при отключении питания. Есть понимание, что это делается с помощью EEPROM (на борту IDE имеется). А как?, что?, куда? - нет мыслей. Направьте пожалуйста на путь истинный. Спасибо.
вот вам на память:
dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты
dneese, в библиотеке EEPROM давно есть методы put() get() позволяющие прямо писать в ЕЕПРОМ любой тип данных, в том числе и инт - без ручного разбиения на байты
b707, можете пояснить нагляднее ? Спасибо.
b707, можете пояснить нагляднее ? Спасибо.
http://wikihandbk.com/wiki/Arduino:%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8/EEPROM/put()
то есть вместо куска кода выше
для записи bigNum в ЕЕПРОМ достаточно одной строчки
точно так же и с чтением достаточно одной строчки
Доброго времени суток. Как обещал проверил код из #325. Немного причесал - пронумеровал переменные, добавил еще 2 кнопки. Все работает. Правда при включении ничего не светится. Цифры появляются только при первом нажатии на любую из кнопок. Думаю это легко исправить, попробую справиться сам... В итоге получилось 2 варианта решения одной задачи и оба по своему хороши. Респект dneese и b707.
Всем - здравствуйте. Мой незатейливый девайс (#289 #291) сделаный для дет.сада заинтересовал учителя физкультуры из местной школы. Только вот экран из одного модуля 32Х16 оказалось маловат. Решили собрать из четырех подобных модулей, на таком же ардуино уно. Модули соединяются так
1 2
3 4
Шрифт оказался так же мал, хоть и удалось выставить по центру. Решил по совету из #247 с помощью GLCD Font Creator создать новый шрифт. Файл экспортировал в DMD. Но скетч упорно не желает компилироваться 3-й день бьюсь. Помогите разобраться , что не так или может есть другой способ вывести 4 цифры на экран из четырех модулей, с возможностью выставлять любую цифру с помощью 4-х кнопок. Спасибо.
VsemDobra - ошибку компиляции приведите
VsemDobra - ошибку компиляции приведите
Arduino: 1.8.7 , Плата:"Arduino/Genuino Uno"
In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from sketch\sketch_apr05b.ino.cpp:1:
C:\Documents and Settings\Admin\Мои документы\Arduino\libraries\DMD/Small.h:48:27: error: variable 'new_Font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
static uint8_t new_Font[] PROGMEM = {
^
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Гуглопереводчиком вот это:
variable 'new_Font' must be const
Догадаетесь, какое ключевое слово надо дописать в объявлении переменной?
Если бы... оно было бы уже на своем месте...
Если бы... оно было бы уже на своем месте...
А если ещё раз перечитать мой пост выше и обратить внимание на специально выделенное жирным? Всё равно не догадываетесь?
Если бы... оно было бы уже на своем месте...
А если ещё раз перечитать мой пост выше и обратить внимание на специально выделенное жирным? Всё равно не догадываетесь?
Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.
Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.
ну так фонт креатор не знает, как и куда вы будете этот фонт использовать. Правильно описывать тип данных - обязанность программиста.
Спасибо. Нашел куда притулить. Её к стати фонт креатор не дописал в файл. Работает.
ну так фонт креатор не знает, как и куда вы будете этот фонт использовать. Правильно описывать тип данных - обязанность программиста.
Согласен. Но я не программист, а только учусь. А фонт крутая прога, рекомендую всем.
Здравствуйте. С памятью не удается разобраться. Надо чтобы при подаче питания на дисплее появлялись цифры какие были на момент выключения питания. Скетч компилируется, но на дисплее при включении нули. Подскажите пожалуйста, чего не хватает или что не на своем месте в коде? Спасибо.
#include <EEPROM.h>
что не на своем месте в коде?
что не на своем месте в коде?
Знаний по программированию - минимум, с самого начала говорил об этом. Ну уж очень интересно и увлекательно. Код как надо вставил, гляньте пожалуйста. Спасибо.
Народ, вопрос по выводу текста в 2 строки маленьким шрифтом.
У кого-то получалось сделать скроллинг одной строки независимо от второй? Нужна подобная функция в случае, если текст не влезает в табло
да делал такое
Благодарю, попробую. А что за либа ledP10.h?
А что за либа ledP10.h?
специально для модуля P10, альтернатива DMD, DMD2
https://hackaday.io/project/27404-ledp10-arduino-library-for-p10-led-display-panels - это оно? Если нет - поделитесь ссылочкой =)