Платформа Arduino, не смотря на то, что является в первую очередь именно цифровой, то есть работающей на микроконтроллере именно с цифровыми данными, но тем не менее в ней реализована функция считывания и вывода дифференцированных данных,  по типу аналогового сигнала. То есть данные изменяются ступенчато, каждый раз когда приходит новый уровень сигнала. За счет высокой степени дифференцирования, сигнал очень напоминает аналоговый.

 В этом статье как раз и будет затронута тема работы с такими сигналами, на входе и на выходе Arduino.

Функция analogRead

Так как "полная" логическая 1 это 5 вольт, то изменение напряжения от 0 до 5 вольт будет считываться в значения от 0 до 1023, то есть итого 1024 шага. Если разделить 2 на эти шаги, то получится  шаг 0.0049 Вольт. Однако этот разброс может быть изменен если применить функцию analogReference().
 Само считывание значений с аналогового входа занимает примерно 100 микросекунд (0.0001 сек). Надо заметить, что для аналоговых входов существует своя отдельная колодка, подписанная "analog in" именно к ним и подключаемся.

Функция analogWrite

 На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают не все порты, а лишь только некоторые: 3, 5, 6, 9, 10 и 11. На плате Arduino Mega порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11. Так что если что-то не получается, то пробуем менять порт на выход. Теперь можно перейти к примеру.

Пример скетч для функций считывания и выхода (analogRead, analogWrite)

В качестве примера взгляните на СКЕТЧ. В нем все просто, если у нас на входе при чтении высокий сигнал, то и на выходе получается высокий сигнал. То есть чем выше уровень освещенности, тем выше напряжение на светодиоде. Вот и все. Теперь же небольшое видео по этой теме.

PS фоторезистор не знаю какой попался, диапазон его изменения от освещенности был от 10 мОм, до 2 кОм. (примерно так.)