Բովանդակություն:

Իսկապես մարտահրավեր. 5 քայլ
Իսկապես մարտահրավեր. 5 քայլ

Video: Իսկապես մարտահրավեր. 5 քայլ

Video: Իսկապես մարտահրավեր. 5 քայլ
Video: ԴՊՐՈՑՈՒՄ ԱՅՆ ՄԵԶ ՉԵՆ ՍՈՎՈՐԵՑՐԵԼ! 5 Դասեր Միլիարդատերերից! Մոտիվացիա Հաջողության Հասնելու Համար! 2024, Հուլիսի
Anonim
Image
Image
Քայլ 1: erոդեք շղթան
Քայլ 1: erոդեք շղթան

Worldամանակակից աշխարհը մարդկանցից պահանջում է դուրս գալ ֆիզիկականից և ապրել թվայնության սահմաններում:

Al- ի հայտնվելով և տեխնոլոգիայի տարածմամբ մարդիկ չափազանց մեծ վստահություն են տալիս մեքենային և կարծում են, որ այն միշտ ճիշտ է:

«Իսկապես» -ը նպատակ ունի ցնցել այս կեղծ վստահությունը կեղծ ստերի հայտնաբերման թեստ ստեղծելու միջոցով: Մարդիկ հեշտությամբ կհավատան, որ իսկապես աշխատում է, բայց երբ կեղծ պատասխաններ տրվեն, դա կխաթարի նրանց կույր վստահությունը տեխնոլոգիայի նկատմամբ:

Քայլ 1: Քայլ 1: oldոդել սխեման

Քանի որ իմ աշխատանքները միայն մեկ լույս ունեն, ուստի այն շատ հեշտ է զոդել: Հիմնական խնդիրը սկզբում է, ես երկու լույս եմ կպցրել, բայց միանգամից չծածկեցի լուսավորման հատվածը: Այսպիսով, երբ երկու լարերը բաժանվում են միմյանց: Կարճ դուրս եկավ:

Քայլ 2: Քայլ 2: Գրեք ծածկագիրը

