ChatGPT пишет код для Arduino

Несмотря на то, что ChatGPT существует уже несколько лет, многие не догадываются использовать его для создания программного обеспечения для Arduino. А недавний эксперимент показал, что Искусственный Интеллект (ИИ) справляется с этим делом отлично. Разрабатывая синтезатор частот для радиостанции на базе микросхемы si5351, чтобы не тратить время на поиск файла или разработку кода с нуля, решено было использовать ИИ. Это заняло 1 минуту, и результат просто блеск.

Задача заключалась в следующем: нужно управлять частотомером на Ардуино от нуля до 40 с помощью двух кнопок вверх-вниз на дисплее TM1637. ChatGPT предложил данный файл за несколько секунд:

#include <TM1637Display.h>

#define CLK 2 // Тактовый вывод (Clock)
#define DIO 3 // Вывод данных (Data)

TM1637Display display(CLK, DIO);

#define BUTTON_UP 4 // Закрепить кнопку вверху
#define BUTTON_DOWN 5 // Контакт кнопки «Вниз»

int counter = 0; // Переменная, хранящая значение счетчика

void setup() {
pinMode(BUTTON_UP, INPUT);
pinMode(BUTTON_DOWN, INPUT);

// Инициализируем дисплей TM1637
display.setBrightness(7); // Устанавливаем яркость дисплея (от 0 до 7)
}

void loop() {
// Проверяем, была ли нажата кнопка вверх
if (digitalRead(BUTTON_UP) == HIGH) {
delay(50); // Устранение дребезга (предотвращение дрожания кнопок)
if (digitalRead(BUTTON_UP) == HIGH) {
incrementCounter();
}
}

// Проверяем, была ли нажата кнопка «вниз»
if (digitalRead(BUTTON_DOWN) == HIGH) {
delay(50); // Debouncing
if (digitalRead(BUTTON_DOWN) == HIGH) {
decrementCounter();
}
}

// Устранение дребезга
display.showNumberDec(counter);

// Отображение текущего значения счетчика
delay(100);
}

void incrementCounter() {
if (counter < 40) {
counter++;
}
}

void decrementCounter() {
if (counter > 0) {
counter—;
}
}

Немного ошибся, ведь положено не с нуля, а с единицы. Но это можно исправить — if (счетчик > 1) вместо if (счетчик > 0), и if (счетчик < 1) вместо if (счетчик < 0). Кроме того, можно задать номер канала после включения — int счетчик = 0; // Переменная, хранящая значение счетчика. После загрузки в Arduino индикатор заработал без проблем.

Теперь осталось разработать дополнение к скетчу, где номер канала будет отвечать за конкретную частоту, и передать эти данные в si5153. Попробуем снова использовать ИИ.

#include <TM1637Display.h>
#include «Si5351.h»

#define CLK_TM1637 2 // тактовый вывод TM1637
#define DIO_TM1637 3 // вывод данных TM1637

TM1637Display display(CLK_TM1637, DIO_TM1637);

#define BUTTON_UP 4 // Закрепить кнопку вверху
#define BUTTON_DOWN 5 // Контакт кнопки «Вниз»

int counter = 0; // Переменная, хранящая значение счетчика

#define SI5351_CLK_PIN 13
#define SI5351_DATA_PIN 11
#define SI5351_RESET_PIN 10

Si5351 si5351;

void setup() {
pinMode(BUTTON_UP, INPUT);
pinMode(BUTTON_DOWN, INPUT);

// Инициализируем дисплей TM1637
display.setBrightness(7); // Устанавливаем яркость дисплея (0 — 7)

// Инициализируем синтезатор Si5351
si5351.init(SI5351_CLK_PIN, SI5351_DATA_PIN, SI5351_RESET_PIN);
}

void loop() {
// Проверяем, была ли нажата кнопка вверх
if (digitalRead(BUTTON_UP) == HIGH) {
delay(50); // Debouncing (zapobieganie drganiom przycisku)
if (digitalRead(BUTTON_UP) == HIGH) {
incrementCounter();
}
}

// Проверяем, была ли нажата кнопка «вниз»
if (digitalRead(BUTTON_DOWN) == HIGH) {
delay(50); // Debouncing
if (digitalRead(BUTTON_DOWN) == HIGH) {
decrementCounter();
}
}

// Отображение текущего значения счетчика
display.showNumberDec(counter);

// Устанавливаем частоту на синтезаторе Si5351
setSi5351Frequency();

// Добавляем задержку, чтобы избежать частых обновлений
delay(100);
}

void incrementCounter() {
if (counter < 40) {
counter++;
}
}

void decrementCounter() {
if (counter > 0) {
counter—;
}
}

void setSi5351Frequency() {
// Пример преобразования частоты в зависимости от значения счетчика
// Далее предполагается, что каждый шаг счетчика составляет 10 кГц
unsigned long frequency = 27100 + (counter * 10000);

// Устанавливаем частоту на синтезаторе Si5351
si5351.setFrequency(SI5351_CLK0, frequency);
}

На этот раз ChatGPT изменил способ подключения кнопок. Но это не так важно, хотя и требует двух дополнительных резисторов. Главное что это работает без проблем. Осталось только соединить их друг с другом.

Вывод

Результат показал — ИИ отлично подходит для создания не очень сложного программного обеспечения. Альтернативно, он может даже помочь в сложных случаях. Единственная проблема – дать ему конкретное, четкое задание.

У ИИ больше преимуществ, потому что он знает гораздо больше, чем средний программист. Например, при разработке приемника для NavTex пришлось объяснять принципы работы этой системы приема метеоинформации очень опытному программисту, что заняло некоторое время. ИИ же знает эту систему сразу. Не исключено что код, разработанный ИИ, лучше кода созданного людьми. Потому что ИИ лучше знает, как «думает» машина, чем человек. ИИ лучше справляется с машинными кодами, чем с переводом текстов на иностранные языки.

Более того, ИИ способен заменить любого человека, работающего за компьютером. Он всего за несколько секунд сделает любую графику, обработает Excel, отредактирует и исправит текст, обобщит тысячи документов и покажет где находится то, что ищете. Он будет делать математические расчеты, прогнозы и исследовать рынок.

Но всё-же это просто инструмент, который лишь поддерживает человека, а не заменяет его. Кто-то все равно должен загрузить приложение и протестировать его в реале. В любом случае, написание кода обычно является наименее интересным этапом проекта. И иметь инструмент, который большинство проектов подготовит для нас по самым высоким стандартам и с учетом новейших решений – это только плюс для дела.

Оцените материал:

3.6 / 5. Рейтинг: 15

Может подскажете что улучшить?