Страница 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. :nez-nayu:

Re: Arduino

Добавлено: 24 апр 2017, 15:23
FreemanNow
Академик Иосиф, а еще при этом экономить энергию и следить за влажностью и кислородом )

Re: Arduino

Добавлено: 24 апр 2017, 15:29
neutrino
Академик Иосиф писал(а): Ну почему? Жарко - открыл окно. Холодно - включил топку. И так пока не будет ровно +22. :nez-nayu:
Что ж, попробуем рассуждать. На примере нагрева воздуха для начала.
Ты выключаешь топку когда воздух ровно +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 писал(а): Это частный случай. Ты же не будешь, получив задание спроектировать умный дом, предлагать всем переехать к тебе или чаще проветривать?

Есть условие задачи. Нужно решение.
Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то. :ne_ne_ne:

Re: Arduino

Добавлено: 24 апр 2017, 18:50
neutrino
Академик Иосиф писал(а): Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то. :ne_ne_ne:
Зависит от соотношения мощности нагревателя и объема помещения.

Эффект обычный, техническое решение существует, вопрос сформулирован недвусмысленно. Не виляй, ты же не в Политике )))

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
опять штырит, но в другом месте :ne_vi_del:

Re: Arduino

Добавлено: 24 апр 2017, 19:18
Академик Иосиф
я уже молчу про функцию переноса по словам с прокруткой :ne_ne_ne:

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
Академик Иосиф
О, а это работает. Благодарю. Вот теперь со спокойной душой можно пилить перенос по словам.
Вот только почему то обратный слеш пропал :ne_vi_del:

Re: Arduino

Добавлено: 24 апр 2017, 19:38
neutrino
Академик Иосиф писал(а):О, а это работает. Благодарю. Вот теперь со спокойной душой можно пилить перенос по словам.
Вот только почему то обратный слеш пропал :ne_vi_del:
По-хорошему должен работать и предыдущий вариант, либо линкер обязан выдать ошибку выделения памяти.

Каким компилятором пользуешься?

Re: Arduino

Добавлено: 24 апр 2017, 19:39
neutrino
Академик Иосиф писал(а): Вот только почему то обратный слеш пропал :ne_vi_del:
Обратный слэш на С выглядит так: '\\', то есть их два. Попробуй.

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, реализовать умный дом сможешь?
К сожалению, нет. Я не занимаюсь крупными системами. Если только отдельный датчик или манипулятор, но их уже много готовых, нет смысла изобретать велосипед.
Эх.
Короче, будут желающие, взял бы на работу для продвижение проекта.