p.p1 {լուսանցք `0.0px 0.0px 0.0px 0.0px; գծի բարձրություն `15.0px; տառատեսակ ՝ 12.0px Times; գույնը ՝ #000000; ֆոնի գույնը ՝ #ffffff}

p.p2 {լուսանցք `0.0px 0.0px 0.0px 0.0px; գծի բարձրություն `15.0px; տառատեսակ ՝ 12.0px Times; գույնը ՝ #000000; ֆոնի գույնը ՝ #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Քայլ 2: Գրեք ծածկագիրը

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

Սա օրինակ է մեր nRF52- ի վրա հիմնված Bluefruit LE մոդուլների համար

Վերցրեք մեկը այսօր adafruit խանութում:

Adafruit- ը ներդնում է ժամանակ և ռեսուրսներ ՝ ապահովելով այս բաց կոդով ծածկագիրը, խնդրում ենք աջակցել Adafruit- ին և բաց կոդով սարքավորումներին `գնումներ կատարելով

արտադրանք Adafruit- ից!

MIT լիցենզիա, լրացուցիչ տեղեկությունների համար ստուգեք LICENSE

Բոլոր տեքստերը վերևում և ներքևի շաղ տալու էկրանը պետք է ներառված լինեն դրա մեջ

ցանկացած վերաբաշխում

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

/ Այս ուրվագիծը նախատեսված է օգտագործել NeoPixel հսկիչով

// մակերես Adafruit's Bluefruit LE Connect բջջային հավելվածում:

/

/ - Կազմեք և միացրեք այս ուրվագիծը nRF52 փետուրին

// - Բացեք Bluefruit LE Connect ծրագիրը

// - Անցում դեպի NeoPixel օգտակար

// - Կապ հաստատելու համար կտտացրեք «միացնել» կոճակին և

// ուղարկել պիքսելների դասավորության մասին մետա-տվյալները

// - Օգտագործեք NeoPixel ծրագիրը ՝ ձեր սարքի պիքսելները թարմացնելու համար

/* ՆՇՈՄ. Այս ուրվագիծը պահանջում էր Adafruit_Neopixel- ի առնվազն 1.1.0 տարբերակ !!! */

#ներառում

#ներառում

#ներառում

#սահմանեք NEOPIXEL_VERSION_STRING «Neopixel v2.0»

#սահմանեք PIN 16 / * PIN- ն, որն օգտագործվում է NeoPixels- ը վարելու համար * /

#սահմանել ՄԱՔՍԱՄՈՆՔՆԵՐ 4

uint8_t *pixelBuffer = NULL;

uint8_t լայնություն = 0;

uint8_t բարձրություն = 0;

uint8_t քայլ;

uint8_t բաղադրիչներԱրժեք;

bool is 400Hz;

uint8_t բաղադրիչներ = 3; // միայն 3 -ը և 4 -ը վավեր արժեքներ են

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// BLE ծառայություն

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

դատարկ կարգավորում ()

{

Serial.begin (115200);

մինչդեռ (! Սերիական) ուշացում (10); // nrf52840- ի համար հայրենի USB- ով

Serial.println («Adafruit Bluefruit Neopixel Test»);

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.setMan Manufacturer («Adafruit Industries»);

bledis.setModel («Կապույտ փետուր 52»);

bledis.begin ();

// Կարգավորեք և սկսեք BLE UART ծառայությունը

bleuart.begin ();

// Ստեղծեք և սկսեք գովազդել

startAdv ();

}

void startAdv (դատարկ)

{

// Գովազդային փաթեթ

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Ներառեք bleuart 128-bit uuid

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. Avertvertising.start (0); // 0 = Մի դադարեցրեք գովազդը n վայրկյանից հետո

}

անվավեր connect_callback (uint16_t conn_handle)

{

// Ստացեք հղում ընթացիկ կապին

BLEConnection* կապ = Bluefruit. Connection (conn_handle);

char կենտրոնական_անուն [32] = {0};

կապ-> getPeerName (կենտրոնական_անուն, չափս (կենտրոնական_անուն));

Serial.print («Միացված է»);

Serial.println (կենտրոնական_անուն);

Serial.println («Խնդրում ենք ընտրել« Neopixels »ներդիրը, սեղմել« Connect »և զվարճանալ»);

}

դատարկ շրջան ()

{

// Էխոն ստացավ տվյալներ

եթե (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int հրաման = bleuart.read ();

անջատիչ (հրաման) {

գործ 'V': {// Ստացեք տարբերակը

commandVersion ();

ընդմիջում;

}

case 'S': {// Կարգավորել չափերը, բաղադրիչները, քայլը…

commandSetup ();

ընդմիջում;

}

գործ 'C': {// Մաքրել գույնով

commandClearColor ();

ընդմիջում;

}

գործ 'B': {// Սահմանել Պայծառություն

commandSetBrightness ();

ընդմիջում;

}

գործ 'P': {// Սահմանել Pixel

commandSetPixel ();

ընդմիջում;

}

case 'I': {// Ստացեք նոր պատկեր

commandImage ();

ընդմիջում;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

համար (int j = 0; j <բարձրություն; j ++)

{

համար (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 ();

քայլ = bleuart.read ();

componentsValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = բաղադրիչներValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

բաղադրիչներ = (բաղադրիչներԱրժեք == NEO_RGB || բաղադրիչներԱրժեք == NEO_RBG || բաղադրիչներԱրժեք == NEO_GRB || բաղադրիչներԱրժեք == NEO_GBR || բաղադրիչներԱրժեք == NEO_BRG || բաղադրիչներԱրժեք == NEO_BGR): 3: 4;

Serial.printf ("\ tsize: %dx %d / n", լայնություն, բարձրություն);

Serial.printf ("\ tstride: %d / n", քայլ);

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

Serial.printf ("\ t բաղադրիչներ. %D / n", բաղադրիչներ);

եթե (pixelBuffer! = NULL) {

ջնջել pixelBuffer;

}

uint32_t չափը = լայնությունը*բարձրությունը;

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 գույն [MAXCOMPONENTS];

համար (int j = 0; j <բաղադրիչներ;) {

եթե (bleuart.available ()) {

գույն [j] = bleuart.read ();

j ++;

}

}

// Բոլոր լուսարձակները սահմանեք գույնի

int չափը = լայնությունը * բարձրությունը;

uint8_t *base_addr = pixelBuffer;

համար (int i = 0; i <չափը; i ++) {

համար (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 («Լավ»);

}

void commandSetPixel () {

Serial.println (F («Հրաման. SetPixel»));

// Կարդալու դիրքորոշում

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Կարդացեք գույները

uint32_t պիքսելՕֆսեթ = y*լայնություն+x;

uint32_t pixelDataOffset = pixelOffset*բաղադրիչներ;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

համար (int j = 0; j <բաղադրիչներ;) {

եթե (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Գույներ սահմանել

uint32_t neopixelIndex = y*քայլ+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t գույն;

եթե (բաղադրիչներ == 3) {

գույն = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

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

}

ուրիշ {

գույն = 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;

համար (int i = 0; i <չափը; i ++) {

համար (int j = 0; j <բաղադրիչներ;) {

եթե (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

եթե (բաղադրիչներ == 3) {

uint32_t ինդեքս = 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. Քաշեք այն բոլորը միասին

Խորհուրդ ենք տալիս: