Mundarija:

Haqiqiy qiyinchilik: 5 qadam
Haqiqiy qiyinchilik: 5 qadam

Video: Haqiqiy qiyinchilik: 5 qadam

Video: Haqiqiy qiyinchilik: 5 qadam
Video: Hayotni O'zgartiruvchi 5 ODAT! Robin Sharma o'zbek tilida. HAQIQIY MOTIVATSIYA 2024, Iyul
Anonim
Image
Image
1 -qadam: O'chirish davri
1 -qadam: O'chirish davri

Zamonaviy dunyo odamlardan jismoniy muhitdan chiqib, raqamli muhitda yashashni talab qiladi.

Alning paydo bo'lishi va texnologiyaning tarqalishi bilan odamlar mashinaga haddan tashqari ishonishadi va uni har doim to'g'ri deb hisoblaydilar.

"Haqiqatan ham" soxta yolg'onni aniqlash testini yaratish orqali bu noto'g'ri ishonchni yo'qotishga mo'ljallangan. Odamlar haqiqatan ham ishlayotganiga osonlikcha ishonishadi, lekin noto'g'ri javoblar berilsa, bu ularning texnologiyaga bo'lgan ishonchini yo'qotadi.

1 -qadam: 1 -qadam: O'chirish davri

Chunki mening asarlarimda faqat bitta yorug'lik bor, shuning uchun lehimlash juda oson. Asosiy muammo boshida, men ikkita nurni lehimlayman, lekin men ekspozitsiya qismini darhol qoplamadim. Shunday qilib, ikkita sim bir -biriga tegganda. Qisqa.

2 -qadam: 2 -qadam: Kodni yozing

p.p1 {marj: 0.0px 0.0px 0.0px 0.0px; chiziq balandligi: 15,0 piksel; shrift: 12.0px marta; rang: #000000; fon rangi: #ffffff}

p.p2 {marj: 0.0px 0.0px 0.0px 0.0px; chiziq balandligi: 15,0 piksel; shrift: 12.0px marta; rang: #000000; fon rangi: #ffffff; min balandligi: 14.0px} span.s1 {shrift-kerning: yo'q}

2 -qadam: Kodni yozing

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

Bu nRF52 asosidagi Bluefruit LE modullarimiz uchun namuna

Adafruit do'konida bugun birini oling!

Adafruit bu ochiq kodli kodni taqdim etadigan vaqt va resurslarni sarflaydi.

Iltimos, Adafruit va ochiq manbali uskunalarni sotib oling

Adafruit mahsulotlari!

MIT litsenziyasi, qo'shimcha ma'lumot olish uchun Litsenziyani tekshiring

Yuqoridagi barcha matnlar va pastdagi ekran ochilishi kerak

har qanday qayta taqsimlash

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

/ Ushbu eskiz NeoPixel boshqaruvida ishlatilishi mo'ljallangan

// yuzasi Adafruit Bluefruit LE Connect mobil ilovasida.

/

/ - Ushbu eskizni kompilyatsiya qiling va nRF52 Feather -ga o'chiring

// - Bluefruit LE Connect ilovasini oching

// - NeoPixel yordam dasturiga o'tish

// - Aloqa o'rnatish uchun "ulanish" tugmasini bosing

// piksellar joylashuvi haqidagi meta-ma'lumotlarni yuborish

// - qurilmangizdagi piksellarni yangilash uchun NeoPixel yordam dasturidan foydalaning

/* DIQQAT: Bu eskizga Adafruit_Neopixel -ning kamida 1.1.0 versiyasi kerak edi !!! */

#qo'shing

#qo'shing

#qo'shing

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * NeoPixels haydash uchun ishlatiladigan pin * /

#MAXCOMPONENTS ni aniqlang 4

uint8_t *pixelBuffer = NULL;

uint8_t kengligi = 0;

uint8_t balandligi = 0;

uint8_t qadam;

uint8_t komponentlariValue;

bool - 400 Gts;

uint8_t komponentlari = 3; // faqat 3 va 4 - haqiqiy qiymatlar

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// BLE xizmati

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

bo'sh o'rnatish ()

{

Serial.begin (115200);

while (! Seriyali) kechikish (10); // mahalliy usb bilan nrf52840 uchun

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

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

Serial.println ();

Serial.println ("Iltimos, Bluefruit Connect LE ilovasi yordamida ulaning");

// Neopiksellarni sozlash

neopixel.begin ();

// Bluefruit -ni boshlang

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Qo'llab -quvvatlanadigan qiymatlar uchun bluefruit.h -ni tekshiring

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// OTA DFU izchil bo'lishi uchun, agar mavjud bo'lsa, birinchi navbatda qo'shilishi kerak

bledfu.begin ();

// Qurilma haqida ma'lumot xizmatini sozlash va ishga tushirish

bledis.setManufacturer ("Adafruit Industries");

bledis.setModel ("Bluefruit Feather52");

bledis.begin ();

// BLE UART xizmatini sozlash va ishga tushirish

bleuart.begin ();

// Reklama o'rnating va boshlang

startAdv ();

}

void startAdv (bekor)

{

// Reklama to'plami

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Bluart 128-bitli uuidni qo'shing

Bluefruit. Advertising.addService (bleuart);

// Ikkilamchi skanerlashga javob paketi (ixtiyoriy)

// Reklama paketida "Ism" uchun joy yo'qligi uchun

Bluefruit. ScanResponse.addName ();

/* Reklama berishni boshlang

* - Agar uzilgan bo'lsa, avtomatik reklamani yoqing

* - Interval: tez rejim = 20 ms, sekin rejim = 152,5 ms

* - Tez rejim uchun kutish vaqti - 30 soniya

* - Vaqt tugashi bilan boshlash (taymut) = 0 abadiy reklama qilinadi (ulanmaguncha)

*

* Tavsiya etilgan reklama oralig'i uchun

*

*/

Bluefruit. Advertising.restartOnDisconnect (rost);

Bluefruit. Advertising.setInterval (32, 244); // 0,625 milodiy birlikda

Bluefruit. Advertising.setFastTimeout (30); // tezkor rejimda soniya soni

Bluefruit. Advertising.start (0); // 0 = n soniyadan keyin reklamani to'xtatmang

}

void connect_callback (uint16_t conn_handle)

{

// Joriy ulanish haqida ma'lumot oling

BLEConnection* ulanishi = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

ulanish-> getPeerName (markaziy_ nomi, hajmi (markaziy_ nomi));

Serial.print ("Ulangan");

Serial.println (central_name);

Serial.println ("Iltimos," Neopixels "yorlig'ini tanlang," Ulanish "tugmasini bosing va dam oling");

}

bo'sh halqa ()

{

// Echo olingan ma'lumotlarni

agar (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int buyrug'i = bleuart.read ();

almashtirish (buyruq) {

"V" holati: {// Versiyani oling

commandVersion ();

tanaffus;

}

"S" holati: {// O'rnatish o'lchovlari, komponentlari, qadam …

commandSetup ();

tanaffus;

}

"C" holati: {// Rang bilan tozalash

commandClearColor ();

tanaffus;

}

"B" holati: {// Yorqinlikni sozlash

commandSetBrightness ();

tanaffus;

}

"P" holati: {// Pixel -ni o'rnating

commandSetPixel ();

tanaffus;

}

case 'I': {// Yangi rasmni oling

commandImage ();

tanaffus;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

uchun (int j = 0; j <balandlik; j ++)

{

uchun (int i = 0; i <kenglik; i ++) {

agar (komponentlar == 3) {

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

}

boshqa {

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

}

base_addr+= komponentalar;

pixelIndex ++;

}

pixelIndex += qadam - kenglik; // PixelIndex -ni keyingi qatorga o'tkazing (qadamni hisobga oling)

}

neopixel.show ();

}

void commandVersion () {

Serial.println (F ("Buyruq: versiya tekshiruvi"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

Serial.println (F ("Buyruq: O'rnatish"));

kenglik = bleuart.read ();

balandlik = bleuart.read ();

qadam = bleuart.read ();

komponentlarValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

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

komponentlar = (komponentlarValue == NEO_RGB || komponentlarValue == NEO_RBG || komponentlarValue == NEO_GRB || komponentlarValue == NEO_GBR || komponentlarValue == NEO_BRG || komponentlarValue == NEO_BGR)? 3: 4;

Serial.printf ("\ tsize: %dx %d / n", kenglik, balandlik);

Serial.printf ("\ tstride: %d / n", qadam);

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

Serial.printf ("\ tkomponentlari: %d / n", komponentlar);

agar (pixelBuffer! = NULL) {

o'chirish pixelBuffer;

}

uint32_t hajmi = kengligi*balandligi;

pixelBuffer = yangi uint8_t [hajmi*komponentlari];

neopixel.updateLength (hajmi);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Bajarildi

sendResponse ("OK");

}

void commandSetBrightness () {

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

// Qiymatni o'qing

uint8_t yorqinligi = bleuart.read ();

// Yorqinlikni o'rnating

neopixel.setBrightness (nashrida);

// Piksellarni yangilang

almashtirishBuffers ();

// Bajarildi

sendResponse ("OK");

}

void commandClearColor () {

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

// Rangni o'qing

uint8_t rangi [MAXCOMPONENTS];

uchun (int j = 0; j <komponentlar;) {

agar (bleuart.available ()) {

rang [j] = bleuart.read ();

j ++;

}

}

// Barcha chiroqlarni rangga o'rnating

int hajmi = kenglik * balandlik;

uint8_t *base_addr = pixelBuffer;

uchun (int i = 0; i <o'lcham; i ++) {

uchun (int j = 0; j <komponentlar; j ++) {

*base_addr = rang [j];

base_addr ++;

}

}

// Buferlarni almashtirish

Serial.println (F ("ClearColor tugallandi"));

almashtirishBuffers ();

agar (komponentlar == 3) {

Serial.printf ("\ t aniq (%d, %d, %d) n", rang [0], rang [1], rang [2]);

}

boshqa {

Serial.printf ("\ t aniq (%d, %d, %d, %d) n", rang [0], rang [1], rang [2], rang [3]);

}

// Bajarildi

sendResponse ("OK");

}

void commandSetPixel () {

Serial.println (F ("Buyruq: SetPixel"));

// O'qish pozitsiyasi

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Ranglarni o'qing

uint32_t pixelOffset = y*kenglik+x;

uint32_t pixelDataOffset = pixelOffset*komponentlari;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

uchun (int j = 0; j <komponentlar;) {

agar (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Ranglarni o'rnating

uint32_t neopixelIndex = y*qadam+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t rangi;

agar (komponentlar == 3) {

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

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

}

boshqa {

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, rang);

neopixel.show ();

// Bajarildi

sendResponse ("OK");

}

void commandImage () {

Serial.printf ("Buyruq: %dx %d, %d, %d / n", kenglik, balandlik, komponentlar, qadam);

// Yangi pikselli buferni oling

int hajmi = kenglik * balandlik;

uint8_t *base_addr = pixelBuffer;

uchun (int i = 0; i <o'lcham; i ++) {

uchun (int j = 0; j <komponentlar;) {

agar (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

agar (komponentlar == 3) {

uint32_t indeksi = i*komponentlari;

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

}

*/

}

// Buferlarni almashtirish

Serial.println (F ("Rasm olingan"));

almashtirishBuffers ();

// Bajarildi

sendResponse ("OK");

}

void sendResponse (char const *javob) {

Serial.printf ("Javob yuborish: %s / n", javob);

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

}

3 -qadam: 3 -qadam: Abajur sotib oling

3 -qadam: Abajur sotib oling
3 -qadam: Abajur sotib oling
3 -qadam: Abajur sotib oling
3 -qadam: Abajur sotib oling

4 -qadam: 4 -qadam: Hammasini birga torting

Tavsiya: