Используя скетч для проекта "Секундомер", который представлен ниже и скетч для работы пульта дистанционного управления, соберите схему и составьте программу для микроконтроллера, которая будет дистанционно запускать и останавливать работу секундомера.
//Будем прибавлять двойку в цикле (чтобы пин 0 стал пином 2)
const int SIX_COUNT = 2;
const int COUNT_DIGITS = 7; //Количество пинов (сегментов)
const int button = 9; //Кнопка на пине 9
//Создание массива масок типа Byte. В значения массива запишем двоичную запись
//цифр, для их последовательного чтения. Нумерация элементов массива начинается
//с 0. Получается, что число 0 имеет запись 0b1111110 – где 0b – означает
//двоичную запись, а следующие цифры по очереди означают какие сегменты нам
//нужно зажечь на световом индикаторе. Для нуля зажигать нужно с 1 по 6 //сегменты (со 2 по 7 пины нужно подать ток)
byte arabNumbers[10] = {
0b1111110, 0b0011000, 0b1101101, 0b0111101, 0b0011011,
0b0110111, 0b1110111, 0b0011100, 0b1111111, 0b0111111
};
void setup()
{ //В цикле определим пины на выход
for (int i = 0; i <= COUNT_DIGITS; i++)
pinMode(i + SIX_COUNT, OUTPUT);
pinMode(button, INPUT);
}
void loop()
{
if (digitalRead(button) == HIGH)
{ //Нажатие кнопки
for (int i = 0; i <= 9; i++)
{ //Счет от 0 до 9
byte mask = arabNumbers[i]; //Найдем маску нужной цифры (например, цифре
//ноль – соответствует маска 1111110) и установим нужное значение для
//каждого сегмента
for (int segment = 0; segment <= COUNT_DIGITS; segment++)
{
//В переменную запишем, нужно ли зажигать светодиод сегмента
boolean onLamp = bitRead(mask, segment);
//Зажигаем либо гасим сегмент
digitalWrite(segment + SIX_COUNT, onLamp);
}
delay(1000); //Задержка на секунду
}
for (int i = 0; i <= COUNT_DIGITS; i++) //Выключить все сегменты
digitalWrite(i + SIX_COUNT, LOW);
}
}
#include <IRremote.h>
int RECV_PIN = 8; //Пин подключения ИК-приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); //Начало сообщения с монитором порта
irrecv.enableIRIn(); //Старт ИК-приемника
}
void loop()
{
if (irrecv.decode(&results)) //Если есть результат принятия
{
Serial.println(results.value); //Сообщить на монитор порта
irrecv.resume(); //Получить следующее значение с ИК-приемника
}
}