Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Sodobni svet od ljudi zahteva, da izstopijo iz fizičnega in živijo v digitalnem.
S pojavom Al in širjenjem tehnologije ljudje zaupajo stroju preveč in verjamejo, da je vedno pravilen.
"Resnično" naj bi pretreslo to lažno zaupanje z ustvarjanjem lažnega testa detektorja laži. Ljudje bodo zlahka verjeli, da resnično deluje, toda če bodo podani lažni odgovori, bo to pretreslo njihovo slepo zaupanje v tehnologijo.
1. korak: 1. korak: Spajkajte vezje
Ker imajo moja dela samo eno luč, je zelo enostavno spajkati. Glavna težava je na začetku, spajkal sem dve svetlobi, vendar nisem takoj pokril dela osvetlitve. Ko se torej dve žici dotakneta skupaj. Kratek čas je.
2. korak: 2. korak: Napišite kodo
p.p1 {marža: 0,0px 0,0px 0,0px 0,0px; višina vrstice: 15,0px; pisava: 12,0px Times; barva: #000000; barva ozadja: #ffffff}
p.p2 {marža: 0,0px 0,0px 0,0px 0,0px; višina vrstice: 15,0px; pisava: 12,0px Times; barva: #000000; barva ozadja: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
2. korak: Napišite kodo
/*********************************************************************
To je primer za naše module Bluefruit LE na osnovi nRF52
Danes izberite eno v trgovini adafruit!
Adafruit vlaga čas in sredstva pri zagotavljanju te odprtokodne kode, prosimo, da z nakupom podprete Adafruit in odprtokodno strojno opremo
izdelki Adafruit!
Licenca MIT, za več informacij preverite LICENCE
Vse besedilo zgoraj in spodnji uvodni zaslon morajo biti vključeni v
kakršno koli prerazporeditev
*********************************************************************
/ Ta skica je namenjena uporabi z upravljalnikom NeoPixel
// površina v mobilni aplikaciji Adafruit Bluefruit LE Connect.
/
/ - Zberite in prenesite to skico v pero nRF52
// - Odprite aplikacijo Bluefruit LE Connect
// - Preklopite na pripomoček NeoPixel
// - Kliknite gumb 'connect', da vzpostavite povezavo in
// pošiljamo metapodatke o postavitvi slikovnih pik
// - S pripomočkom NeoPixel posodobite slikovne pike v napravi
/* OPOMBA: Ta skica je zahtevala vsaj različico 1.1.0 Adafruit_Neopixel !!! */
#vključi
#vključi
#vključi
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin, ki se uporablja za pogon NeoPixels * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t širina = 0;
uint8_t višina = 0;
uint8_t korak;
uint8_t componentsValue;
bool je 400Hz;
uint8_t komponente = 3; // samo 3 in 4 sta veljavni vrednosti
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// Storitev BLE
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
void setup ()
{
Serial.begin (115200);
medtem ko (! Serijska) zakasnitev (10); // za nrf52840 z domačim usb
Serial.println ("Neopixel test Adafruit Bluefruit Neopixel");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Prosimo, povežite se z aplikacijo Bluefruit Connect LE");
// Konfiguriranje neopikslov
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Preverite bluefruit.h za podprte vrednosti
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Zaradi doslednosti je treba najprej dodati OTA DFU, če obstaja
bledfu.begin ();
// Konfiguriranje in zagon informacijske storitve naprave
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Pero modrega sadja52");
bledis.begin ();
// Konfigurirajte in zaženite storitev BLE UART
bleuart.begin ();
// Nastavitev in začetek oglaševanja
startAdv ();
}
void startAdv (void)
{
// Oglaševalni paket
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Vključi 128-bitni uuid bleuart
Bluefruit. Advertising.addService (bleuart);
// Paket sekundarnega odziva na skeniranje (neobvezno)
// Ker v oglaševalskem paketu ni prostora za 'Ime'
Bluefruit. ScanResponse.addName ();
/* Začnite oglaševati
* - Omogočite samodejno oglaševanje, če ni povezave
* - Interval: hiter način = 20 ms, počasen način = 152,5 ms
* - Časovna omejitev za hitri način je 30 sekund
* - Start (časovna omejitev) s časovno omejitvijo = 0 bo oglaševal za vedno (dokler ni povezan)
*
* Za priporočeni interval oglaševanja
*
*/
Bluefruit. Advertising.restartOnDisconnect (true);
Bluefruit. Advertising.setInterval (32, 244); // v enoti 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // število sekund v hitrem načinu
Bluefruit. Advertising.start (0); // 0 = Ne prenehajte z oglaševanjem po n sekundah
}
void connect_callback (uint16_t conn_handle)
{
// Pridobite sklic na trenutno povezavo
BLEConnection* connection = Bluefruit. Connection (conn_handle);
char centralno_ime [32] = {0};
povezava-> getPeerName (osrednje_ime, velikost (osrednje_ime));
Serial.print ("Povezano z");
Serial.println (centralno_ime);
Serial.println ("Prosimo, izberite zavihek" Neopixels ", kliknite" Connect "in se zabavajte");
}
void loop ()
{
// Odmevni podatki
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int ukaz = bleuart.read ();
switch (ukaz) {
case 'V': {// Pridobite različico
commandVersion ();
zlom;
}
case 'S': {// Nastavitvene mere, komponente, korak…
commandSetup ();
zlom;
}
primer 'C': {// Počisti z barvo
commandClearColor ();
zlom;
}
primer 'B': {// Nastavi svetlost
commandSetBrightness ();
zlom;
}
primer 'P': {// Nastavi slikovno piko
commandSetPixel ();
zlom;
}
case 'I': {// Prejemanje nove slike
commandImage ();
zlom;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <višina; j ++)
{
for (int i = 0; i <širina; i ++) {
if (komponente == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
drugače {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponente;
pixelIndex ++;
}
pixelIndex += korak - širina; // premakni pixelIndex v naslednjo vrstico (upoštevaj korak)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Ukaz: Preverjanje različice"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Ukaz: Nastavitev"));
width = bleuart.read ();
višina = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponente = (komponenteVrednost == NEO_RGB || komponenteVrednost == NEO_RBG || komponenteVrednost == NEO_GRB || komponenteVrednost == NEO_GBR || komponenteVrednost == NEO_BRG || komponenteVrednost == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", širina, višina);
Serial.printf ("\ tstride: %d / n", korak);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponente: %d / n", komponente);
if (pixelBuffer! = NULL) {
delete pixelBuffer;
}
uint32_t velikost = širina*višina;
pixelBuffer = nov uint8_t [velikost*komponente];
neopixel.updateLength (velikost);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Končano
sendResponse ("V redu");
}
void commandSetBrightness () {
Serial.println (F ("Ukaz: SetBrightness"));
// Preberite vrednost
uint8_t svetlost = bleuart.read ();
// Nastavitev svetlosti
neopixel.setBrightness (svetlost);
// Osveži slikovne pike
swapBuffers ();
// Končano
sendResponse ("V redu");
}
void commandClearColor () {
Serial.println (F ("Ukaz: ClearColor"));
// branje barve
barva uint8_t [MAXCOMPONENTS];
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
barva [j] = bleuart.read ();
j ++;
}
}
// Vse LED diode nastavite na barvo
int velikost = širina * višina;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <velikost; i ++) {
for (int j = 0; j <komponente; j ++) {
*base_addr = barva [j];
base_addr ++;
}
}
// Zamenjaj medpomnilnike
Serial.println (F ("ClearColor dokončano"));
swapBuffers ();
if (komponente == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", barva [0], barva [1], barva [2]);
}
drugače {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", barva [0], barva [1], barva [2], barva [3]);
}
// Končano
sendResponse ("V redu");
}
void ukazSetPixel () {
Serial.println (F ("Ukaz: SetPixel"));
// Položaj branja
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// branje barv
uint32_t pixelOffset = y*širina+x;
uint32_t pixelDataOffset = komponente pixelOffset*;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Nastavitev barv
uint32_t neopixelIndex = y*korak+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
barva uint32_t;
if (komponente == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
drugače {
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, barvno);
neopixel.show ();
// Končano
sendResponse ("V redu");
}
void commandImage () {
Serial.printf ("Ukaz: slika %dx %d, %d, %d / n", širina, višina, komponente, korak);
// Prejemanje novega medpomnilnika slikovnih pik
int velikost = širina * višina;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <velikost; i ++) {
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (komponente == 3) {
uint32_t index = i*komponente;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeks], pixelBuffer [indeks+1], pixelBuffer [indeks+2]);
}
*/
}
// Zamenjaj medpomnilnike
Serial.println (F ("Slika je prejeta"));
swapBuffers ();
// Končano
sendResponse ("V redu");
}
void sendResponse (char const *odgovor) {
Serial.printf ("Pošlji odgovor: %s / n", odgovor);
bleuart.write (odgovor, strlen (odgovor)*sizeof (char));
}