Урок №05. Работа с аналоговыми портами. Фоторезистор.

## Описание

На этом занятии мы научимся считывать аналоговые значения с фоторезистора и работать с ними. В процессе урока мы сделаем макет умного освещения для дома.

1. Теоретическая справка об аналоговых портах.
2. Фоторезистор.
3. Оператор IF ELSE.
4. Практическое задание.

## Аналоговые порты

Аналоговый вход-тип порта ,который в основном служит для работы с различными датчиками(принимает значения от 0 до 1024,где 1024 = 5 Вольт). На arduino UNO аналоговые порты обозначаются A0-A5

Для получения значения с датчиков используется функция analogRead(№порта).

## Фоторезистор

   Фоторезистор(или LDR) - компонент, меняющий сопротивление в зависимости от количества света падающего на него. Благодаря ему ,с помощью аналоговых портов можно узнавать освещенность в том месте,где установлен фоторезистор

В абсолютной тьме = 500КОм.

В темноте = до 100КОм.

В освещенности = до 10Ком.

Резистор 10кОм работает по принципу делителя напряжения,для адекватной работы с аналоговым портом.

Код работы на Arduino (фоторезистор подключается к А0).

```
#define FotoRez  A0 //присвоим слову FotoRez значение порта A0

void setup(){

// в случае этого мини-проекта указывать в теле Setup ничего не надо,ибо аналоговые порты по умолчанию имеют характеристику pinMode(A0,INPUT);

}

void loop()
{
// считываем уровень освещённости.
int lightness = analogRead(FotoRez); //переменной lightness типа integer присваиваим значение с аналогового порта ,куда подключен фоторезистор

}

```

## Оператор IF ELSE

if (условие), используется в сочетании с операторами сравнения, проверяет, достигнута ли истинность условия, например, превышает ли входное значение заданное число. Формат оператора if следующий:

```
if (someVariable > 50)
{

// выполнять действия

}

```

Программа проверяет, значение someVariable больше чем 50 или нет. Если да, то выполняются определенные действия. Говоря иначе, если выражение в круглых скобках истинно, выполняются операторы внутри фигурных скобок. Если нет, программа пропускает этот код.

Список операторов сравнения для построения условий

 x != y
 x < y
 x > y
 x <= y
 x >= y

Конструкция **if..else** предоставляет больший контроль над процессом выполнения кода, чем базовый оператор if, позволяя осуществлять несколько проверок, объединенных вместе. Например, аналоговый вход может быть проверен и выполнено одно действие, если на входе меньше 500, или другой действие, если на входе 500 или больше. Код при этом может выглядеть так:

```
if (переменная < 500)
{
// действие A
}

else
{
// действие B
}

```

**Else** позволяет делать отличную от указанной в **if** проверку, чтобы можно было осуществлять сразу несколько взаимоисключающих проверок. Каждая проверка позволяет переходить к следующему за ней оператору не раньше, чем получит логический результат ИСТИНА. Когда проверка с результатом ИСТИНА найдена, запускается вложенная в нее блок операторов, и затем программа игнорирует все следующие строки в конструкции if..else. Если ни одна из проверок не получила результат ИСТИНА, по умолчанию выполняется блок операторов в else, если последний присутствует, и устанавливается действие по умолчанию.

Отметим, что конструкция else if может быть использована с или без заключительного else и наоборот. Допускается неограниченное число таких переходов else if.

```
if (переменная < 500){
// выполнять действие A
}

else if (переменная >= 1000)
{
// выполнять действие B
}

else
{
// выполнять действие  C
}

```

## Практическое задание

1. Собрать схему, включающую в себя светодиод и фоторезистор.
2. Написать код, такой, чтобы в зависимости от различных уровней освещения(темно, тускло, светло) менялась яркость светодиода.
3. Попробовать усовершенствовать работу сборки с помощью функции map().

При сборке этого проекта вам понадобятся ваши знания о ШИМ-портах и работе с ними, а так же придется считывать показания с аналогового входа и применять различные условия.