Arduino:Примеры/Управление RGB-светодиодом и динамиком по сети

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Управление RGB-светодиодом и динамиком по сети

Данный пример демонстрирует управление RGB-светодиодом и динамиком по сети с помощью платы Arduino Uno и платы расширения Arduino Ethernet Shield

Необходимые компоненты

Монтажная схема

Соедините Arduino Uno и плату расширения Arduino Ethernet Shieldи после этого подключите RGB-светодиод и динамик согласно монтажной схеме.

Arduino ethernet RGB speaker control 1.png

Код

  1 #include <Ethernet.h>                                                                                     // Подключение библиотеки Ethernet
  2 #include <SPI.h>                                                                                          // Подключение библиотеки SPI
  3 
  4 #define BLUE    5                                                                                         // Синий вывод RGB-светодиода подключен к 5 цифровому контакту
  5 #define GREEN   6                                                                                         // Зеленый вывод RGB-светодиода подключен к 6 цифровому контакту
  6 #define RED     7                                                                                         // Красный вывод RGB-светодиода подключен к 7 цифровому контакту
  7 #define SPEAKER 3                                                                                         // Вывод динамика подключен к 3 цифровому контакту
  8 
  9 int freq = 0;                                                                                             // Частота звука по умолчанию 
 10 int pin;                                                                                                  // Контакт светодиода для управления
 11 
 12 byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4A, 0xE0 };                                                      // MAC-адрес вашего Ethernet шилда
 13                                                                                                           // если вы его не знаете, можете оставить этот
 14 
 15 EthernetServer server = EthernetServer(80);                                                               // Создаем сервер прослушивающий 80 порт
 16 
 17 boolean receiving = false;                                                                                // Отслеживание получаемых данных от клиента
 18 
 19 void setup()
 20 {
 21   Serial.begin(9600);                                                                                     // Инициализация последовательного соединения на скорости 9600 бод
 22 
 23   pinMode(RED, OUTPUT);
 24   pinMode(GREEN, OUTPUT);
 25   pinMode(BLUE, OUTPUT);
 26 
 27   // Соединение с DHCP
 28   if (!Ethernet.begin(mac))
 29   {
 30     Serial.println("Could not Configure Ethernet with DHCP.");                                            // Вывод в монитор порта "Could not Configure Ethernet with DHCP."
 31                                                                                                           // ("Не удалось настроить Ethernet с помощью DHCP")
 32     return;
 33   }
 34   else
 35   {
 36     Serial.println("Ethernet Configured!");                                                               // Вывод в монитор порта "Ethernet Configured!"
 37                                                                                                           // "Ethernet настроен!"
 38   }
 39 
 40   // Запускаем сервер
 41   server.begin();
 42   Serial.print("Server Started.\nLocal IP: ");                                                            // Вывод в монитор порта "Server Started.\nLocal IP:"
 43                                                                                                           // (
 44                                                                                                           // Сервер запущен
 45                                                                                                           // Локальный IP: <здесь будет указан IP адрес>
 46                                                                                                           // )
 47   Serial.println(Ethernet.localIP());                                                                     // Вывод в монитор порта IP адреса
 48  
 49 }
 50 
 51 void loop()
 52 {
 53   EthernetClient client = server.available();
 54 
 55   if (client)
 56   {
 57 
 58    // HTTP запрос заканчивается пустой строкой
 59    boolean currentLineIsBlank = true;
 60    boolean sentHeader = false;
 61 
 62    while (client.connected())
 63    {
 64      if (client.available())
 65      {
 66        char c = client.read();                                                                             // Читаем данные из входящего буфера
 67 
 68        if(receiving && c == ' ') receiving = false;                                                        // Данные получены
 69        if(c == '?') receiving = true;                                                                      // Поиск аргументов переданных GET-запросом(аргументы после символа "?")
 70 
 71        // Обработка GET-запроса
 72        if(receiving)
 73        {
 74          // Если полученн аргумент 'L' - то управляем светодиодом
 75          if (c == 'L')
 76          {
 77            Serial.print("Toggling Pin ");                                                                  // Вывод в монитор порта "Toggling Pin" ("Переключаем контакт ")
 78            pin = client.parseInt();                                                                        // Ищем следующее корректное целое число во входящем потоке данных и сохраняем в переменной
 79            Serial.println(pin);                                                                            // Вывод в монитор порта номер контакта RGB-светодиода
 80            digitalWrite(pin, !digitalRead(pin));                                                           // Включаем/выключаем светодиод
 81            break;  
 82          }
 83          // Если получен аргумент 'S' - то управляем динамиком
 84          else if (c == 'S')
 85          {
 86            Serial.print("Setting Frequency to ");                                                          // Вывод в монитор порта "Setting Frequency to "("Настройка частоты на ")
 87            freq = client.parseInt();                                                                       // Ищем следующее корректное целое число во входящем потоке данных и сохраняем в переменной
 88            Serial.println(freq);                                                                           // Вывод в монитор порта выбранной частоты
 89            if (freq == 0)
 90              noTone(SPEAKER);                                                                              // Выключаем воспроизведение звука
 91            else
 92              tone(SPEAKER, freq);                                                                          // Включаем воспроизведение звука
 93            break;
 94          }
 95        }
 96     
 97        // Отправляем заголовок ответа и HTML-код
 98        if(!sentHeader)
 99        {
100           // Отправляем стандартный заголовок ответа HTTP
101           client.println("HTTP/1.1 200 OK");
102           client.println("Content-Type: text/html\n");
103      
104           // Красная кнопка переключения
105           client.println("<form action='' method='get'>");
106           client.println("<input type='hidden' name='L' value='7' />");
107           client.println("<input type='submit' value='Toggle Red' />");
108           client.println("</form>");
109      
110           // Зеленая кнопка переключения
111           client.println("<form action='' method='get'>");
112           client.println("<input type='hidden' name='L' value='6' />");
113           client.println("<input type='submit' value='Toggle Green' />");
114           client.println("</form>");
115      
116           // Синяя кнопка переключения
117           client.println("<form action='' method='get'>");
118           client.println("<input type='hidden' name='L' value='5' />");
119           client.println("<input type='submit' value='Toggle Blue' />");
120           client.println("</form>");
121      
122           // Ползунок частоты для динамика
123           client.println("<form action='' method='get'>");
124           client.print("<input type='range' name='S' min='0' max='1000' step='100' value='0'/>");
125           client.println("<input type='submit' value='Set Frequency' />");
126           client.println("</form>");
127      
128           sentHeader = true;
129         }
130 
131         if (c == '\n' && currentLineIsBlank) break;
132 
133         if (c == '\n')
134         {
135           currentLineIsBlank = true;
136         }
137         else if (c != '\r')
138         {
139           currentLineIsBlank = false;
140         }
141       }
142     }
143     delay(5);                                                                                             // Даём веб-браузеру время для получения данных
144     client.stop();                                                                                        // Закрываем соединение
145   }
146 }

См.также

Внешние ссылки