Mündəricat:

Həqiqətən Çağırış: 5 addım
Həqiqətən Çağırış: 5 addım

Video: Həqiqətən Çağırış: 5 addım

Video: Həqiqətən Çağırış: 5 addım
Video: Norveç hökumətindən xalqa “Rusiya ilə savaşa hazırlıq” çağırışı: NATO 5-ci bəndi işə salır? 2024, Iyul
Anonim
Image
Image
Addım 1: Dövrəni Lehimləyin
Addım 1: Dövrəni Lehimləyin

Müasir dünya insanlardan fiziki olaraq çıxmağı və rəqəmsal mühitdə yaşamağı tələb edir.

Al -ın görünüşü və texnologiyanın yayılması ilə insanlar maşına çox güvənirlər və həmişə doğru olduğuna inanırlar.

"Həqiqətən", saxta yalan detektoru testi yaratmaqla bu yanlış güvəni sarsıtmaq məqsədi daşıyır. İnsanlar Həqiqətən işlədiyinə asanlıqla inanacaqlar, ancaq yanlış cavablar verildikdə texnologiyaya olan inamlarını sarsıdacaqlar.

Addım 1: Adım 1: Dövrəni Lehimləyin

Çünki əsərlərimin yalnız bir işığı var, ona görə də lehimləmək çox asandır. Əsas problem başlanğıcdadır, iki işığı lehimləyirəm, amma ifşa hissəsini dərhal örtmədim. Beləliklə, iki tel hissəsi bir -birinə toxunanda. Qısadır.

Addım 2: Adım 2: Kodu yazın

p.p1 {marj: 0.0px 0.0px 0.0px 0.0px; xətt hündürlüyü: 15.0px; font: 12.0px Times; rəng: #000000; fon rəngi: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; xətt hündürlüyü: 15.0px; font: 12.0px Times; rəng: #000000; fon rəngi: #ffffff; min yüksəklik: 14.0px} span.s1 {font-kerning: none}

Addım 2: Kodu yazın

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

Bu nRF52 əsaslı Bluefruit LE modullarımız üçün bir nümunədir

Adafruit mağazasında bu gün birini götür!

Adafruit, bu açıq mənbə kodunu təmin edərək vaxt və resurslar qoyur.

zəhmət olmasa Adafruit və açıq mənbə aparatını satın alaraq dəstəkləyin

Adafruit məhsulları!

MIT lisenziyası, daha çox məlumat üçün LİSANSİYA baxın

Yuxarıdakı bütün mətn və aşağıda açılan ekran daxil edilməlidir

hər hansı bir yenidən bölüşdürmə

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

/ Bu eskizin NeoPixel nəzarəti ilə istifadə edilməsi nəzərdə tutulmuşdur

// Adafruit -in Bluefruit LE Connect mobil tətbiqetməsində.

/

/ - Bu eskizi tərtib edin və nRF52 Tüyünə yandırın

// - Bluefruit LE Connect tətbiqini açın

// - NeoPixel yardım proqramına keçin

// - Bir əlaqə qurmaq üçün 'əlaqə' düyməsini basın və

// piksel düzeni haqqında meta məlumat göndərin

// - Cihazınızdakı pikselləri yeniləmək üçün NeoPixel yardım proqramından istifadə edin

/* DİQQƏT: Bu eskiz üçün ən azı Adafruit_Neopixel 1.1.0 versiyası tələb olunur !!! */

#daxil edin

#daxil edin

#daxil edin

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * NeoPikselləri idarə etmək üçün istifadə olunan pin * /

#MAXCOMPONENTS 4 təyin edin

uint8_t *pixelBuffer = NULL;

uint8_t eni = 0;

uint8_t hündürlük = 0;

uint8_t addım;

uint8_t komponentləriDəyər;

bool 400Hz;

uint8_t komponentləri = 3; // yalnız 3 və 4 etibarlı dəyərlərdir

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// BLE Xidməti

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

boş quraşdırma ()

{

Serial.begin (115200);

while (! Serial) gecikmə (10); // yerli usb ilə nrf52840 üçün

Serial.println ("Adafruit Bluefruit Neopixel Testi");

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

Serial.println ();

Serial.println ("Zəhmət olmasa Bluefruit Connect LE tətbiqindən istifadə edərək əlaqə saxlayın");

// Neopixelləri konfiqurasiya edin

neopixel.begin ();

// Bluefruit -i işə salın

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Dəstəklənən dəyərlər üçün bluefruit.h yoxlayın

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Tutarlı olmaq üçün OTA DFU varsa, əvvəlcə əlavə edilməlidir

bledfu.begin ();

// Cihaz Məlumat Xidmətini konfiqurasiya edin və işə salın

bledis.setMen Manufacturer ("Adafruit Industries");

bledis.setModel ("Bluefruit Feather52");

bledis.begin ();

// BLE UART xidmətini konfiqurasiya edin və işə salın

bleuart.begin ();

// Reklam qurun və işə başlayın

startAdv ();

}

void startAdv (boş)

{

// Reklam paketi

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// bleuart 128 bitlik uuid daxil edin

Bluefruit. Advertising.addService (bleuart);

// İkincil Tarama Cavabı paketi (isteğe bağlı)

// Reklam paketində 'Ad' üçün yer olmadığı üçün

Bluefruit. ScanResponse.addName ();

/* Reklam etməyə başlayın

* - Bağlantı kəsildikdə avtomatik reklamı aktivləşdirin

* - Aralıq: sürətli rejim = 20 ms, yavaş rejim = 152.5 ms

* - Sürətli rejim üçün zaman aşımı 30 saniyədir

* - Zaman aşımı ilə başla (zaman aşımı) = 0 sonsuza qədər reklam edəcək (bağlanana qədər)

*

* Tövsiyə olunan reklam aralığı üçün

*

*/

Bluefruit. Advertising.restartOnDisconnect (doğru);

Bluefruit. Advertising.setInterval (32, 244); // 0.625 ms vahidində

Bluefruit. Advertising.setFastTimeout (30); // sürətli rejimdə saniyə sayı

Bluefruit. Advertising.start (0); // 0 = n saniyədən sonra reklamı dayandırmayın

}

void connect_callback (uint16_t conn_handle)

{

// Cari əlaqəyə istinad alın

BLEConnection* bağlantısı = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

keçid-> getPeerName (central_name, sizeof (central_name));

Serial.print ("Bağlandı");

Serial.println (central_name);

Serial.println ("Zəhmət olmasa 'Neopixels' sekmesini seçin, 'Bağlan' düyməsini basın və əylənin)";

}

boşluq döngəsi ()

{

// Echo məlumat aldı

əgər (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int əmri = bleuart.read ();

keçid (əmr) {

hal 'V': {// Versiya alın

commandVersion ();

fasilə;

}

case 'S': {// Ölçüləri, komponentləri qurun, addım…

commandSetup ();

fasilə;

}

hal 'C': {// Rənglə silin

commandClearColor ();

fasilə;

}

hal 'B': {// Parlaqlığı Ayarlayın

commandSetBrightness ();

fasilə;

}

hal 'P': {// Pixel qurun

commandSetPixel ();

fasilə;

}

case 'I': {// Yeni şəkil alın

commandImage ();

fasilə;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

üçün (int j = 0; j <hündürlük; j ++)

{

üçün (int i = 0; i <en; i ++) {

əgər (komponentlər == 3) {

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

}

başqa {

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

}

base_addr+= komponentlər;

pixelIndex ++;

}

pixelIndex += addım - en; // PixelIndex'i növbəti sıraya köçürün (addımı nəzərə alın)

}

neopixel.show ();

}

void commandVersion () {

Serial.println (F ("Command: Version check"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

Serial.println (F ("Əmr: Quraşdırma"));

eni = bleuart.read ();

hündürlük = bleuart.read ();

addım = bleuart.read ();

komponentlərValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = komponentlərValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

komponentler = (bileşenlerDeğeri == NEO_RGB || bileşenlerDeğeri == NEO_RBG || bileşenlerDeğeri == NEO_GRB || bileşenlerDeğeri == NEO_GBR || bileşenlerDeğeri == NEO_BRG || KomponentleriDeğeri == NEO_BGR)? 3: 4;

Serial.printf ("\ tsize: %dx %d / n", en, hündürlük);

Serial.printf ("\ tstride: %d / n", addım);

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

Serial.printf ("\ tcomponents: %d / n", komponentlər);

əgər (pixelBuffer! = NULL) {

silmək pixelBuffer;

}

uint32_t ölçüsü = eni*hündürlüyü;

pixelBuffer = yeni uint8_t [ölçüsü*komponentləri];

neopixel.updateLength (ölçü);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Tamamlandı

sendResponse ("OK");

}

void commandSetBrightness () {

Serial.println (F ("Command: SetBrightness"));

// Dəyəri oxuyun

uint8_t parlaqlıq = bleuart.read ();

// Parlaqlığı təyin edin

neopixel.setBarıqlıq (parlaqlıq);

// Pikselləri yeniləyin

swapBuffers ();

// Tamamlandı

sendResponse ("OK");

}

void commandClearColor () {

Serial.println (F ("Komanda: ClearColor"));

// Rəngi oxuyun

uint8_t rəng [MAXCOMPONENTS];

üçün (int j = 0; j <komponentlər;) {

əgər (bleuart.available ()) {

rəng [j] = bleuart.read ();

j ++;

}

}

// Bütün ledləri rəngləndirin

int ölçüsü = eni * hündürlük;

uint8_t *base_addr = pixelBuffer;

üçün (int i = 0; i <ölçü; i ++) {

üçün (int j = 0; j <komponentləri; j ++) {

*base_addr = rəng [j];

base_addr ++;

}

}

// Tamponları dəyişdirin

Serial.println (F ("ClearColor tamamlandı"));

swapBuffers ();

əgər (komponentlər == 3) {

Serial.printf ("\ tclear (%d, %d, %d) n", rəng [0], rəng [1], rəng [2]);

}

başqa {

Serial.printf ("\ tclear (%d, %d, %d, %d) n", rəng [0], rəng [1], rəng [2], rəng [3]);

}

// Tamamlandı

sendResponse ("OK");

}

void commandSetPixel () {

Serial.println (F ("Əmr: SetPixel"));

// Vəzifəni oxuyun

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Rəngləri oxuyun

uint32_t pixelOffset = y*eni+x;

uint32_t pixelDataOffset = pixelOffset*komponentləri;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

üçün (int j = 0; j <komponentlər;) {

əgər (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Rəngləri təyin edin

uint32_t neopixelIndex = y*addım+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t rəng;

əgər (komponentlər == 3) {

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

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

}

başqa {

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, rəng);

neopixel.show ();

// Tamamlandı

sendResponse ("OK");

}

void commandImage () {

Serial.printf ("Əmr: Şəkil %dx %d, %d, %d / n", en, hündürlük, komponentlər, addım);

// Yeni piksel tamponu alın

int ölçüsü = eni * hündürlük;

uint8_t *base_addr = pixelBuffer;

üçün (int i = 0; i <ölçü; i ++) {

üçün (int j = 0; j <komponentlər;) {

əgər (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

əgər (komponentlər == 3) {

uint32_t index = i*komponentləri;

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

}

*/

}

// Tamponları dəyişdirin

Serial.println (F ("Şəkil alındı"));

swapBuffers ();

// Tamamlandı

sendResponse ("OK");

}

etibarsız sendResponse (char const *cavabı) {

Serial.printf ("Cavab göndər: %s / n", cavab);

bleuart.write (cavab, strlen (cavab)*sizeof (char));

}

Adım 3: Adım 3: Abajur Alın

Addım 3: Abajur alqı -satqısı
Addım 3: Abajur alqı -satqısı
Addım 3: Abajur alqı -satqısı
Addım 3: Abajur alqı -satqısı

Addım 4: Addım 4: Hamısını Birlikdə çəkin

Tövsiyə: