Переключение слайдов Arduino+ИК Приемник+ИК Пульт+PowerPoint+Немного свободного времени
Ожидает приглашения
Всем привет!
Начну с предыстории.
Недавно на паре мне поручили подготовить выступление (презентацию) на тему «Контроллеры». Презентацию сделал. Получилась скучная и неинтересная: классификация, функции, языки программирования и т.д. и т.п. Поэтому решил добавить немного практики и реализовать пару простых функций с помощью Arduino UNO. Хоть это и не промышленный контроллер, но для выступления сойдет. Теперь о реализации.
Требуется реализовать 4 простых функции в Power Point по нажатию кнопок на пульте: запустить слайд-шоу, закрыть слайд-шоу, следующий слайд, предыдущий слайд. Схема работы выглядит примерно так: нажимаем кнопку на пульте; ардуино принимает сигнал и отправляет данные на COM порт; приложение на компе опрашивает COM порт и взаимодействует с Power Point.
Схема простенькая: питание, земля, выход.

В скетче используется библиотека IRremote
Приложение на компе написал на C#. Т.к. яплохой программист программист-любитель, программка простенькая, консольная, демон не знаю как писать, да и чтоб постоянно прослушивать COM порт, решение лучше, чем while(true) не нашел.
Программка читает COM порт. При получении 0 — завершает показ, 1 — запускает показ слайдов, 2 — следующий слайд, 3 — предыдущий слайд.
P.S. Еще для полного счастья в каждом if не хватает проверок. Например: при завершении показа слайдов, нужна проверка «запущен ли показ слайдов». Нужно покопаться в методах объекта oPPT или present.
Начну с предыстории.
Предыстория
Недавно на паре мне поручили подготовить выступление (презентацию) на тему «Контроллеры». Презентацию сделал. Получилась скучная и неинтересная: классификация, функции, языки программирования и т.д. и т.п. Поэтому решил добавить немного практики и реализовать пару простых функций с помощью Arduino UNO. Хоть это и не промышленный контроллер, но для выступления сойдет. Теперь о реализации.
Реализация
Требуется реализовать 4 простых функции в Power Point по нажатию кнопок на пульте: запустить слайд-шоу, закрыть слайд-шоу, следующий слайд, предыдущий слайд. Схема работы выглядит примерно так: нажимаем кнопку на пульте; ардуино принимает сигнал и отправляет данные на COM порт; приложение на компе опрашивает COM порт и взаимодействует с Power Point.
Схема
Схема простенькая: питание, земля, выход.

Скетч
В скетче используется библиотека IRremote
#include <IRremote.h>
int RECV_PIN = 7;
int old_result;
int new_result;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
new_result = results.value;
if(new_result != old_result){
//завершаем показ слайдов
if(results.value == 16769055){ //16769055 - код кнопки на пульте, на который хотим назначить завершение показа слайдов
Serial.println('0');
}
//запускаем показ слайдов
if(results.value == 16754775){
Serial.println('1');
}
//следующий слайд
if(results.value == 16712445){
Serial.println('2');
}
//предыдущий слайд
if(results.value == 16720605){
Serial.println('3');
}
}
old_result = new_result;
irrecv.resume();
}
}
Приложение на компе
Приложение на компе написал на C#. Т.к. я
Программка читает COM порт. При получении 0 — завершает показ, 1 — запускает показ слайдов, 2 — следующий слайд, 3 — предыдущий слайд.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Microsoft.Office.Interop.PowerPoint.Application oPPT = new
Microsoft.Office.Interop.PowerPoint.Application();
oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
Microsoft.Office.Interop.PowerPoint.Presentation present =
oPPT.ActivePresentation;
SerialPort port = new SerialPort("COM29", 9600);
port.Open();
int data;
while(true)
{
data = Convert.ToInt32(port.ReadLine());
//запускаем показ слайдов
if(data == 1)
{
present.SlideShowSettings.Run();
}
//завершаем показ слайдов
else if(data == 0)
{
present.SlideShowWindow.View.Exit();
}
//следующий слайд
else if(data == 2)
{
present.SlideShowWindow.View.Next();
}
//предыдущий слайд
else if (data == 3)
{
present.SlideShowWindow.View.Previous();
}
}
}
}
}
P.S. Еще для полного счастья в каждом if не хватает проверок. Например: при завершении показа слайдов, нужна проверка «запущен ли показ слайдов». Нужно покопаться в методах объекта oPPT или present.