Оглавление:

Действительно вызов: 5 шагов
Действительно вызов: 5 шагов

Видео: Действительно вызов: 5 шагов

Видео: Действительно вызов: 5 шагов
Видео: 5 шагов к энергетике на миллион от Ники Шуламит 2024, Июль
Anonim
Image
Image
Шаг 1: припаяйте схему
Шаг 1: припаяйте схему

Современный мир требует от людей выйти из физического мира и жить в цифровом мире.

С появлением Ала и распространением технологий люди стали слишком доверять машине и верят, что она всегда правильная.

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

Шаг 1: Шаг 1: припаяйте схему

Потому что у моих работ только одна лампочка, поэтому паять очень легко. Основная проблема в начале, паял две лампочки, но засветил часть экспозиции не сразу. Итак, когда два провода соприкасаются друг с другом. Это короткое замыкание.

Шаг 2: Шаг 2: напишите код

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; высота строки: 15,0 пикселей; шрифт: 12.0px Times; цвет: # 000000; цвет фона: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; высота строки: 15,0 пикселей; шрифт: 12.0px Times; цвет: # 000000; цвет фона: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Шаг 2: напишите код

/*********************************************************************

Это пример для наших модулей Bluefruit LE на базе nRF52.

Купите один сегодня в магазине adafruit!

Adafruit вкладывает время и ресурсы в создание этого открытого исходного кода, пожалуйста, поддержите Adafruit и оборудование с открытым исходным кодом, купив

продукты от Adafruit!

Лицензия MIT, дополнительную информацию см. В ЛИЦЕНЗИИ

Весь текст вверху и заставка внизу должны быть включены в

любое перераспределение

*********************************************************************

/ Этот эскиз предназначен для использования с элементом управления NeoPixel.

// поверхность в мобильном приложении Adafruit Bluefruit LE Connect.

/

/ - Скомпилировать и прошить этот скетч в nRF52 Feather

// - Откройте приложение Bluefruit LE Connect

// - Переходим на утилиту NeoPixel

// - Нажмите кнопку «Подключиться», чтобы установить соединение и

// отправляем метаданные о макете пикселей

// - Используйте утилиту NeoPixel для обновления пикселей на вашем устройстве

/ * ПРИМЕЧАНИЕ. Для этого скетча требуется Adafruit_Neopixel как минимум версии 1.1.0 !!! * /

#включают

#включают

#включают

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Вывод, используемый для управления NeoPixels * /

#define MAXCOMPONENTS 4

uint8_t * pixelBuffer = NULL;

uint8_t width = 0;

uint8_t height = 0;

uint8_t stride;

uint8_t componentsValue;

bool - 400 Гц;

uint8_t components = 3; // допустимые значения только 3 и 4

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// Служба BLE

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

установка void ()

{

Serial.begin (115200);

while (! Serial) задержка (10); // для nrf52840 с родным usb

Serial.println («Тест Adafruit Bluefruit Neopixel»);

Serial.println ("--------------------------------");

Serial.println ();

Serial.println («Подключитесь с помощью приложения Bluefruit Connect LE»);

// Настроить Neopixels

neopixel.begin ();

// Инициализация Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Проверяем bluefruit.h на предмет поддерживаемых значений

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Для согласованности сначала нужно добавить OTA DFU, если он существует

bledfu.begin ();

// Настроить и запустить службу информации об устройстве

bledis.setManufacturer («Адафрут Индастриз»);

bledis.setModel ("Перо синего плода52");

bledis.begin ();

// Настроить и запустить службу BLE UART

bleuart.begin ();

// Настраиваем и запускаем рекламу

startAdv ();

}

недействительным startAdv (недействительным)

{

// Рекламный пакет

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Включаем bleuart 128-битный uuid

Bluefruit. Advertising.addService (bleuart);

// Пакет ответа вторичного сканирования (необязательно)

// Поскольку в рекламном пакете нет места для 'Name'

Bluefruit. ScanResponse.addName ();

/ * Начать рекламу

* - Включить автоматическую рекламу при отключении

* - Интервал: быстрый режим = 20 мс, медленный режим = 152,5 мс

* - Таймаут для быстрого режима 30 секунд

* - Запуск (тайм-аут) с таймаутом = 0 будет рекламироваться вечно (до подключения)

*

* За рекомендованный рекламный интервал

*

*/

Bluefruit. Advertising.restartOnDisconnect (true);

Bluefruit. Advertising.setInterval (32, 244); // с шагом 0,625 мс

Bluefruit. Advertising.setFastTimeout (30); // количество секунд в быстром режиме

Bluefruit. Advertising.start (0); // 0 = Не прекращать рекламу через n секунд

}

void connect_callback (uint16_t conn_handle)

{

// Получаем ссылку на текущее соединение

BLEConnection * соединение = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

соединение-> getPeerName (central_name, sizeof (central_name));

Serial.print («Подключено к»);

Serial.println (центральное_имя);

Serial.println («Пожалуйста, выберите вкладку« Неопиксели », нажмите« Подключиться »и получайте удовольствие»);

}

пустой цикл ()

{

// Эхо полученных данных

если (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int command = bleuart.read ();

switch (command) {

case 'V': {// Получить версию

commandVersion ();

перерыв;

}

case 'S': {// Настройка размеров, компонентов, шага…

commandSetup ();

перерыв;

}

case 'C': {// Очистить цветом

commandClearColor ();

перерыв;

}

case 'B': {// Установить яркость

commandSetBrightness ();

перерыв;

}

case 'P': {// Установить пиксель

commandSetPixel ();

перерыв;

}

case 'I': {// Получение нового изображения

commandImage ();

перерыв;

}

}

}

}

void swapBuffers ()

{

uint8_t * base_addr = pixelBuffer;

int pixelIndex = 0;

для (int j = 0; j <height; j ++)

{

for (int i = 0; i <width; i ++) {

if (components == 3) {

neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2)));

}

еще {

neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2), * (base_addr + 3)));

}

base_addr + = компоненты;

pixelIndex ++;

}

pixelIndex + = stride - ширина; // Перемещаем pixelIndex в следующую строку (с учетом шага)

}

neopixel.show ();

}

void commandVersion () {

Serial.println (F ("Команда: проверка версии"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

Serial.println (F ("Команда: Настройка"));

ширина = bleuart.read ();

высота = bleuart.read ();

stride = bleuart.read ();

componentsValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

components = (componentsValue == NEO_RGB || componentsValue == NEO_RBG || componentsValue == NEO_GRB || componentsValue == NEO_GBR || componentsValue == NEO_BRG || componentsValue == NEO_BGR)? 3: 4;

Serial.printf ("\ tsize:% dx% d / n", ширина, высота);

Serial.printf ("\ tstride:% d / n", шаг);

Serial.printf ("\ tpixelType% d / n", pixelType);

Serial.printf ("\ tcomponents:% d / n", компоненты);

if (pixelBuffer! = NULL) {

удалить pixelBuffer;

}

uint32_t size = ширина * высота;

pixelBuffer = новый uint8_t [размер * компоненты];

neopixel.updateLength (размер);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Выполнено

sendResponse («ОК»);

}

void commandSetBrightness () {

Serial.println (F ("Команда: SetBrightness"));

// Считываем значение

uint8_t яркость = bleuart.read ();

// Устанавливаем яркость

neopixel.setBrightness (яркость);

// Обновить пиксели

swapBuffers ();

// Выполнено

sendResponse («ОК»);

}

void commandClearColor () {

Serial.println (F ("Команда: ClearColor"));

// Считываем цвет

uint8_t цвет [МАКСКОМПОНЕНТЫ];

for (int j = 0; j <components;) {

if (bleuart.available ()) {

цвет [j] = bleuart.read ();

j ++;

}

}

// Устанавливаем все светодиоды в цвет

int size = ширина * высота;

uint8_t * base_addr = pixelBuffer;

for (int i = 0; i <size; i ++) {

for (int j = 0; j <компоненты; j ++) {

* base_addr = цвет [j];

base_addr ++;

}

}

// Поменять местами буферы

Serial.println (F ("ClearColor завершен"));

swapBuffers ();

if (components == 3) {

Serial.printf ("\ tclear (% d,% d,% d) n", цвет [0], цвет [1], цвет [2]);

}

еще {

Serial.printf ("\ tclear (% d,% d,% d,% d) n", цвет [0], цвет [1], цвет [2], цвет [3]);

}

// Выполнено

sendResponse («ОК»);

}

void commandSetPixel () {

Serial.println (F ("Команда: SetPixel"));

// Считываем позицию

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Считываем цвета

uint32_t pixelOffset = y * ширина + x;

uint32_t pixelDataOffset = pixelOffset * компоненты;

uint8_t * base_addr = pixelBuffer + pixelDataOffset;

for (int j = 0; j <components;) {

if (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Устанавливаем цвета

uint32_t neopixelIndex = y * шаг + x;

uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t color;

if (components == 3) {

color = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));

Serial.printf ("\ tcolor (% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));

}

еще {

color = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2), * (pixelBufferPointer + 3));

Serial.printf ("\ tcolor (% d,% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2), * (pixelBufferPointer + 3));

}

neopixel.setPixelColor (neopixelIndex, цвет);

neopixel.show ();

// Выполнено

sendResponse («ОК»);

}

void commandImage () {

Serial.printf ("Команда: Изображение% dx% d,% d,% d / n", ширина, высота, компоненты, шаг);

// Получение нового пиксельного буфера

int размер = ширина * высота;

uint8_t * base_addr = pixelBuffer;

for (int i = 0; i <size; i ++) {

for (int j = 0; j <components;) {

if (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

if (components == 3) {

uint32_t index = i * компоненты;

Serial.printf ("\ tp% d (% d,% d,% d) n", i, pixelBuffer [index], pixelBuffer [index + 1], pixelBuffer [index + 2]);

}

*/

}

// Поменять местами буферы

Serial.println (F («Изображение получено»));

swapBuffers ();

// Выполнено

sendResponse («ОК»);

}

void sendResponse (char const * response) {

Serial.printf («Отправить ответ:% s / n», ответ);

bleuart.write (ответ, strlen (ответ) * sizeof (char));

}

Шаг 3: Шаг 3: Покупка абажура

Шаг 3: Покупка абажура
Шаг 3: Покупка абажура
Шаг 3: Покупка абажура
Шаг 3: Покупка абажура

Шаг 4: Шаг 4: Соберите все вместе

Рекомендуемые: