Taula de continguts:
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-13 06:57
El món modern requereix que els humans surtin del físic i visquin dins del digital.
Amb l’aparició d’Al i la proliferació de tecnologia, la gent confia massa en la màquina i creu que sempre serà correcta.
"Realment" té com a objectiu sacsejar aquesta falsa confiança mitjançant la creació d'una prova falsa del detector de mentides. La gent creurà fàcilment que realment funciona, però quan es proporcionen respostes falses, trontollarà la seva cega confiança en la tecnologia.
Pas 1: Pas 1: soldeu el circuit
Com que les meves obres només tenen una llum, per tant, és molt fàcil de soldar. El problema principal és al principi, he soldat dues llums, però no he cobert la part d'exposició immediatament. Per tant, quan els dos cables es toquen junts. Es queda curt.
Pas 2: Pas 2: escriviu el codi
p.p1 {margin: 0,0px 0,0px 0,0px 0,0px; alçada de línia: 15,0 px; font: 12.0px Times; color: # 000000; color de fons: #ffffff}
p.p2 {margin: 0,0px 0,0px 0,0px 0,0px; alçada de línia: 15,0 px; font: 12.0px Times; color: # 000000; color de fons: #ffffff; alçada mínima: 14,0 px} span.s1 {font-kerning: none}
Pas 2: escriviu el codi
/*********************************************************************
Aquest és un exemple per als nostres mòduls Bluefruit LE basats en nRF52
Trieu-ne un avui mateix a la botiga d’adafruit!
Adafruit inverteix temps i recursos proporcionant aquest codi de codi obert, Si us plau, admeti Adafruit i el maquinari de codi obert comprant
productes d'Adafruit!
Llicència MIT, consulteu la LLICÈNCIA per obtenir més informació
S'ha d'incloure tot el text anterior i la pantalla de presentació següent
qualsevol redistribució
*********************************************************************
/ Aquest esbós està pensat per ser utilitzat amb el control NeoPixel
// apareix a l'aplicació mòbil Bluefruit LE Connect d'Adafruit.
/
/ - Compileu i feu flash aquest esbós a la ploma nRF52
// - Obriu l'aplicació Bluefruit LE Connect
// - Canvieu a la utilitat NeoPixel
// - Feu clic al botó "connectar" per establir una connexió i
// envieu les metadades sobre el disseny de píxels
// - Utilitzeu la utilitat NeoPixel per actualitzar els píxels del dispositiu
/ * NOTA: Aquest esbós requereix com a mínim la versió 1.1.0 d'Adafruit_Neopixel !!! * /
#incloure
#incloure
#incloure
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin utilitzat per conduir els NeoPixels * /
#define MAXCOMPONENTS 4
uint8_t * pixelBuffer = NULL;
uint8_t ample = 0;
uint8_t alçada = 0;
uint8_t calma;
uint8_t componentsValue;
bool is400Hz;
uint8_t components = 3; // només el 3 i el 4 són valors vàlids
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// Servei BLE
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
configuració nul·la ()
{
Serial.begin (115200);
while (! Serial) delay (10); // per nrf52840 amb usb natiu
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Connecteu-vos mitjançant l'aplicació Bluefruit Connect LE");
// Neopíxels de configuració
neopixel.begin ();
// Iniciar Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Comproveu els valors admesos de bluefruit.h
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Per ser coherent, primer s’ha d’afegir DTAU OTA si existeix
bledfu.begin ();
// Configureu i inicieu el servei d'informació del dispositiu
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Configureu i inicieu el servei BLE UART
bleuart.begin ();
// Configureu i comenceu a anunciar-vos
startAdv ();
}
void startAdv (void)
{
// Paquet publicitari
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Inclou uuid bleuart de 128 bits
Bluefruit. Advertising.addService (bleuart);
// Paquet de resposta d'escaneig secundari (opcional)
// Com que no hi ha espai per a "Nom" al paquet de publicitat
Bluefruit. ScanResponse.addName ();
/ * Inicieu la publicitat
* - Activeu la publicitat automàtica si es desconnecta
* - Interval: mode ràpid = 20 ms, mode lent = 152,5 ms
* - El temps d'espera per al mode ràpid és de 30 segons
* - Inici (temps d'espera) amb temps d'espera = 0 s'anunciarà per sempre (fins que estigui connectat)
*
* Per a intervals publicitaris recomanats
*
*/
Bluefruit. Advertising.restartOnDisconnect (cert);
Bluefruit. Advertising.setInterval (32, 244); // en unitat de 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // nombre de segons en mode ràpid
Bluefruit. Advertising.start (0); // 0 = No deixeu de publicitar després de n segons
}
void connect_callback (uint16_t conn_handle)
{
// Obteniu la referència a la connexió actual
BLEConnection * connection = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
connexió-> getPeerName (nom_central, mida de (nom_central));
Serial.print ("Connectat a");
Serial.println (nom_central);
Serial.println ("Seleccioneu la pestanya" Neopíxels ", feu clic a" Connecta "i divertiu-vos");
}
bucle buit ()
{
// Echo va rebre dades
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int command = bleuart.read ();
commutador (ordre) {
cas "V": {// Obtén la versió
commandVersion ();
trencar;
}
cas "S": {// Configuració de dimensions, components, gambada …
commandSetup ();
trencar;
}
cas "C": {// Esborra amb color
commandClearColor ();
trencar;
}
cas "B": {// Estableix la brillantor
commandSetBrightness ();
trencar;
}
cas "P": {// Estableix el píxel
commandSetPixel ();
trencar;
}
cas "I": {// Rebre imatge nova
commandImage ();
trencar;
}
}
}
}
buid swapBuffers ()
{
uint8_t * base_addr = pixelBuffer;
int pixelIndex = 0;
per a (int j = 0; j <altura; j ++)
{
for (int i = 0; i <width; i ++) {
if (components == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2)));
}
més {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2), * (base_addr + 3)));
}
add_base + = components;
pixelIndex ++;
}
pixelIndex + = stride - amplada; // Moveu pixelIndex a la fila següent (tingueu en compte el pas)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Ordre: comprovació de versió"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Ordre: Configuració"));
ample = bleuart.read ();
altura = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
components = (componentsValue == NEO_RGB || componentsValue == NEO_RBG || componentsValue == NEO_GRB || componentsValue == NEO_GBR || componentsValue == NEO_BRG || componentsValue == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize:% dx% d / n", amplada, alçada);
Serial.printf ("\ tstride:% d / n", stride);
Serial.printf ("\ tpixelType% d / n", pixelType);
Serial.printf ("\ tcomponents:% d / n", components);
if (pixelBuffer! = NULL) {
delete pixelBuffer;
}
uint32_t mida = amplada * alçada;
pixelBuffer = new uint8_t [components * mida];
neopixel.updateLength (mida);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Fet
sendResponse ("D'acord");
}
void commandSetBrightness () {
Serial.println (F ("Ordre: SetBrightness"));
// Valor de lectura
uint8_t brillantor = bleuart.read ();
// Estableix la brillantor
neopixel.setBrillness (brillantor);
// Actualitza els píxels
swapBuffers ();
// Fet
sendResponse ("D'acord");
}
void commandClearColor () {
Serial.println (F ("Ordre: ClearColor"));
// Llegir color
uint8_t color [MAXCOMPONENTS];
per a (int j = 0; j <components;) {
if (bleuart.available ()) {
color [j] = bleuart.read ();
j ++;
}
}
// Estableix tots els leds en color
int size = ample * alçada;
uint8_t * base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
per a (int j = 0; j <components; j ++) {
* base_addr = color [j];
add_base ++;
}
}
// Intercanvi de memòries intermèdies
Serial.println (F ("ClearColor completat"));
swapBuffers ();
if (components == 3) {
Serial.printf ("\ tclear (% d,% d,% d) n", color [0], color [1], color [2]);
}
més {
Serial.printf ("\ tclear (% d,% d,% d,% d) n", color [0], color [1], color [2], color [3]);
}
// Fet
sendResponse ("D'acord");
}
void commandSetPixel () {
Serial.println (F ("Ordre: SetPixel"));
// Posició de lectura
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Llegir colors
uint32_t pixelOffset = y * ample + x;
uint32_t pixelDataOffset = components pixelOffset *;
uint8_t * base_addr = pixelBuffer + pixelDataOffset;
per a (int j = 0; j <components;) {
if (bleuart.available ()) {
* base_addr = bleuart.read ();
add_base ++;
j ++;
}
}
// Estableix colors
uint32_t neopixelIndex = y * stride + x;
uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t color;
if (components == 3) {
color = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
Serial.printf ("\ tcolor (% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
}
més {
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, color);
neopixel.show ();
// Fet
sendResponse ("D'acord");
}
void commandImage () {
Serial.printf ("Ordre: imatge% dx% d,% d,% d / n", amplada, alçada, components, gambada);
// Rebre un nou buffer de píxels
int size = ample * alçada;
uint8_t * base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
per a (int j = 0; j <components;) {
if (bleuart.available ()) {
* base_addr = bleuart.read ();
add_base ++;
j ++;
}
}
/*
if (components == 3) {
uint32_t index = i * components;
Serial.printf ("\ tp% d (% d,% d,% d) n", i, pixelBuffer [índex], pixelBuffer [índex + 1], pixelBuffer [índex + 2]);
}
*/
}
// Intercanvi de memòries intermèdies
Serial.println (F ("Imatge rebuda"));
swapBuffers ();
// Fet
sendResponse ("D'acord");
}
void sendResponse (char const * response) {
Serial.printf ("Enviar resposta:% s / n", resposta);
bleuart.write (resposta, strlen (resposta) * sizeof (char));
}