Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
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));
}