Სარჩევი:

მართლაც გამოწვევა: 5 ნაბიჯი
მართლაც გამოწვევა: 5 ნაბიჯი

ვიდეო: მართლაც გამოწვევა: 5 ნაბიჯი

ვიდეო: მართლაც გამოწვევა: 5 ნაბიჯი
ვიდეო: 5 შესაძლებლობა შენთვის. დეტალური ინფორმაცია იხილე აღწერაში 2024, ივლისი
Anonim
Image
Image
ნაბიჯი 1: შეაერთეთ წრე
ნაბიჯი 1: შეაერთეთ წრე

თანამედროვე სამყარო მოითხოვს ადამიანებს, გამოვიდნენ ფიზიკურად და იცხოვრონ ციფრულში.

ალ -ს გამოჩენასა და ტექნოლოგიების გამრავლებასთან ერთად ადამიანები ძალიან ენდობიან მანქანას და თვლიან, რომ ის ყოველთვის სწორია.

"მართლაც" მიზნად ისახავს ამ ცრუ ნდობის შერყევას ყალბი სიცრუის დეტექტორის ტესტის შექმნის გზით. ხალხი ადვილად დაიჯერებს, რომ ნამდვილად მუშაობს, მაგრამ ცრუ პასუხების გაცემის შემთხვევაში ეს შეარყევს მათ ბრმა ნდობას ტექნოლოგიების მიმართ.

ნაბიჯი 1: ნაბიჯი 1: შეაერთეთ წრე

რადგან ჩემს ნამუშევრებს მხოლოდ ერთი შუქი აქვს, ამიტომ მისი შედუღება ძალიან ადვილია. მთავარი პრობლემა არის დასაწყისში, მე შევაერთე ორი შუქი, მაგრამ მე დაუყოვნებლივ არ დავფარე ექსპოზიციის ნაწილი. ასე რომ, როდესაც ორი მავთულის ნაწილი ერთმანეთს ეხება. მოკლედ გამოვიდა.

ნაბიჯი 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; მინ-სიმაღლე: 14.0px} span.s1 {font-kerning: none}

ნაბიჯი 2: ჩაწერეთ კოდი

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

ეს არის მაგალითი ჩვენი nRF52 დაფუძნებული Bluefruit LE მოდულებისთვის

აიღეთ დღეს ადაფრუტის მაღაზიაში!

Adafruit ინვესტიციას უწევს დროს და რესურსებს ამ ღია კოდის უზრუნველსაყოფად, გთხოვთ მხარი დაუჭიროთ ადაფრუტს და ღია კოდის ტექნიკას შესყიდვით

პროდუქცია ადაფრუტიდან!

MIT ლიცენზია, შეამოწმეთ ლიცენზია დამატებითი ინფორმაციისთვის

ყველა ტექსტი ზემოთ და splash ეკრანი ქვემოთ უნდა იყოს ჩართული

ნებისმიერი გადანაწილება

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

/ ეს ესკიზი განკუთვნილია NeoPixel კონტროლთან ერთად

// ზედაპირზე Adafruit's Bluefruit LE Connect მობილური აპლიკაცია.

/

/ - შეადგინეთ და ააფეთქეთ ესკიზი nRF52 ბუმბულზე

// - გახსენით Bluefruit LE Connect აპლიკაცია

// - გადადით NeoPixel პროგრამაზე

// - დააწკაპუნეთ ღილაკზე 'დაკავშირება' კავშირის დასამყარებლად და

// გააგზავნეთ მეტა მონაცემები პიქსელის განლაგების შესახებ

// - გამოიყენეთ NeoPixel პროგრამა თქვენს მოწყობილობაზე პიქსელების გასაახლებლად

/* შენიშვნა: ეს ესკიზი მოითხოვდა Adafruit_Neopixel- ის მინიმუმ 1.1.0 ვერსიას !!! */

#ჩართეთ

#ჩართეთ

#ჩართეთ

#განსაზღვრეთ NEOPIXEL_VERSION_STRING "ნეოპიქსელი v2.0"

#განსაზღვრეთ PIN 16 / * პინი გამოიყენება NeoPixels– ის მართვისთვის * /

#განსაზღვრეთ მაქსიმალური კომპონენტები 4

uint8_t *pixelBuffer = NULL;

uint8_t სიგანე = 0;

uint8_t სიმაღლე = 0;

uint8_t ნაბიჯი;

uint8_t კომპონენტები ღირებულება;

bool არის 400Hz;

uint8_t კომპონენტები = 3; // მხოლოდ 3 და 4 არის სწორი მნიშვნელობები

Adafruit_NeoPixel ნეოპიქსელი = Adafruit_NeoPixel ();

// BLE სერვისი

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

ბათილად დაყენება ()

{

Serial.begin (115200);

ხოლო (! სერიული) დაგვიანებით (10); // for nrf52840 მშობლიური USB- ით

Serial.println ("Adafruit Bluefruit Neopixel ტესტი");

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

Serial.println ();

Serial.println ("გთხოვთ დააკავშიროთ Bluefruit Connect LE პროგრამის გამოყენებით");

// ნეოპიქსელების კონფიგურაცია

neopixel.begin ();

// ინიტ ბლუფრუტი

Bluefruit.begin ();

Bluefruit.setTxPower (4); // შეამოწმეთ bluefruit.h მხარდაჭერილი მნიშვნელობებისთვის

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// თანმიმდევრული რომ იყოს OTA DFU უნდა დაემატოს ჯერ თუ არსებობს

bledfu.begin ();

// მოწყობილობის საინფორმაციო სერვისის კონფიგურაცია და დაწყება

bledis.setMan Manufacturer ("ადაფრუტის ინდუსტრიები");

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 ("გთხოვთ შეარჩიოთ" ნეოპიქსელების "ჩანართი, დააწკაპუნეთ" დაკავშირება "და გაერთეთ");

}

ბათილი მარყუჟი ()

{

// ექომ მიიღო მონაცემები

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

{

int ბრძანება = bleuart.read ();

გადართვა (ბრძანება) {

საქმე 'V': {// მიიღეთ ვერსია

commandVersion ();

შესვენება;

}

საქმე 'S': {// პარამეტრების ზომები, კომპონენტები, ნაბიჯი…

commandSetup ();

შესვენება;

}

საქმე 'C': {// გასუფთავება ფერით

commandClearColor ();

შესვენება;

}

საქმე 'B': {// Set Brightness

commandSetBrightness ();

შესვენება;

}

საქმე 'P': {// დააყენეთ პიქსელი

commandSetPixel ();

შესვენება;

}

საქმე 'მე': {// მიიღეთ ახალი სურათი

commandImage ();

შესვენება;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

for (int j = 0; j <სიმაღლე; j ++)

{

for (int i = 0; i <width; 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 ("Command: Version check"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

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

width = bleuart.read ();

სიმაღლე = bleuart.read ();

stride = 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 ("Command: SetBrightness"));

// მნიშვნელობის წაკითხვა

uint8_t სიკაშკაშე = bleuart.read ();

// დააყენეთ სიკაშკაშე

neopixel.setBrightness (სიკაშკაშე);

// პიქსელების განახლება

swapBuffers ();

// Შესრულებულია

sendResponse ("კარგი");

}

void commandClearColor () {

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

// წაიკითხეთ ფერი

uint8_t ფერი [MAXCOMPONENTS];

for (int j = 0; j <კომპონენტები;) {

if (bleuart.available ()) {

ფერი [j] = bleuart.read ();

j ++;

}

}

// დააყენეთ ყველა led ფერი

int ზომა = სიგანე * სიმაღლე;

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 ();

თუ (კომპონენტები == 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 ("Command: 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) {

ფერი = 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;

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 ("კარგი");

}

void sendResponse (char const *response) {

Serial.printf ("პასუხის გაგზავნა: %s / n", პასუხი);

bleuart.write (პასუხი, strlen (პასუხი)*sizeof (char));

}

ნაბიჯი 3: ნაბიჯი 3: ლამპშადის ყიდვა

ნაბიჯი 3: იყიდეთ ნათურა
ნაბიჯი 3: იყიდეთ ნათურა
ნაბიჯი 3: იყიდეთ ნათურა
ნაბიჯი 3: იყიდეთ ნათურა

ნაბიჯი 4: ნაბიჯი 4: გაიყვანეთ ეს ყველაფერი ერთად

გირჩევთ: