Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

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

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

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


Ambox content.png Черновик


Управление 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. }

См.также

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