Posts tagged PASCAL
Авторесет.
0Представляю вам свой новый проект. Авто ресет или можно назвать watch dogs.
Устройство предназначено для удержания ПК в активном состоянии , то есть при зависании или сбое ПК прибор сделает РЕСТАРТ ПК.
Устройство состоит из коробки с проводом USB и индикаторами обозначающими состояние прибора и еще провод для подключения к плате на ПИН (RESET). Сделана кнопка для эмуляции самой кнопки РЕСЕТ и для связи прибора с программой, у кнопки двойное предназначение в зависимости от текущего состояния прибора.
Всё устройство делалось под заказ , для одной организации которая занимается продажей комплектующих для ПК и соответственно еще и занимается сборкой ферм для майнинга. И требовалось устройство для удержания ПК в активном состоянии, но китайские поделки были не только дорогими но и неудобными по подключению. И нужно было сделать устройство чтоб было просто подключить к ПК и не запариваться с драйверами. Что и было сделано.
Начну по подробней.
Есть дополнение к прибору , это программа для WINDOSW.
Программа выполняет связь с прибором по USB шнуру , при подключении прибора, активируется и начинает синхронизацию с прибором.
В закладке СТАТИСТИКА можно посмотреть время перезагрузок которые были записаны в самом приборе , записи о перезагрузках не хранятся на ПК эти записи хранит само устройство в своей памяти. Есть возможность записи удалить полностью или сохранить копию в файл на ПК.
В закладке НАСТРОЙКИ можно увидеть установки для программы и прибора.
- Прятать (AR) при загрузке WINDOWS — данная опция делает запись в конфигурационный файл программы на ПК, что программа должна спрятаться в трэй при запуске WINDOWS.
- Запуск (AR) при запуске WINDOWS — данная опция делает запись в файл реестр WINDOSW , что программа будет загружаться автоматически при запуске операционной системы.
- Удержание компьютера включенным (Прибор) — данная опция делает запись в самом приборе , и при синхронизации прибора с программой устройство начинает отслеживать связь с программой. Если связь теряется то устройство начинает обратный отсчет для перезагрузки ПК.
- Установлен звуковой сигнал (Прибор) — данная опция делает запись в самом приборе что все действия сопровождаются звуковым сигналом из прибора , в приборе установлен зуммер который будет оповещать о обратном отсчете , перезагрузке ПК.
- Время для обратного отсчета перед перезагрузкой — предоставлено для индивидуальной установки обратного отсчета времени перед перезагрузкой ПК
В закладке Обновление можно увидеть версию самой программы и версию прибора к которому подключено. При нажатии кнопки (Последние обновления программы) можно почитать последние новости обновлении программы.
Запуск и работа прибора с программой.
При подключении прибора первый раз к WINDOWS , вам нужно подождать некоторое время , для определения операционной системы данного устройства. Драйвера вам не нужно устанавливать, контроллер на котором сделан прибор определяется операционной системой как HID устройство и работает отлично на стандартных драйверах которые заложены в WINDOWS.
После можно запускать программу и делать индивидуальные настройки для своего пк.
Работа прибора и индикация .
-
- Зеленый индикатор —
- индикатор гори постоянно это означает синхронизация с программой установлена
- индикатор не гори это означает синхронизация с программой не установлена или программа просто не запущена
- индикатор моргает это означает синхронизация с программой установлена и включен режим удержания ПК включенным , если при обрыве в этот момент произойдет обрыв синхронизации прибора с программой будет запущен обратный отсчет для перезагрузки
- Красный индикатор — моргает это означает запущен обратный отсчет для перезагрузки
- Синий индикатор — горит тогда когда есть питание на приборе
- Желтый индикатор — горит это означает что в приборе есть записи о последних перезагрузках, их можно просмотреть во вкладке статистика.
- Зеленый индикатор —
Кнопка на приборе .
Кнопкой на приборе можно
- отменить режим удержания ПК, когда зеленый индикатор моргает
- закрыть программу для синхронизации , когда зеленый индикатор горит постоянно
- с эмулировать нажатие кнопки РЕСЕТ , когда зеленый индикатор и красный индикатор не горит
- отменить обратный отсчет для перезагрузки , когда моргает красный индикатор
Панель удавленного доступа к системе умный дом по радиоканалу
0Рассказываю про панель удавленного доступа к системе умный дом по радиоканалу.
Пишем программу для PICBOT.
0По пожелания читателей изменил свойства страницы, поставил растягивающую.
Продолжаю писать про PICBOT.
Первые действия, устанавливает на загрузку библиотеки, которые нам нужны.
ФОТО
Есть основные несколько процедур для управления двигателями.
procedure Change_Duty(speedA,speedB:byte;);// ************* ИСМЕНЕНИЕ СКОРОСТИ ДВИГАТЕЛЕЙ**********
begin
motor_duty_A:=speedA; // Save for old speed
motor_duty_B:=speedB;
PWM1_Set_Duty(speedA); // Motor A
PWM2_Set_Duty(speedB); // Motor B
end;
procedure Start_motor; //********** Motor START ********/
begin
PWM1_Start();
PWM2_Start();
end;
procedure Stop_motor; //********** Motor STOP ********/
begin
PWM1_Stop();
PWM2_Stop();
end;
procedure Motor_A_FWD; //********** Motor A Forward ********/
begin
Pwm1_Start();
PORTD.0 :=0;
PORTD.1 :=1;
end;
procedure Motor_B_FWD; //********** Motor B Forward ********/
begin
Pwm2_Start;
PORTB.1 :=0;
PORTB.2 :=1;
end; //************************************/
procedure Motor_A_BWD; //********** Motor A Backward *******/
begin
Pwm1_Start;
PORTD.0 :=1;
PORTD.1 :=0;
end; //************************************/
procedure Motor_B_BWD ; //********** Motor B Backward *******/
begin
Pwm2_Start;
PORTB.1 :=1;
PORTB.2 :=0;
end; //************************************/
procedure Motor_A_Off; //********** Motor A Off ************/
begin
Pwm1_Stop;
PORTD.0 :=0;
PORTD.1 :=0;
end; //************************************/
procedure Motor_B_Off; //********** Motor B Off ************/
begin
Pwm2_Stop;
PORTB.1 :=0;
PORTB.2 :=0;
end; //************************************/
procedure Motor_Forward(speedA,speedB:byte); //********** Go Forward ************/
begin
Motor_Init;
Change_Duty(speedA,speedB);
Motor_A_FWD;
Motor_B_FWD;
end; //************************************/
procedure Motor_Backward(speedA,speedB:byte); //********** Go Backward ************/
begin
Motor_Init;
Change_Duty(speedA,speedB);
Motor_A_BWD;
Motor_B_BWD;
end; //************************************/
procedure Motor_S_Right(speedA,speedB:byte); //********** Spin Left *************/
begin
Motor_Init;
Change_Duty(speedA,speedB);
Motor_A_FWD;
Motor_B_BWD;
end; //************************************/
procedure Motor_S_Left(speedA,speedB:byte); //********** Spin Right ************/
begin
Motor_Init;
Change_Duty(speedA,speedB);
Motor_A_BWD;
Motor_B_FWD;
end; //************************************/
procedure Motor_Stop; //********** Stop Motor ************/
begin
Motor_Init;
Change_Duty(0,0);
Motor_A_Off;
Motor_B_Off;
end; //************************************/
PROCEDURE ADC_INIT; // *****************НАСТРАИВАЕМ GP2D120 ПОД ДАЛЬНОМЕР
BEGIN
INTCON := 0;
OPTION_REG := $80;
ADCON1 := $82;
TRISB.6:=0; // НАСТРОЙКА ПОД ФАРЫ КА ВЫХОДЫ
TRISB.7:=0; // НАСТРОЙКА ПОД ФАРЫ КА ВЫХОДЫ
TRISA.2 := 1; // УСТАНАВЛИВАЕМ RA2 КАК ВХОД
ANSEL := 0x04; // НАСТРАИВАЕМ ПОРТ AN2 КАК АНАЛОГОВЫЙ ВХОД
ANSELH := 0;
END; //************************************/
procedure ADC_READ_GP2D120_PICBOT; // ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА
begin
A:=0;
adc_rd:= ADC_read(2); // СЧИТЫВАЕМ ИНФОРМАЦИЮ С ДАЛЬНОМЕРА
adc_rd_h := adc_rd div 78 ; // ПРОДГОНЯЕМ ВЫХОДНЫЕ ДАННЫЕ
adc_rd_l := (adc_rd mod 78) div 7; // С АЦП ПОД ВОЛЬТЫ
A:=byte(adc_rd_h); // И ПЕРЕВОДИМ В ЧИСЛУЮ ДАННУЮ БАЙТ
IF A>=3 THEN BEGIN PORTB.6:=1; PORTB.7:=0; END // ЗАЖИГАЕМ ФАРЫ ЗЕЛЁНЫЕ СИНИ ВЫКЛЮЧАЕМ ЕСЛИ ЕСТЬ ПРЕПЯТСТВИЕ
ELSE BEGIN PORTB.6:=0; PORTB.7:=1; END
end;
Вот основной код программы которая двигает робот.
begin
ADC_INIT; // Устанавливаем настройки АЦП
motor_drive:=0; //
motor_init_:=0; //
Motor_Init; // устанавливаем настройки на драйвер двигателя
ADC_READ_GP2D120_PICBOT; // ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА
Start_motor; // ЗАПУСКАЕМ ДВИГАТЕЛИ
error := Soft_UART_Init(PORTC, 7, 6, 1200, 1); // УСТАНАВЛИВАЕМ УАРТ НА ПРИЁМ КОМАНД
Delay_ms(100); // ЗАДЕРЖКА НЕБОЛЬШАЯ
M1:
byte_read := Soft_UART_Read(error); // СЧИТЫВАЕМ КОМАНДЫ С РАДИОМОДУЛЯ
while TRUE do //
begin
ADC_READ_GP2D120_PICBOT; // ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА
IF A> 3 THEN // ЕСЛИ ОПРЕДЕЛЁН ПРЕДМЕТ ТО
CASE motor_drive OF
0: BEGIN Motor_Backward(255,255); // ЕСЛИ СТОИМ НАМЕСТЕ , и есть приближение предмета ТО ОТЕЖАЕМ И ОСТАНАВЛИВАЕМСЯ
repeat
BEGIN
ADC_READ_GP2D120_PICBOT;
END;
until A <3 ;
Motor_Stop;
END;
5: BEGIN // ЕСЛИ ДВИГАЕМСЯ ВПЕРЁД ТО НУЖНО ОТЪЕХАТЬ НАЗАД И ПОВЕРНУТЬ И СНОВА ЕХАТЬ ВПЕРЁД
Motor_Backward(255,255);
repeat
BEGIN
ADC_READ_GP2D120_PICBOT;
END;
until A <3 ;
Motor_S_Left(255,255);
Delay_ms(300);
IF motor_drive=5 THEN Motor_Forward(255,255)
ELSE Motor_Stop;
END;
END;
if byte_read <> 230 then goto m1;
byte_read := Soft_UART_Read(error);
if (error = 0) then // ЕСЛИ НЕТ ОШИБОК
BEGIN
//————————————————————————
//————————————————————————
CASE byte_read OF
17:BEGIN Motor_Forward(255,255);motor_drive:=5; END;
12: BEGIN Motor_Backward(255,255); motor_drive:=1; END;
15: BEGIN Motor_Stop; motor_drive:=0; END;
14: BEGIN Motor_S_Left(255,255); motor_drive:=3; END; // Call Spin Left END;
27: BEGIN Motor_S_Right(255,255); motor_drive:=4; END;
END;
//————————————————————————————
//————————————————————————
END;
END;
end.
end.