Съдържание:

Наистина предизвикателство: 5 стъпки
Наистина предизвикателство: 5 стъпки

Видео: Наистина предизвикателство: 5 стъпки

Видео: Наистина предизвикателство: 5 стъпки
Видео: НАРУШИЛИ 100 ЗАКОНОВ ЗА 24 ЧАСА… *** ПОСЛАЛ ПОЛИЦЕЙСКОГО *** 2024, Ноември
Anonim
Image
Image
Стъпка 1: Запоявайте веригата
Стъпка 1: Запоявайте веригата

Съвременният свят изисква хората да излязат от физическото и да живеят в рамките на цифровото.

С появата на Al и разпространението на технологиите хората се доверяват твърде много на машината и вярват, че тя винаги е правилна.

„Наистина“има за цел да разклати това фалшиво доверие чрез създаването на фалшив тест за детектор на лъжата. Хората лесно ще вярват, че наистина работи, но когато неверни отговори се при условие, че ще разтърси сляпата си доверие в технологиите.

Стъпка 1: Стъпка 1: Запояване на веригата

Тъй като моите произведения имат само една светлина, така че е много лесно да се запоява. Основният проблем е в началото, запоявах две светлини, но не покрих веднага експозиционната част. Така че, когато двата проводника се докоснат заедно. Това е късо.

Стъпка 2: Стъпка 2: Напишете кода

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; височина на линията: 15.0px; шрифт: 12.0px Times; цвят: #000000; background-color: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; височина на линията: 15.0px; шрифт: 12.0px Times; цвят: #000000; background-color: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Стъпка 2: Напишете кода

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

Това е пример за нашите модули Bluefruit LE базирани на nRF52

Вземете един днес в магазина за адафрут!

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

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

MIT лиценз, проверете LICENSE за повече информация

Целият текст по -горе и началният екран по -долу трябва да бъдат включени в

всяко преразпределение

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

/ Тази скица е предназначена за използване с контрола NeoPixel

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

/

/ - Компилирайте и прехвърлете тази скица към перото nRF52

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

// - Превключете към помощната програма NeoPixel

// - Щракнете върху бутона „свързване“, за да установите връзка и

// изпращаме метаданните за оформлението на пикселите

// - Използвайте помощната програма NeoPixel, за да актуализирате пикселите на вашето устройство

/* ЗАБЕЛЕЖКА: Тази скица изисква поне версия 1.1.0 на Adafruit_Neopixel !!! */

#включва

#включва

#включва

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Пин, използван за задвижване на NeoPixels * /

#дефинирайте МАКСКОМПОНЕНТИ 4

uint8_t *pixelBuffer = NULL;

uint8_t ширина = 0;

uint8_t височина = 0;

uint8_t крачка;

uint8_t componentsValue;

bool е 400Hz;

uint8_t компоненти = 3; // само 3 и 4 са валидни стойности

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// BLE услуга

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

void setup ()

{

Serial.begin (115200);

докато (! Серийно) забавяне (10); // за nrf52840 с роден usb

Serial.println ("Неопикселов тест Adafruit Bluefruit");

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

Serial.println ();

Serial.println ("Моля, свържете се с помощта на приложението Bluefruit Connect LE");

// Конфигуриране на неопиксели

neopixel.begin ();

// Init Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Проверете bluefruit.h за поддържани стойности

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// За да бъде последователен, OTA DFU трябва първо да се добави, ако съществува

bledfu.begin ();

// Конфигуриране и стартиране на информационна услуга на устройството

bledis.setManufacturer ("Adafruit Industries");

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

bledis.begin ();

// Конфигурирайте и стартирайте услугата BLE UART

bleuart.begin ();

// Настройване и стартиране на реклама

startAdv ();

}

void startAdv (void)

{

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

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Включва 128-битов uuid bleuart

Bluefruit. Advertising.addService (bleuart);

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

// Тъй като няма място за „Име“в рекламния пакет

Bluefruit. ScanResponse.addName ();

/* Започнете да рекламирате

* - Активирайте автоматичното рекламиране, ако е изключено

* - Интервал: бърз режим = 20 ms, бавен режим = 152,5 ms

* - Времето за изчакване за бърз режим е 30 секунди

* - Старт (изчакване) с изчакване = 0 ще рекламира завинаги (докато се свърже)

*

* За препоръчителен рекламен интервал

*

*/

Bluefruit. Advertising.restartOnDisconnect (вярно);

Bluefruit. Advertising.setInterval (32, 244); // в единица от 0,625 ms

Bluefruit. Advertising.setFastTimeout (30); // брой секунди в бърз режим

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

}

void connect_callback (uint16_t conn_handle)

{

// Вземете препратката към текущата връзка

BLEConnection * връзка = Bluefruit. Connection (conn_handle);

char централно_име [32] = {0};

connection-> getPeerName (central_name, sizeof (central_name));

Serial.print ("Свързан с");

Serial.println (central_name);

Serial.println („Моля, изберете раздела„ Neopixels “, щракнете върху„ Connect “и се забавлявайте“);

}

void loop ()

{

// Ехо получени данни

ако (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int команда = bleuart.read ();

switch (команда) {

случай 'V': {// Вземете версия

commandVersion ();

прекъсване;

}

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

commandSetup ();

прекъсване;

}

случай 'C': {// Изчистване с цвят

commandClearColor ();

прекъсване;

}

случай 'B': {// Задайте яркост

commandSetBrightness ();

прекъсване;

}

случай 'P': {// Задаване на пиксел

commandSetPixel ();

прекъсване;

}

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

commandImage ();

прекъсване;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

for (int j = 0; j <височина; j ++)

{

for (int i = 0; i <ширина; i ++) {

ако (компоненти == 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 += крачка - ширина; // Преместване на pixelIndex към следващия ред (вземете предвид крачката)

}

neopixel.show ();

}

void commandVersion () {

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

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

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

width = bleuart.read ();

височина = bleuart.read ();

stride = bleuart.read ();

componentsValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

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

компоненти = (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% г / п", pixelType);

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

if (pixelBuffer! = NULL) {

delete pixelBuffer;

}

uint32_t размер = ширина*височина;

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

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

neopixel.updateType (pixelType);

neopixel.setPin (ПИН);

// Свършен

sendResponse ("OK");

}

void commandSetBrightness () {

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

// Прочетете стойност

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

// Задайте яркост

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

// Опресняване на пиксели

swapBuffers ();

// Свършен

sendResponse ("OK");

}

void commandClearColor () {

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

// Четене на цвят

uint8_t цвят [MAXCOMPONENTS];

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

if (bleuart.available ()) {

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

j ++;

}

}

// Задайте всички светодиоди на цвят

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

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i <размер; i ++) {

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

*base_addr = цвят [j];

base_addr ++;

}

}

// Разменяйте буфери

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

swapBuffers ();

ако (компоненти == 3) {

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

}

иначе {

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

}

// Свършен

sendResponse ("OK");

}

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 <компоненти;) {

if (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Задаване на цветове

uint32_t neopixelIndex = y*крачка+x;

uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t цвят;

ако (компоненти == 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 ("OK");

}

void commandImage () {

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

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

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

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i <размер; i ++) {

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

if (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

ако (компоненти == 3) {

uint32_t индекс = i*компоненти;

Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [индекс], pixelBuffer [индекс+1], pixelBuffer [индекс+2]);

}

*/

}

// Разменяйте буфери

Serial.println (F ("Получено изображение"));

swapBuffers ();

// Свършен

sendResponse ("OK");

}

void sendResponse (char const *отговор) {

Serial.printf ("Изпращане на отговор: %s / n", отговор);

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

}

Стъпка 3: Стъпка 3: Купуване на абажур

Стъпка 3: Закупуване на абажур
Стъпка 3: Закупуване на абажур
Стъпка 3: Закупуване на абажур
Стъпка 3: Закупуване на абажур

Стъпка 4: Стъпка 4: Издърпайте всичко заедно

Препоръчано: