Необходимо создать программу эмуляции простой информационно-управляющей системы (иус). Иус управляет тремя виртуальными лампами Lamp1, Lamp2, Lam При запуске иус все лампы выключены



Дата25.02.2016
өлшемі46 Kb.
#21856
Задание 1.

Необходимо создать программу эмуляции простой информационно-управляющей системы (ИУС). ИУС управляет тремя виртуальными лампами — Lamp1, Lamp2, Lamp3. При запуске ИУС все лампы выключены. Кнопка клавиатуры «a» должна включать\выключать Lamp1, кнопка клавиатуры «s» должна включать\выключать Lamp2, кнопка клавиатуры «d» должна включать\выключать Lamp3. При нажатии любой клавиши в консоль должно выводится сообщение о статусе ламп (например: Lamp1 is ON Lamp2 is OFF Lamp3 is OFF). При нажатии клавиши «q» программа должна вывести в консоль фамилии выполнявшего работу и завершить работу.

#include

#include

#include

#include

int getch(void)

{

int ch;



struct termios oldt;

struct termios newt;

tcgetattr(STDIN_FILENO, &oldt); /*store old settings */

newt = oldt; /* copy old settings to new settings */

newt.c_lflag &= ~(ICANON | ECHO); /* make one change to old settings in new settings */

tcsetattr(STDIN_FILENO, TCSANOW, &newt); /*apply the new settings immediatly */

ch = getchar(); /* standard getchar call */

tcsetattr(STDIN_FILENO, TCSANOW, &oldt); /*reapply the old settings */

return ch; /*return received char */

}

char ch = ' ';



uint8_t lamp1 = 0, lamp2 = 0, lamp3 = 0;

int main()

{

printf("Starting... Press any key to continue...\n");



do

{

ch = getch();



printf("The key you entered is: %c \n", ch);

switch(ch)

{

case 'a': {if (!lamp1) {lamp1 = 1; puts("LAMP1 is ON\n");} else {lamp1 = 0; puts("LAMP1 is OFF\n");}} break;



case 's': {if (!lamp2) {lamp2 = 1; puts("LAMP2 is ON\n");} else {lamp2 = 0; puts("LAMP2 is OFF\n");}} break;

case 'd': {if (!lamp3) {lamp3 = 1; puts("LAMP3 is ON\n");} else {lamp3 = 0; puts("LAMP3 is OFF\n");}} break;

default:

{if (lamp1) puts("LAMP1 is ON"); else puts("LAMP1 is OFF");

if (lamp2) puts("LAMP2 is ON"); else puts("LAMP2 is OFF");

if (lamp3) puts("LAMP3 is ON"); else puts("LAMP3 is OFF");

puts("\n");} break;

}

} while (ch !='q');



puts("exiting...");

return 0;

}

Задание 2.

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

Исходные данные:

• начальное местонахождение лифта — первый этаж,

лифт обслуживает N + 5 этажей где N – последняя цифра зачетной книжки.

• вызов лифта на этаже осуществляется цифровыми клавишами клавиатуры (на

первом этаже клавиша «1», на втором - «2» и т. д.).

Положение лифта и его статус должны отображаться в консоли или графическом интерфейсе:

• лифт в режиме ожидания — статус выключен,

• лифт двигается — отображает номер этажа, который проходит лифт,

время прохождения одного этажа — 2 секунды,

• лифт достиг этажа назначения — номер этажа назначения выводится с частотой 2

Гц в течении 5 секунд,

• через 5-10 секунд после достижения этажа назначения лифт переходит в режим

Ожидания.

#include /* Standard input/output definitions */

#include /* String function definitions */

#include /* UNIX standard function definitions */

#include /* File control definitions */

#include /* Error number definitions */

#include /* POSIX terminal control definitions */

#include

const int digits_count=16;

// Номера сегментов для индикаторов (вторая цифра)

const int ZERO[] = {1,2,3,4,5,6};

const int ONE[] = {2,3};

const int TWO[] = {1,2,4,5,7};

const int THREE[] = {1,2,3,4,7};

const int FOUR[] = {2,3,6,7};

const int FIVE[] = {1,3,4,6,7};

const int SIX[] = {1,3,4,5,6,7};

const int SEVEN[] = {1,2,3};

const int EIGTH[] = {1,2,3,4,5,6,7};

const int NINE[] = {1,2,3,4,6,7};

const int *digits[] =

{ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGTH, NINE};

const int digits_sizes[] = {6,2,5,5,4,5,6,3,7,6};

int fd; /* File descriptor for the port */

const int floor_count = 9;

char buffer[13];

int current_floor_number = 1; // номер текущего этажа

int next_floor_number; // номер следующего этажа

void clear_digits(void)

{

for (int i=0; i

sprintf(buffer,"$KE,WR,%d,0\r\n",i);

if (write(fd, buffer, strlen(buffer))==-1) printf("ошибка: %s\n",strerror(errno));

};

}

void set_number(int current_floor)



{

for (int i=0; i

sprintf(buffer,"$KE,WR,%d,1\r\n",digits[current_floor][i]);

if (write(fd, buffer, strlen(buffer))==-1) printf("ошибка: %s\n",strerror(errno));

};

}

int getch(void)



{

int ch;


struct termios oldt;

struct termios newt;

tcgetattr(STDIN_FILENO, &oldt); /*store old settings */

newt = oldt; /* copy old settings to new settings */

newt.c_lflag &= ~(ICANON | ECHO); /* make one change to old settings in new settings */

tcsetattr(STDIN_FILENO, TCSANOW, &newt); /*apply the new settings immediatly */

ch = getchar(); /* standard getchar call */

tcsetattr(STDIN_FILENO, TCSANOW, &oldt); /*reapply the old settings */

return ch; /*return received char */

}

void lift_work(void)



{

if (current_floor_number

for (;current_floor_number!=next_floor_number; current_floor_number++)

{

printf("Этаж №%d.\n",current_floor_number);



sleep(2);

clear_digits();

set_number(current_floor_number);

}

else



for (;current_floor_number!=next_floor_number; current_floor_number--)

{

printf("Этаж №%d.\n",current_floor_number);



sleep(2);

clear_digits();

set_number(current_floor_number);

};


usleep(500000);

int t=0;


do {

t++;


usleep(1000000);

clear_digits();

set_number(current_floor_number);

}

while (t!=4);



printf("Лифт прибыл на этаж №%d.\n",current_floor_number);

}

int main(void)



{

struct termios options;

fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);

if (fd == -1) { perror("open_port: Unable to open - ");

exit(EXIT_FAILURE);

}

else fcntl(fd, F_SETFL, 0);



tcgetattr(fd, &options);

cfsetispeed(&options, B2400);

cfsetospeed(&options, B2400);

options.c_cflag |= (CLOCAL | CREAD);

tcsetattr(fd, TCSANOW, &options);

printf("Программа запущена.\n");

char x;

do {


x = getch();

next_floor_number = atoi(&x);

if (next_floor_number!=0 && next_floor_number!=current_floor_number) {

printf("Следующий этаж №%d\n",next_floor_number);

lift_work();

};

}



while (x!='q');

close(fd);



exit(EXIT_SUCCESS);

}

Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет