Разработка автоматизированной системы контроля и управления бытовой техникой на основе Linux и микроконтроллера AVR

Обеспечение удалённого и централизованного автоматизированного управления устройствами бытовой техники и контроля за помещением. Разработка микропрограммы для микроконтроллера AVR под управлением Linux и отладка клиентского программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.09.2012
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00011100);

hd44780_wait_ready();

hd44780_outdata(0b00011100);

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00001110);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outcmd(HD44780_CGADDR(0x0018));

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00001110);

hd44780_wait_ready();

hd44780_outdata(0b00011100);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00011100);

hd44780_wait_ready();

hd44780_outdata(0b00001110);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outcmd(HD44780_CGADDR(0x0020));

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00001100);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00011000);

hd44780_wait_ready();

hd44780_outdata(0b00001100);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outcmd(HD44780_CGADDR(0x0028));

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00001100);

hd44780_wait_ready();

hd44780_outdata(0b00001100);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

}

void main_init()

{

lcd_init();

SetFont();

lcd_newscreen();

lcd_print_pgm(Text_Loading);

lcd_update();

USART_init();

TSOP_Init(0x20, 2, 0x200);

DS1820_Update();

S1820_GetTemp(0, DS1820_temp1);

DS1820_GetTemp(1, DS1820_temp2);

DDRB = 0;

PORTB = 0xFF;

DDRC = 0xFF;

DDRD &= 0b00000000;

PORTD &= 0b10000000;

eeprom_read_block((void*)RC_Buttons, (void*)0, 4*8); // Кнопки ПДУ

DevicesState = eeprom_read_byte((void*)0x20); // Состояния девайсов

eeprom_read_block((void*)RC_DeviceButtonsOn, (void*)0x21, 4*5); // Кнопки ПДУ для девайсов

eeprom_read_block((void*)RC_DeviceButtonsOff, (void*)0x35, 4*5);

/*

// UART test

int les;

PORTC = 0b00011111;

while (1)

for (les = 0; les < 256; les++)

{

lcd_newscreen();

lcd_printnum(les, 3);

lcd_update();

USART_TransmitByte(les);

_delay_ms(100);

}

*/

PORTC = 0b00011111 & DevicesState & EnabledDevices;

timer_init();

WDTCR = (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0); // Watchdog

CommandToPC(1); // Запуск!

USART_TransmitByte(0);

}

char DeviceModeOn[] PROGMEM = "Устройство включено";

char DeviceModeOff[] PROGMEM = "Устройство выключено";

void UpdateDevices()

{

PORTC = (PORTC & 0b11100000) | (DevicesState & EnabledDevices & 0b00011111 & (Motion_Exists ? 0b00011111 : (Motion_Enabled ? ~LIGHT_DEVICES : 0b00011111)));

DevicesState &= EnabledDevices & 0b00011111;

eeprom_write_byte((void*)0x20, DevicesState);

CommandToPC(6); // Текущее состояние девайсов

USART_TransmitByte(DevicesState);

}

void DeviceMode(short int device, short int state)

{

if (state)

{

Motion_Exists = 1;

Motion_NoMotionTime = 0;

}

if (!((EnabledDevices >> device) & 1)) return;

if (((DevicesState >> device) & 1) != (state & 1))

{

lcd_newscreen();

switch (device)

{

case 0: lcd_print_pgm_center(DeviceName1, 0); break;

case 1: lcd_print_pgm_center(DeviceName2, 0); break;

case 2: lcd_print_pgm_center(DeviceName3, 0); break;

case 3: lcd_print_pgm_center(DeviceName4, 0); break;

case 4: lcd_print_pgm_center(DeviceName5, 0); break;

}

if (state)

{

DevicesState |= 1 << device;

lcd_print_pgm_center(DeviceModeOn, 1);

} else {

DevicesState &= ~(1 << device);

lcd_print_pgm_center(DeviceModeOff, 1);

}

lcd_update();

Notice_timeout = NOTICE_TIME;

}

UpdateDevices();

}

void ExecCommand()

{

unsigned short int i, i2;

switch (command_num)

{

case 1:

time_hours = command_buf[0]; // 1 - Синхронизация времени (3 байта)

time_mins = command_buf[1];

time_secs = command_buf[2];

time_tics = 0;

time_is_set = 1;

break;

case 2:// 2 - Обновление данных (1 байт, любой)

CommandToPC(7); // 7 - Список доступных девайсов - 1 байт

USART_TransmitByte(EnabledDevices);

for (i = 0; i < 5; i++)

{

CommandToPC(8); // 8 - Названия девайсов - 1 + 22 байта

USART_TransmitByte(i);

int eol = 0;

for (i2 = 0; i2 < 22; i2++)

{

char* DName = 0;

switch (i)

{

case 0: DName = DeviceName1; break;

case 1: DName = DeviceName2; break;

case 2: DName = DeviceName3; break;

case 3: DName = DeviceName4; break;

case 4: DName = DeviceName5; break;

}

char c = pgm_read_byte(&DName[i2]);

if (!c) eol = 1;

if (!eol) USART_Transmit Byte(c); else USART_Transmit Byte(0);

}

}

Update Devices();

Command ToPC(2); // Температура

USART_Transmit (DS1820_GetRawTemp(), 4);

Command ToPC(9); // Движение

USART_Transmit Byte (Motion_Exists);

break;

case 3:// 3 - Вывод текста на дисплей (48 байт)

for (i = 0; i < 48; i++) PC_lcd[i] = Rus Encode (command_buf[i]);

PC_lcd_timeout = PC_LCD_TIMEOUT;

break;

case 4:// 4 - Выход из PC режима (1 байт, любой)

PC_lcd_timeout = 0;

break;

case 5: // 5 - Вывод нотиса на дисплей (48 байт)

lcd_newscreen();

for (i = 0; i < 24; i++) lcd_putchar(command_buf[i]);

lcd_putchar('\n');

for (i = 24; i < 48; i++) lcd_putchar(command_buf[i]);

lcd_update();

Notice_timeout = NOTICE_TIME;

break;

case 6: // Включение/выключение устройства (1 байт - номер устройства и 1 - команда)

DeviceMode(command_buf[0], command_buf[1]);

break;

case 7: // Комп говорит, что я сижу за компом, т.е. свет не вырубать! (1 байт, любой)

Motion_SSaverTimeout = MOTION_SSAVER_TIMEOUT;

break;

case 8: // Комп говорит, что надо игнорировать кнопки управления самим девайсом, отдадим их под софт на PC (1 байт, любой);

IgnoreRC_timeout = IGNORERC_TIMEOUT;

break;

case 9: // Комп говорит, что уже НЕ надо игнорировать кнопки управления самим девайсом, отдадим их под софт на PC (1 байт, любой);

IgnoreRC_timeout = 0;

break;

}

command_complete = 0;

command_state = 0;

}

void MainUpdate(char mode)

{

wdt_reset();

unsigned char b;

unsigned long RC_Button;

RC_Button_Newpress = TSOP_GetNewpress(); // Не нажата ли кнопка на ПДУ?

if (RC_Button_Newpress > 0)

{

CommandToPC(4); // Нажата кнопка на ПДУ

USART_Transmit((void*)&RC_Button_Newpress, 4); // Шлём её на комп

}

RC_Button = TSOP_GetRepeat(); // А может ЗАжата?

if ((TSOP_GetButton() == 1) && (RC_Button > 0))

{

CommandToPC(5); // Держится кнопка на ПДУ

USART_Transmit((void*)&RC_Button, 4);

}

Button_Newpress = 0;

for (b = 0; b < 7; b++) // Читаем кнопки

{

if ((((PINB>>b) & 1) == 0) && (((Button_NewpressOld>>b) & 1) == 1))

Button_Newpress = b + 1;

if ((IgnoreRC_timeout == 0) && (RC_Button_Newpress > 0) && (RC_Button_Newpress == RC_Buttons[b])) Button_Newpress = b + 1;

}

if ((IgnoreRC_timeout == 0) && (RC_Button_Newpress > 0) && (RC_Button_Newpress == RC_Buttons[7])) Button_Newpress = 6; // Дублируем кнопку OK

Button_NewpressOld = PINB;

for (b = 0; b < 5; b++) // Что-то включаем?

{

if ((RC_Button_Newpress > 0) && (RC_Button_Newpress == RC_DeviceButtonsOn[b])) DeviceMode(b, 1);

if ((RC_Button_Newpress > 0) && (RC_Button_Newpress == RC_DeviceButtonsOff[b])) DeviceMode(b, 0);

}

if ((time_mins != time_lastmin) || ((time_secs == 30) && (time_secs != time_lastsec)))

{

DS1820_Update();

DS1820_GetTemp(0, DS1820_temp1);

DS1820_GetTemp(1, DS1820_temp2);

time_lastmin = time_mins;

}

if ((time_secs == 30) && (time_secs != time_lastsec)) // Каждую минуту шлём на комп температуру

{

CommandToPC(2); // Температура

USART_Transmit(DS1820_GetRawTemp(), 4);

UpdateDevices(); // И состояние девайсов...

CommandToPC(9); // Движение

USART_TransmitByte(Motion_Exists);

}

if (time_secs != time_lastsec) // Счётчики

{

time_lastsec = time_secs;

if (PC_lcd_timeout > 0) PC_lcd_timeout--;

if (NOPC_lcd_timeout > 0) NOPC_lcd_timeout--;

if (IgnoreRC_timeout > 0) IgnoreRC_timeout--;

if (Timer_timeout > 0)

{

Timer_timeout--;

if (Timer_timeout == 0)

{

DevicesState &= ~LightDevices;

UpdateDevices();

}

}

if (Motion_WorkTime < 30000) Motion_WorkTime++;

if (Motion_NoMotionTime < 30000) Motion_NoMotionTime++;

if (Motion_WorkTime < 3) PORTC &= 0b10111111; // Выключаем датчик движения

if (Motion_WorkTime == 3) PORTC |= 0b01000000; // Включаем

if (Motion_Exists && (Motion_NoMotionTime >= MOTION_TIMEOUT) && (Motion_SSaverTimeout == 0)) // Нет движения тут!

{

Motion_Exists = 0;

UpdateDevices();

CommandToPC(9); // Движение

USART_TransmitByte(0);

}

if (Motion_SSaverTimeout > 0) Motion_SSaverTimeout--;

}

if (Notice_timeout > 0) Notice_timeout--;

if (command_complete) ExecCommand(); // Выполняем команду от компа, если нужно

if (mode || (PC_lcd_timeout == 0) || (NOPC_lcd_timeout > 0)) // Какой режим?

{

if (Notice_timeout == 0) lcd_update();

if ((Button_Newpress == 1) && (mode == 0)) NOPC_lcd_timeout = 0;

if (Button_Newpress > 1) NOPC_lcd_timeout = NOPC_LCD_TIMEOUT;

} else {

if (Notice_timeout == 0) lcd_spec_update(PC_lcd);

if (Button_Newpress == 1) NOPC_lcd_timeout = NOPC_LCD_TIMEOUT;

if (Button_Newpress > 1)

{

CommandToPC(3); // Нажали кнопку

USART_Transmit((void*)&Button_Newpress, 1);

Button_Newpress = 0;

}

if ((PIND >> 7) || (!Motion_Enabled))

{

Motion_Exists)

{

Motion_Exists = 1;

UpdateDevices();

CommandToPC(9); // Движение

USART_TransmitByte(1);

}

Motion_NoMotionTime = 0;

if (Motion_WorkTime >= MOTION_TIME_UNTIL_REBOOT) Motion_WorkTime = 0;

}

// if (!Motion_Exists && (time_secs % 2 == 0)) PORTC |= (1 << 7);

}

char Text_Temp1[] PROGMEM = "Темп-ра на улице: ";

char Text_Temp2[] PROGMEM = "Темп-ра в комнате: ";

char Text_TimerOn[] PROGMEM = "Активирован таймер";

char Text_TimerLeft[] PROGMEM = "\n Осталось ";

char Text_TimerLeft2[] PROGMEM = " секунд";

int glukipause(unsigned long c)

{

unsigned long int i;

for (i = 0; i < c; i++)

{

MainUpdate(0);

if (Button_Newpress > 2) return 1;

}

return 0;

}

char Text_GlukiFace1[] PROGMEM = "=O.o=";

char Text_GlukiFace2[] PROGMEM = "=o.O=";

char Text_GlukiFace3[] PROGMEM = "=0.o=";

char Text_GlukiFace4[] PROGMEM = "=o.0=";

char Text_GlukiFace5[] PROGMEM = "=O.0=";

char Text_GlukiFace6[] PROGMEM = "=^_^=";

char Text_GlukiFace7[] PROGMEM = "=O_o=";

char Text_GlukiCC[] PROGMEM = "Cluster Control";

char Text_GlukiCC2[] PROGMEM = "Йа Кластер Контролко!";

char Text_GlukiPreved[] PROGMEM = "Превед медвед!";

char Text_GlukiPreved2[] PROGMEM = "Я кластерное чудо!";

char Text_GlukiRobot1[] PROGMEM = "Убить всех людей!";

char Text_GlukiRobot2[] PROGMEM = "Слава роботам";

char Text_GlukiLost[] PROGMEM = ">: 4 8 15 16 23 42 ";

char Text_GlukiBase[] PROGMEM = "All your base are belong to us!";

inline int gluki(int type) // :))

{

char* Faces[5] = {Text_GlukiFace1, Text_GlukiFace2, Text_GlukiFace3, Text_GlukiFace4, Text_GlukiFace5};

int i;

switch (type)

{

case 0:

for (i = 0; i < 5; i++)

{

lcd_newscreen();

lcd_print_pgm(Faces[rand()%5]);

lcd_goto(10, 0);

lcd_print_pgm(Faces[rand()%5]);

lcd_goto(19, 0);

lcd_print_pgm(Faces[rand()%5]);

lcd_goto(4, 1);

lcd_print_pgm(Faces[rand()%5]);

lcd_goto(16, 1);

lcd_print_pgm(Faces[rand()%5]);

f (glukipause(50)) return 1;

}

lcd_newscreen();

lcd_print_pgm_center(Text_GlukiCC, 0);

lcd_print_pgm_center(Text_GlukiFace6, 1);

if (glukipause(300)) return 1;

break;

case 1:

lcd_newscreen();

lcd_print_pgm_center(Text_GlukiCC2, 0);

lcd_print_pgm_center(Text_GlukiFace7, 1);

if (glukipause(300)) return 1;

break;

case 2:

lcd_newscreen();

lcd_print_pgm_center(Text_GlukiPreved, 0);

lcd_print_pgm_center(Text_GlukiPreved2, 1);

if (glukipause(300)) return 1;

break;

case 3:

lcd_newscreen();

lcd_print_pgm_center(Text_GlukiRobot1, 0);

lcd_print_pgm_center(Text_GlukiRobot2, 1);

if (glukipause(300)) return 1;

break;

case 4:

for (i = 0; i < 3; i++)

{

lcd_newscreen();

lcd_print_pgm(Text_GlukiLost);

if (glukipause(200)) return 1;

lcd_newscreen();

lcd_print_pgm(Text_GlukiLost);

lcd_putchar('\\');

if (glukipause(200)) return 1;

}

break;

}

return 0;

}

unsigned char nextframe(unsigned char pacman)

{

if (pacdir) pacman++; else pacman--;

if (pacman == 4) pacdir = 0;

if (pacman == 1) pacdir = 1;

return pacman;

}

char Text_Time[] PROGMEM = "А у нас сейчас: ";

char Text_TimeIsNotSet[] PROGMEM = " Время не установлено ";

inline void main_idle()

{

const char separator = ':';

unsigned long int i, c, c2, c3;

unsigned char pacman;

int glukitype = 0;

while (Timer_timeout > 0)

{

lcd_newscreen();

lcd_print_pgm_center(Text_TimerOn, 0);

lcd_print_pgm(Text_TimerLeft);

lcd_printnum(Timer_timeout, 2);

lcd_print_pgm(Text_TimerLeft2);

MainUpdate(0);

if (Button_Newpress > 2) return;

}

while (1)

{

pacman = 1;

pacdir = 1;

for (c = 0; c <= 23; c++)

{

for (c2 = 0; c2 < 6; c2++)

{

pacman = nextframe(pacman);

lcd_newscreen();

lcd_goto(c,1);

lcd_putchar(pacman);

for (c3 = c+1; c3 <= 23; c3++) lcd_putchar(5);

if ((c / 3) % 4 <= 1)

{

if (time_is_set)

{

lcd_goto(0, 0);

lcd_print_pgm(Text_Time);

lcd_printnum(time_hours, 2);

lcd_putchar(separator);

lcd_printnum(time_mins, 2);

lcd_putchar(separator);

lcd_printnum(time_secs, 2);

} else lcd_print_pgm_center(Text_TimeIsNotSet, 0);

} else

if ((c / 3) % 4 == 2)

{

lcd_goto(0, 0);

lcd_print_pgm(Text_Temp1);

if (strlen(DS1820_temp1) < 5) lcd_putchar(' ');

lcd_print(DS1820_temp1);

} else

if ((c / 3) % 4 == 3)

{

lcd_goto(0, 0);

lcd_print_pgm(Text_Temp2);

if (strlen(DS1820_temp2) < 5) lcd_putchar(' ');

lcd_print(DS1820_temp2);

}

/*

else {

lcd_print_pgm_center(Text_Version, 0);

}

*/

for (i = 0; i < 30; i++)

{

MainUpdate(0);

if (Button_Newpress > 2) return;

}

}

}

if (gluki(glukitype)) return;

glukitype++;

if (glukitype > 4) glukitype = 0;

nt = 5;

short int CurItem = 0;

unsigned long int MenuTimeout = 0;

while (Button_Newpress != 2)

{

lcd_newscreen();

lcd_putchar('<'); lcd_goto(23, 0); lcd_putchar('>');

lcd_goto(1, 0);

if (CurItem >= ItemsCount) CurItem = 0;

while (!((EnabledDevices >> CurItem) & 1))

{

CurItem++;

if (CurItem >= ItemsCount) CurItem = 0;

}

switch (CurItem)

{

case 0: lcd_print_pgm_center(DeviceName1, 0); break;

case 1: lcd_print_pgm_center(DeviceName2, 0); break;

case 2: lcd_print_pgm_center(DeviceName3, 0); break;

case 3: lcd_print_pgm_center(DeviceName4, 0); break;

case 4: lcd_print_pgm_center(DeviceName5, 0); break;

}

lcd_goto(0, 1);

lcd_print_pgm(Text_DevicesMenuOff);

lcd_goto(21, 1);

lcd_print_pgm(Text_DevicesMenuOn);

if ((DevicesState >> CurItem) & 1) lcd_print_pgm_center(Text_DevicesMenuON, 1); else lcd_print_pgm_center(Text_DevicesMenuOFF, 1);

MainUpdate(1);

if (Button_Newpress == 3)

{

CurItem--;

if (CurItem < 0) CurItem = ItemsCount - 1;

while (!((EnabledDevices >> CurItem) & 1))

{

CurItem--;

if (CurItem < 0) CurItem = ItemsCount - 1;

}

}

if (Button_Newpress == 4) CurItem++;

if (Button_Newpress == 5) DeviceMode(CurItem, 0);

if (Button_Newpress == 7) DeviceMode(CurItem, 1);

if (Button_Newpress > 0) MenuTimeout = 0;

MenuTimeout++;

if (MenuTimeout > MENU_TIMEOUT) return 1;

}

return 0;

}

char Text_RC_SettingsMenu[] PROGMEM = " Настройка ПДУ\n< >";

char Text_RC_SettingsMenu1[] PROGMEM = "Основные кнопки";

char Text_RC_SettingsMenu2[] PROGMEM = "Включающие кнопки";

char Text_RC_SettingsPress[] PROGMEM = "Жми на пульте кнопку\n";

char Text_RC_SettingsPress1[] PROGMEM = "режим";

char Text_RC_SettingsPress2[] PROGMEM = "назад";

char Text_RC_SettingsPress3[] PROGMEM = "влево";

char Text_RC_SettingsPress4[] PROGMEM = "вправо";

char Text_RC_SettingsPress5[] PROGMEM = "вниз-влево";

char Text_RC_SettingsPress6[] PROGMEM = "OK";

char Text_RC_SettingsPress7[] PROGMEM = "вниз-вправо";

char Text_RC_SettingsPress8[] PROGMEM = "вниз";

char Text_RC_SettingsPressOk[] PROGMEM = " - ";

char Text_RC_SettingsPressOn[] PROGMEM = "Жми кнопку включения\n";

char Text_RC_SettingsPressOff[] PROGMEM = "Жми кнопку выключения\n";

inline void RC_settings_menu()

{

const short int ItemsCount = 2;

short int CurItem = 0;

unsigned long int MenuTimeout = 0;

while (Button_Newpress != 2)

{

lcd_newscreen();

lcd_print_pgm(Text_RC_SettingsMenu);

lcd_goto(1, 1);

switch (CurItem)

{

case 0: lcd_print_pgm_center(Text_RC_SettingsMenu1, 1); break;

case 1: lcd_print_pgm_center(Text_RC_SettingsMenu2, 1); break;

}

MainUpdate(1);

if (Button_Newpress == 3) CurItem--;

if (Button_Newpress == 4) CurItem++;

if (CurItem < 0) CurItem = ItemsCount - 1;

if (CurItem >= ItemsCount) CurItem = 0;

if (Button_Newpress > 0) MenuTimeout = 0;

if (Button_Newpress > 4)

{

int i;

switch (CurItem)

{

case 0:

for (i = 0; i < 8; i++) RC_Buttons[i] = 0;

for (i = 0; i < 8; i++)

{

do {

lcd_newscreen();

lcd_print_pgm(Text_RC_SettingsPress);

switch (i)

{

case 0: lcd_print_pgm(Text_RC_SettingsPress1); break;

case 1: lcd_print_pgm(Text_RC_SettingsPress2); break;

case 2: lcd_print_pgm(Text_RC_SettingsPress3); break;

case 3: lcd_print_pgm(Text_RC_SettingsPress4); break;

case 4: lcd_print_pgm(Text_RC_SettingsPress5); break;

case 5: lcd_print_pgm(Text_RC_SettingsPress6); break;

case 6: lcd_print_pgm(Text_RC_SettingsPress7); break;

case 7: lcd_print_pgm(Text_RC_SettingsPress8); break;

}

MainUpdate(1);

} while (RC_Button_Newpress == 0);

RC_Buttons[i] = RC_Button_Newpress;

lcd_print_pgm(Text_RC_SettingsPressOk);

lcd_printnum(RC_Buttons[i], 10);

MainUpdate(1);

_delay_ms(500);

}

eeprom_write_block((void*)RC_Buttons, (void*)0, 4*8);

break;

case 1:

for (i = 0; i < 5; i++) { RC_DeviceButtonsOn[i] = 0; RC_DeviceButtonsOff[i] = 0; }

for (i = 0; i < 5; i++)

{

if ((EnabledDevices >> i) & 1)

{

do {

lcd_newscreen();

lcd_print_pgm_center(Text_RC_SettingsPressOn, 0);

switch (i)

{

case 0: lcd_print_pgm_center(DeviceName1, 1); break;

case 1: lcd_print_pgm_center(DeviceName2, 1); break;

case 2: lcd_print_pgm_center(DeviceName3, 1); break;

case 3: lcd_print_pgm_center(DeviceName4, 1); break;

case 4: lcd_print_pgm_center(DeviceName5, 1); break;

}

MainUpdate(1);

} while (RC_Button_Newpress == 0);

RC_DeviceButtonsOn[i] = RC_Button_Newpress;

MainUpdate(1);

while (RC_Button_Newpress == 0)

{

lcd_newscreen();

lcd_print_pgm_center(Text_RC_SettingsPressOff, 0);

switch (i)

{

case 0: lcd_print_pgm_center(DeviceName1, 1); break;

case 1: lcd_print_pgm_center(DeviceName2, 1); break;

case 2: lcd_print_pgm_center(DeviceName3, 1); break;

case 3: lcd_print_pgm_center(DeviceName4, 1); break;

case 4: lcd_print_pgm_center(DeviceName5, 1); break;

}

MainUpdate(1);

}

RC_DeviceButtonsOff[i] = RC_Button_Newpress;

}

}

eeprom_write_block((void*)RC_DeviceButtonsOn, (void*)0x21, 4*5); // Кнопки ПДУ для девайсов

eeprom_write_block((void*)RC_DeviceButtonsOff, (void*)0x35, 4*5);

break;

}

}

MenuTimeout++;

if (MenuTimeout > MENU_TIMEOUT) return;

}

}

char Text_MainMenu[] PROGMEM = " Главное меню\n< >";

char Text_MainMenu1[] PROGMEM = "Управление девайсами";

char Text_MainMenu2[] PROGMEM = "Показать температуру";

char Text_MainMenu3[] PROGMEM = "Включить таймер";

char Text_MainMenu4[] PROGMEM = "Настройка ПДУ";

char Text_MainMenu5[] PROGMEM = "Датчик движения";

inline void main_menu()

{

const short int ItemsCount = 5;

short int CurItem = 0;

unsigned long int MenuTimeout = 0;

while (1)

{

lcd_newscreen();

lcd_print_pgm(Text_MainMenu);

lcd_goto(1, 1);

switch (CurItem)

{

case 0: lcd_print_pgm_center(Text_MainMenu1, 1); break;

case 1: lcd_print_pgm_center(Text_MainMenu2, 1); break;

case 2: lcd_print_pgm_center(Text_MainMenu3, 1); break;

case 3: lcd_print_pgm_center(Text_MainMenu5, 1); break;

case 4: lcd_print_pgm_center(Text_MainMenu4, 1); break;

}

MainUpdate(1);

if (Button_Newpress == 2) return;

if (Button_Newpress == 3) CurItem--;

f (Button_Newpress == 4) CurItem++;

f (CurItem < 0) CurItem = ItemsCount - 1;

if (CurItem >= ItemsCount) CurItem = 0;

if (Button_Newpress > 0) MenuTimeout = 0;

if (Button_Newpress > 4)

{

unsigned char temp_time_lastsec = 0;

switch (CurItem)

{

case 0:

if (devices_menu()) return;

break;

case 1:

do {

lcd_newscreen();

if (time_secs != time_lastsec)

{

temp_time_lastsec = time_secs;

if ((time_secs != 0) && (time_secs != 30) && (time_secs % 5 == 0))

{

DS1820_Update();

DS1820_GetTemp(0, DS1820_temp1);

= NOTICE_TIME;

Timer_timeout = TIMER_TIME;

break;

case 3:

do {

lcd_newscreen();

lcd_print_pgm_center(Text_MainMenu5, 0);

lcd_goto(0, 1);

lcd_print_pgm(Text_DevicesMenuOff);

lcd_goto(21, 1);

lcd_print_pgm(Text_DevicesMenuOn);

if (Motion_Enabled) lcd_print_pgm_center(Text_DevicesMenuON, 1); else lcd_print_pgm_center(Text_DevicesMenuOFF, 1);

MainUpdate(1);

if (Button_Newpress == 5) Motion_Enabled = 0;

if (Button_Newpress == 7) Motion_Enabled = 1;

if (Button_Newpress > 0) MenuTimeout = 0;

MenuTimeout++;

if (MenuTimeout > MENU_TIMEOUT) return;

} while (Button_Newpress != 2);

break;

case 4:

RC_settings_menu();

break;

}

}

MenuTimeout++;

if (MenuTimeout > MENU_TIMEOUT) return;

}

}

int main(void)

{

main_init();

while(1)

{

main_idle();

main_menu();

}

}

Размещено на Allbest.ru


Подобные документы

  • Роль микроконтроллеров в современных системах управления. Проектирование схемы на основе микроконтроллера Aduc812, которая будет контролировать работу бытовой стиральной машины. Элементная база, описание и функционирование программы, ее листинг.

    курсовая работа [101,3 K], добавлен 23.12.2012

  • Архитектура автоматизированной информационной системы управления складом. Заказ материалов, подсистема учета материалов бытовой техники на цеховом складе. Внемашинное информационное обеспечение. Выбор инструментальной платформы для реализации системы.

    курсовая работа [1,6 M], добавлен 04.12.2014

  • Linux - ядро операционной системы с монолитной архитектурой. Прародители операционной системы Linux, ее стабильные и экспериментальные версии. Процесс внедрения Linux и свободного программного обеспечения в школах и государственных учреждениях России.

    реферат [18,2 K], добавлен 19.01.2013

  • Идея создания системы удаленного управления и контроля устройств. Разработка электрической принципиальной и структурной схемы. Обоснование выбора микроконтроллера и чипа ENC28J60. Обоснование выбора и отладки среды моделирования, программы и компилятора.

    курсовая работа [3,5 M], добавлен 26.08.2014

  • Методические аспекты перехода на СПО в условиях школьного образования. Аналоги Linux-программ при создании школьного комплекта свободного программного обеспечения. Методика использования альтернативной реализации Windows-интерфейса в системе Linux.

    дипломная работа [2,3 M], добавлен 03.05.2012

  • Понятие и сущность операционных систем, особенности их возникновения. История создания операционной системы Linux, ее основные характеристики, сетевые возможности. Анализ бизнес-модели производства и распространения "свободного" программного обеспечения.

    реферат [35,8 K], добавлен 05.04.2010

  • Изучение IT-инфраструктуры компании проката автомобилей. Основные требования к автоматизации движения товаров. Анализ создания конфигурации для оптового склада бытовой техники. Разработка информационно-логической модели автоматизированной системы.

    курсовая работа [1,1 M], добавлен 22.03.2021

  • Разработка приложения, которое осуществляет удаленный доступ управления компьютером с операционной системой Linux с компьютера с ОС Windows. Реализация функциональной части. Графический интерфейс клиента и сервера. Разработка интеграционных тестов.

    курсовая работа [1,1 M], добавлен 28.04.2014

  • Разработка встраиваемого в электронную аппаратуру микроконтроллера с целью обеспечения ввода данных с клавиатуры и отображения результатов обработки на индикации. Описание активного элемента (системная шина ISA). Программное обеспечение микроконтроллера.

    курсовая работа [848,9 K], добавлен 05.02.2016

  • Создание программного продукта, предназначенного для небольшой сети с оптимизацией ее работы на платформе операционной системы Linux; администрирование. Разработка модуля протоколов управления; методика тестирования подсистемы; системотехнический анализ.

    дипломная работа [5,4 M], добавлен 27.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.