Страница 7 из 12
Re: Arduino
Добавлено: 24 апр 2017, 11:41
neutrino
barmoglot писал(а):neutrino, реализовать умный дом сможешь?
К сожалению, нет. Я не занимаюсь крупными системами. Если только отдельный датчик или манипулятор, но их уже много готовых, нет смысла изобретать велосипед.
Re: Arduino
Добавлено: 24 апр 2017, 12:12
neutrino
Академик Иосиф писал(а):barmoglot писал(а):neutrino, реализовать умный дом сможешь?
Интересная штука. В теории, мне кажется, это не слишком то и сложно.
Это очень обманчивое впечатление. Даже поддержание постоянной температуры воздуха в помещении - непростая задача в теории.
Re: Arduino
Добавлено: 24 апр 2017, 15:20
Академик Иосиф
neutrino писал(а):
Это очень обманчивое впечатление. Даже поддержание постоянной температуры воздуха в помещении - непростая задача в теории.
Ну почему? Жарко - открыл окно. Холодно - включил топку. И так пока не будет ровно +22.
Re: Arduino
Добавлено: 24 апр 2017, 15:23
FreemanNow
Академик Иосиф, а еще при этом экономить энергию и следить за влажностью и кислородом )
Re: Arduino
Добавлено: 24 апр 2017, 15:29
neutrino
Академик Иосиф писал(а):
Ну почему? Жарко - открыл окно. Холодно - включил топку. И так пока не будет ровно +22.
Что ж, попробуем рассуждать. На примере нагрева воздуха для начала.
Ты выключаешь топку когда воздух ровно +22, она остывает, продолжая отдавать тепло воздуху, когда остынет полностью, температура станет 24, а то и 25. Что будешь делать?
Re: Arduino
Добавлено: 24 апр 2017, 16:36
Академик Иосиф
neutrino писал(а):
Что ж, попробуем рассуждать. На примере нагрева воздуха для начала.
Ты выключаешь топку когда воздух ровно +22, она остывает, продолжая отдавать тепло воздуху, когда остынет полностью, температура станет 24, а то и 25. Что будешь делать?
Вряд ли. Живу ж с котлом, и штоб по инерции нагрело на 2-3 градуса сверху, такого не было никогда и ни разу.
Re: Arduino
Добавлено: 24 апр 2017, 16:45
neutrino
Академик Иосиф писал(а):
Вряд ли. Живу ж с котлом, и штоб по инерции нагрело на 2-3 градуса сверху, такого не было никогда и ни разу.
Это частный случай. Ты же не будешь, получив задание спроектировать умный дом, предлагать всем переехать к тебе или чаще проветривать?
Есть условие задачи. Нужно решение.
Re: Arduino
Добавлено: 24 апр 2017, 18:38
Академик Иосиф
neutrino писал(а):
Это частный случай. Ты же не будешь, получив задание спроектировать умный дом, предлагать всем переехать к тебе или чаще проветривать?
Есть условие задачи. Нужно решение.
Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то.
Re: Arduino
Добавлено: 24 апр 2017, 18:50
neutrino
Академик Иосиф писал(а):
Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то.
Зависит от соотношения мощности нагревателя и объема помещения.
Эффект обычный, техническое решение существует, вопрос сформулирован недвусмысленно. Не виляй, ты же не в Политике )))
Re: Arduino
Добавлено: 24 апр 2017, 18:50
Академик Иосиф
neutrino писал(а):
Выполняемый код покажи.
Главная:
Код: Выделить всё
int main()
{
unsigned char string1[] = "cъешь еще этих";
unsigned char string2[] = "мягких французских";
unsigned char string3[] = "булок, да выпей";
unsigned char string4[] = "чаю! @#;%:?*()_+";
unsigned char string5[] = "СЪЕШЬ ЕЩЕ ЭТИХ";
unsigned char string6[] = "МЯГКИХ ФРАНЦУЗСКИХ";
unsigned char string7[] = "БУЛОК, ДА ВЫПЕЙ";
unsigned char string8[] = "ЧАЮ?[]{}\|/`~";
LCD12864_Init();
_delay_ms(1);
LCD12864_Clr();
_delay_ms(1);
LCD12864_String(0,0,string1,sizeof(string1)-1);
LCD12864_String(1,0,string2,sizeof(string2)-1);
LCD12864_String(2,0,string3,sizeof(string3)-1);
LCD12864_String(3,0,string4,sizeof(string4)-1);
LCD12864_String(4,0,string5,sizeof(string5)-1);
LCD12864_String(5,0,string6,sizeof(string6)-1);
LCD12864_String(6,0,string7,sizeof(string7)-1);
LCD12864_String(7,0,string8,sizeof(string8)-1);
while(1);
}
Вывод строки:
Код: Выделить всё
void LCD12864_String(unsigned char x0,unsigned char y0,char* buffer, unsigned char count)
{
unsigned char x=x0;
unsigned char y=y0;
if((x>8)||(y>127)) return;
LCD12864_GotoXY(x,y);
for(unsigned char i=0;i<count;i++)
{
LCD12864_Char(x,y+6*i,buffer[i]); // игрэком задаётся интервал меж символами
}
}
Вывод символа, который используется в выводе строки:
Код: Выделить всё
void LCD12864_Char(unsigned char x0, unsigned char y0, unsigned char code)
{
unsigned char x=x0;//0..8 - задаем строку где буква выводится
unsigned char y=y0;
if(code<0x80)
code-=0x20;//установка начала стандартных символов
else
code-=0x60;//установка начала русских символов
if(CS==0)
{
CMD_PORT |= (1<<RST)|(1<<CS2);
CMD_PORT &= ~(1<<CS1);
}
else
{
CMD_PORT |= (1<<RST)|(1<<CS1);
CMD_PORT &= ~(1<<CS2);
}
if(x>63 || y>127) return;
for(unsigned int i=0;i<5;i++) // здесь задаётся ширина символа
{
LCD12864_GotoXY(x,y);
if(i<=4)
{
if(MODE==0) LCD12864_Data(symbol[code][i]); // МОДЕ - если 0, то чёрные символы на белом фоне, если 1 - наоборот
else LCD12864_Data(~symbol[code][i]);
}
y+=1;
}
}
Сами символы берутся из отдельного файла, и я ещё не вникал, как они это делают.
Re: Arduino
Добавлено: 24 апр 2017, 19:15
Академик Иосиф
Код: Выделить всё
unsigned char string1[] = "Академик Иосиф";
unsigned char string2[] = "forum.smolensk.ws";
unsigned char string3[] = "2017 год";
unsigned char string4[] = "24 апреля";
unsigned char string5[] = "19:10 (примерно)";
unsigned char string6[] = "На улице +8.3'C";
unsigned char string7[] = "Давление 735 мм рт.ст.";
unsigned char string8[] = "Без осадков";
иркан.jpg
опять штырит, но в другом месте
Re: Arduino
Добавлено: 24 апр 2017, 19:18
Академик Иосиф
я уже молчу про функцию переноса по словам с прокруткой
Re: Arduino
Добавлено: 24 апр 2017, 19:30
neutrino
Попробуй пока такой вариант. Делаем строки глобальными с неизменным адресом и неприкосновенные.
Код: Выделить всё
volatile static unsigned char string1[] = "cъешь еще этих";
volatile static unsigned char string2[] = "мягких французских";
volatile static unsigned char string3[] = "булок, да выпей";
volatile static unsigned char string4[] = "чаю! @#;%:?*()_+";
volatile static unsigned char string5[] = "СЪЕШЬ ЕЩЕ ЭТИХ";
volatile static unsigned char string6[] = "МЯГКИХ ФРАНЦУЗСКИХ";
volatile static unsigned char string7[] = "БУЛОК, ДА ВЫПЕЙ";
volatile static unsigned char string8[] = "ЧАЮ?[]{}\|/`~";
int main()
{
LCD12864_Init();
_delay_ms(1);
LCD12864_Clr();
_delay_ms(1);
LCD12864_String(0,0,string1,sizeof(string1)-1);
LCD12864_String(1,0,string2,sizeof(string2)-1);
LCD12864_String(2,0,string3,sizeof(string3)-1);
LCD12864_String(3,0,string4,sizeof(string4)-1);
LCD12864_String(4,0,string5,sizeof(string5)-1);
LCD12864_String(5,0,string6,sizeof(string6)-1);
LCD12864_String(6,0,string7,sizeof(string7)-1);
LCD12864_String(7,0,string8,sizeof(string8)-1);
while(1);
}
Re: Arduino
Добавлено: 24 апр 2017, 19:33
Академик Иосиф
О, а это работает. Благодарю. Вот теперь со спокойной душой можно пилить перенос по словам.
Вот только почему то обратный слеш пропал
Re: Arduino
Добавлено: 24 апр 2017, 19:38
neutrino
Академик Иосиф писал(а):О, а это работает. Благодарю. Вот теперь со спокойной душой можно пилить перенос по словам.
Вот только почему то обратный слеш пропал
По-хорошему должен работать и предыдущий вариант, либо линкер обязан выдать ошибку выделения памяти.
Каким компилятором пользуешься?
Re: Arduino
Добавлено: 24 апр 2017, 19:39
neutrino
Академик Иосиф писал(а):
Вот только почему то обратный слеш пропал
Обратный слэш на С выглядит так: '\\', то есть их два. Попробуй.
Re: Arduino
Добавлено: 24 апр 2017, 19:41
neutrino
"ЧАЮ?[]{}\\|/`~";
Re: Arduino
Добавлено: 24 апр 2017, 19:49
Академик Иосиф
neutrino писал(а):"ЧАЮ?[]{}\\|/`~";
Это чё за странность такая? Я чего-то не знаю?
Re: Arduino
Добавлено: 24 апр 2017, 19:53
neutrino
Академик Иосиф писал(а):neutrino писал(а):"ЧАЮ?[]{}\\|/`~";
Это чё за странность такая? Я чего-то не знаю?
Не знаешь )) Обратный слэш в языке С означает начало спецсимвола.
'\0' - конец строки
'\n' - новая строка
'\r' - возврат каретки
И многое другое.
Re: Arduino
Добавлено: 25 апр 2017, 11:53
John Prick
Может, проблема в несоответствии типов?
unsigned char string1[] = "cъешь еще этих";
//...
void LCD12864_String(unsigned char x0,unsigned char y0,char* buffer, unsigned char count)
//...
void LCD12864_Char(unsigned char x0, unsigned char y0, unsigned char code)
Не должно, по идее, влиять, но мало ли что там компилятор выдумает.
Re: Arduino
Добавлено: 25 апр 2017, 12:05
FreemanNow
Академик Иосиф, примерно такая вот фигня бывает в юниксе если текстовый файл для скрипта готовился в виндовом редакторе. Разница в том, что в винде перевод строки содержит два символа (CR,LF), а в юниксе только CR, попробуй убрать лишний
Re: Arduino
Добавлено: 25 апр 2017, 12:20
neutrino
John Prick писал(а):Может, проблема в несоответствии типов?
unsigned char string1[] = "cъешь еще этих";
//...
void LCD12864_String(unsigned char x0,unsigned char y0,char* buffer, unsigned char count)
//...
void LCD12864_Char(unsigned char x0, unsigned char y0, unsigned char code)
Не должно, по идее, влиять, но мало ли что там компилятор выдумает.
Приведение типов операндов делается перед вычислением, в данном случае - перед передачей параметров. Если компилятор по-разному размещает в памяти char и unsigned char, это конец света и крах всех надежд (приходится использовать худ.эвфемизмы, поскольку слово на букву "П" запретил кровавый режим).
Но так писать, конечно нельзя. Типы должны совпадать, иначе сюрпризы появятся в других местах ))
Re: Arduino
Добавлено: 25 апр 2017, 12:40
John Prick
Да и в принципе unsigned char это числовой тип, а символьный именно char. Т.е. строку обьявить надо char string1[] = "cъешь еще этих";
И ещё подумалось, а какой размер стека выделяет этот компилятор для функции? Может, в этом проблема?
Re: Arduino
Добавлено: 25 апр 2017, 12:54
neutrino
John Prick писал(а):Да и в принципе unsigned char это числовой тип, а символьный именно char. Т.е. строку обьявить надо char string1[] = "cъешь еще этих";
И ещё подумалось, а какой размер стека выделяет этот компилятор для функции? Может, в этом проблема?
Евгений, я понимаю, что в данном случае main не возвращает управление, но правила выделения памяти для локальных переменных никуда не исчезают. Переменная, объявленная внутри функции, является
автоматической, и компилятор может разместить ее даже в регистрах общего назначения, он - машина, ему пофиг, что это строка ))) Здесь такое вряд ли, но возможны другие варианты. Чтобы выяснить, нужна инфа по настройкам памяти, включена или нет оптимизация, а наш юный друг не ответил даже, что за компилятор он использует. С объявлением строк внутри функций чудеса бывают у IAR, например.
Универсальный метод - указать, что строка имеет неизменный адрес.
Re: Arduino
Добавлено: 25 апр 2017, 13:31
Академик Иосиф
neutrino писал(а):а наш юный друг не ответил даже, что за компилятор он использует
да чорт его знает, атмел студио 6.1
Re: Arduino
Добавлено: 25 апр 2017, 14:05
neutrino
Академик Иосиф писал(а):neutrino писал(а):а наш юный друг не ответил даже, что за компилятор он использует
да чорт его знает, атмел студио 6.1
Понятно. Я с ним никогда не работал, не могу надежно указать причины такого сбоя.
Re: Arduino
Добавлено: 25 апр 2017, 15:04
John Watson
Академик Иосиф, а какой микроконтроллер?
Re: Arduino
Добавлено: 25 апр 2017, 15:06
Академик Иосиф
атмега8
Re: Arduino
Добавлено: 25 апр 2017, 18:24
barmoglot
FreemanNow писал(а):Академик Иосиф, умный дом для бармаглота это не просто сложно, это непостижимо))
дурачков искать не надо, они сами тебя находят.
зы: чтоб ты знал, у меня голосовое управление светом по всему дому, контроль температуры и видеонаблюдение. Теперь иди переваривай.
Re: Arduino
Добавлено: 25 апр 2017, 18:26
barmoglot
neutrino писал(а):barmoglot писал(а):neutrino, реализовать умный дом сможешь?
К сожалению, нет. Я не занимаюсь крупными системами. Если только отдельный датчик или манипулятор, но их уже много готовых, нет смысла изобретать велосипед.
Эх.
Короче, будут желающие, взял бы на работу для продвижение проекта.