Përmbajtje:

Sfidë e vërtetë: 5 hapa
Sfidë e vërtetë: 5 hapa

Video: Sfidë e vërtetë: 5 hapa

Video: Sfidë e vërtetë: 5 hapa
Video: E ftuara braktis studion e “Ftesë në 5” në mes të emisionit live: Ç’ është kjo pyetje Bieta? 2024, Korrik
Anonim
Image
Image
Hapi 1: Saldoni qarkun
Hapi 1: Saldoni qarkun

Bota moderne kërkon që njerëzit të dalin nga ajo fizike dhe të jetojnë brenda asaj dixhitale.

Me shfaqjen e Al dhe përhapjen e teknologjisë njerëzit i besojnë shumë makinës dhe besojnë se është gjithmonë e saktë.

"Me të vërtetë" synohet të shkundë këtë besim të rremë përmes krijimit të një testi të rremë të detektorit të gënjeshtrës. Njerëzit lehtë do të besojnë se Really po funksionon, por kur jepen përgjigje të rreme kjo do të trondisë besimin e tyre të verbër në teknologji.

Hapi 1: Hapi 1: Saldoni qarkun

Sepse veprat e mia kanë vetëm një dritë, kështu që është shumë e lehtë për t'u bashkuar. Problemi kryesor është në fillim, bashkova dy drita, por pjesën e ekspozimit nuk e mbulova menjëherë. Pra, kur të dy telat ndahen prekin së bashku. Shkurtohet.

Hapi 2: Hapi 2: Shkruani Kodin

p.p1 {diferenca: 0.0px 0.0px 0.0px 0.0px; lartësia e vijës: 15.0px; font: 12.0px Times; ngjyra: #000000; sfondi-ngjyra: #ffffff}

p.p2 {diferenca: 0.0px 0.0px 0.0px 0.0px; lartësia e vijës: 15.0px; font: 12.0px Times; ngjyra: #000000; sfond-ngjyra: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Hapi 2: Shkruani Kodin

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

Ky është një shembull për modulet tona të bazuara në nRF52 Bluefruit LE

Merrni një sot në dyqanin e adafruit!

Adafruit investon kohë dhe burime duke siguruar këtë kod me kod të hapur, ju lutemi mbështesni Adafruit dhe pajisjet me burim të hapur duke blerë

produkte nga Adafruit!

Licenca MIT, kontrolloni LICENSE për më shumë informacion

I gjithë teksti i mësipërm dhe ekrani i spërkatjes më poshtë duhet të përfshihen në të

çdo rishpërndarje

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

/ Ky skicë synohet të përdoret me kontrollin NeoPixel

// shfaqet në aplikacionin celular të Adafruit's Bluefruit LE Connect.

/

/ - Përpiloni dhe ndizni këtë skicë në pendën nRF52

// - Hapni aplikacionin Bluefruit LE Connect

// - Kaloni në programin NeoPixel

// - Klikoni butonin 'lidhje' për të krijuar një lidhje dhe

// dërgoni meta-të dhënat në lidhje me paraqitjen e pikselëve

// - Përdorni programin NeoPixel për të përditësuar pikselët në pajisjen tuaj

/* SHENIM: Ky skicë kërkonte të paktën versionin 1.1.0 të Adafruit_Neopixel !!! */

#përfshi

#përfshi

#përfshi

#përcakto NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Pin e përdorur për të drejtuar NeoPixels * /

#përcaktoni MAXCOMPONENTS 4

uint8_t *pixelBuffer = NULL;

uint8_t gjerësia = 0;

uint8_t lartësi = 0;

uint8_t hapi;

uint8_t komponentetVlera;

bool është 400Hz;

komponentët uint8_t = 3; // vetëm 3 dhe 4 janë vlera të vlefshme

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// Shërbimi BLE

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

void setup ()

{

Serial.filloj (115200);

ndërsa (! Serial) vonesë (10); // për nrf52840 me usb amtare

Serial.println ("Testi i Neopixelit Adafruit Bluefruit");

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

Serial.println ();

Serial.println ("Ju lutemi lidheni duke përdorur aplikacionin Bluefruit Connect LE");

// Konfiguro neopixelët

neopixel.filloj ();

// Init Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Kontrolloni bluefruit.h për vlerat e mbështetura

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Për të qenë konsistent OTA DFU duhet të shtohet së pari nëse ekziston

bledfu.filloj ();

// Konfiguro dhe fillo Shërbimin e Informacionit të Pajisjes

bledis.setManufacturer ("Industritë Adafruit");

bledis.setModel ("Bluefruit Feather52");

bledis.filloj ();

// Konfiguroni dhe filloni shërbimin BLE UART

bleuart.filloj ();

// Vendosni dhe filloni reklamat

startAdv ();

}

fillimi i pavlefshëm Adv (i pavlefshëm)

{

// Paketë reklamuese

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Përfshi bleuart 128-bit uuid

Bluefruit. Advertising.addService (bleuart);

// Paketa e Përgjigjes së Skanimit Sekondar (opsionale)

// Meqenëse nuk ka vend për 'Name' në paketën e Reklamimit

Bluefruit. ScanResponse.addName ();

/* Filloni Reklamimin

* - Aktivizoni reklamat automatike nëse shkëputeni

* - Intervali: modaliteti i shpejtë = 20 ms, mënyra e ngadaltë = 152.5 ms

* - Koha për modalitetin e shpejtë është 30 sekonda

* - Fillimi (timeout) me timeout = 0 do të reklamojë përgjithmonë (derisa të lidhet)

*

* Për intervalin e rekomanduar të reklamimit

*

*/

Bluefruit. Advertising.restartOnDisconnect (e vërtetë);

Bluefruit. Advertising.setInterval (32, 244); // në njësi prej 0.625 ms

Bluefruit. Advertising.setFastTimeout (30); // numri i sekondave në modalitetin e shpejtë

Bluefruit. Advertising.start (0); // 0 = Mos ndaloni reklamat pas n sekondash

}

void connect_callback (uint16_t conn_handle)

{

// Merrni referencën për lidhjen aktuale

BLEConnection* lidhje = Bluefruit. Connection (conn_handle);

emri qendror char [32] = {0};

lidhje-> getPeerName (emri qendror, madhësia (emri qendror));

Serial.print ("I lidhur me");

Serial.println (emri_qendror);

Serial.println ("Ju lutemi zgjidhni skedën" Neopixels ", klikoni" Connect "dhe argëtohuni");

}

lak void ()

{

// Echo mori të dhëna

nëse (Bluefruit.connected () && bleuart.notifyEnabled ())

{

komanda int = bleuart.read ();

kaloni (komandën) {

rasti 'V': {// Merr Versionin

commandVersion ();

pushim;

}

rasti 'S': {// Përcaktoni dimensionet, përbërësit, hapin…

commandSetup ();

pushim;

}

rasti 'C': {// I qartë me ngjyrë

commandClearColor ();

pushim;

}

rasti 'B': {// Set Brightness

commandSetBrightness ();

pushim;

}

rasti 'P': {// Vendos Pixel

commandSetPixel ();

pushim;

}

rasti 'I': {// Merr imazh të ri

commandImage ();

pushim;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

për (int j = 0; j <lartësia; j ++)

{

për (int i = 0; i <gjerësia; i ++) {

nëse (përbërësit == 3) {

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

}

tjeter {

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

}

base_addr+= komponentët;

pixelIndex ++;

}

pixelIndex += hap - gjerësi; // Zhvendos pixelIndex në rreshtin tjetër (merr parasysh hapin)

}

neopixel.shfaq ();

}

void commandVersion () {

Serial.println (F ("Komanda: Verifikimi i versionit"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

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

width = bleuart.read ();

lartësia = bleuart.read ();

hap = bleuart.read ();

komponentëtVlera = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = komponentëtVlera + (is400Hz? NEO_KHZ400: NEO_KHZ800);

komponentët = (komponentëtVlera == NEO_RGB || komponentëtVlera == NEO_RBG || komponentëtVlera == NEO_GRB || komponentëtVlera == NEO_GBR || komponentëtVlera == NEO_BRG || komponentëtVlera == NEO_BGR)? 3: 4;

Serial.printf ("\ madhësia: %dx %d / n", gjerësia, lartësia);

Serial.printf ("\ tstide: %d / n", hap);

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

Serial.printf ("\ tkomponentët: %d / n", përbërës);

nëse (pixelBuffer! = NULL) {

fshini pixelBuffer;

}

uint32_t madhësia = gjerësia*lartësia;

pixelBuffer = uint8_t i ri [madhësia*komponentët];

neopixel.updateLength (madhësia);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// U krye

sendResponse ("OK");

}

void commandSetBrightness () {

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

// Lexo vlerën

uint8_t shkëlqim = bleuart.read ();

// Vendosni shkëlqimin

neopixel.setBritness (shkëlqim);

// Rifreskoni pikselet

swapBuffers ();

// U krye

sendResponse ("OK");

}

void commandClearColor () {

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

// Lexoni ngjyrën

ngjyra uint8_t [MAXCOMPONENTS];

për (int j = 0; j <komponentët;) {

if (bleuart.available ()) {

ngjyra [j] = bleuart.read ();

j ++;

}

}

// Vendosni të gjitha dritat në ngjyrë

int madhësia = gjerësia * lartësia;

uint8_t *base_addr = pixelBuffer;

për (int i = 0; i <madhësia; i ++) {

për (int j = 0; j <komponentët; j ++) {

*base_addr = ngjyra [j];

base_addr ++;

}

}

// Ndërroni tamponët

Serial.println (F ("ClearColor përfundoi"));

swapBuffers ();

nëse (përbërësit == 3) {

Serial.printf ("\ tqarta (%d, %d, %d) n", ngjyra [0], ngjyra [1], ngjyra [2]);

}

tjeter {

Serial.printf ("\ tqarta (%d, %d, %d, %d) n", ngjyra [0], ngjyra [1], ngjyra [2], ngjyra [3]);

}

// U krye

sendResponse ("OK");

}

void commandSetPixel () {

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

// Pozicioni i leximit

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Lexoni ngjyrat

uint32_t pixelOffset = y*gjerësi+x;

uint32_t pixelDataOffset = përbërës pixelOffset*;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

për (int j = 0; j <komponentët;) {

if (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Vendosni ngjyrat

uint32_t neopixelIndex = y*hap+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

ngjyra uint32_t;

nëse (përbërësit == 3) {

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

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

}

tjeter {

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

neopixel.shfaq ();

// U krye

sendResponse ("OK");

}

void commandImage () {

Serial.printf ("Komanda: Imazhi %dx %d, %d, %d / n", gjerësia, lartësia, përbërësit, hapi);

// Merrni tampon të ri piksel

int madhësia = gjerësia * lartësia;

uint8_t *base_addr = pixelBuffer;

për (int i = 0; i <madhësia; i ++) {

për (int j = 0; j <komponentët;) {

if (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

nëse (përbërësit == 3) {

uint32_t index = i*komponentë;

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

}

*/

}

// Ndërroni tamponët

Serial.println (F ("Imazhi u mor"));

swapBuffers ();

// U krye

sendResponse ("OK");

}

void sendResponse (char const *përgjigje) {

Serial.printf ("Dërgoni përgjigje: %s / n", përgjigje);

bleuart.write (përgjigje, strlen (përgjigje)*sizeof (char));

}

Hapi 3: Hapi 3: Blerja e llambadarit

Hapi 3: Blerja e llambadarit
Hapi 3: Blerja e llambadarit
Hapi 3: Blerja e llambadarit
Hapi 3: Blerja e llambadarit

Hapi 4: Hapi 4: Tërhiqini të gjitha së bashku

Recommended: