Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Nykymaailma vaatii ihmisiä poistumaan fyysisestä ja elämään digitaalisessa maailmassa.
Alin ulkonäön ja teknologian lisääntymisen myötä ihmiset luottavat liikaa koneeseen ja uskovat sen olevan aina oikein.
"Todella" on tarkoitettu horjuttamaan tätä väärää luottamusta luomalla väärennetty valheenilmaisin. Ihmiset uskovat helposti, että todella toimii, mutta väärien vastausten antaminen horjuttaa heidän sokean luottamuksensa tekniikkaan.
Vaihe 1: Vaihe 1: Juotospiiri
Koska teoksissani on vain yksi valo, se on erittäin helppo juottaa. Suurin ongelma on alussa, juotin kaksi valoa, mutta en peittänyt valotusosaa heti. Joten kun kaksi johtoa osuvat yhteen. Se lyhenee.
Vaihe 2: Vaihe 2: Kirjoita koodi
p.p1 {marginaali: 0.0px 0.0px 0.0px 0.0px; linjan korkeus: 15,0 pikseliä; kirjasin: 12.0px Times; väri: #000000; taustaväri: #ffffff}
p.p2 {marginaali: 0.0px 0.0px 0.0px 0.0px; linjan korkeus: 15,0 pikseliä; kirjasin: 12.0px Times; väri: #000000; taustaväri: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Vaihe 2: Kirjoita koodi
/*********************************************************************
Tämä on esimerkki nRF52 -pohjaisista Bluefruit LE -moduuleistamme
Hae yksi tänään adafruit -kaupasta!
Adafruit investoi aikaa ja resursseja tämän avoimen lähdekoodin tarjoamiseen, tue Adafruitia ja avoimen lähdekoodin laitteistoa ostamalla
Adafruutin tuotteita!
MIT -lisenssi, tarkista LISENSSI saadaksesi lisätietoja
Kaikki yllä oleva teksti ja alla oleva aloitusnäyttö on sisällytettävä
mikä tahansa uudelleenjako
*********************************************************************
/ Tämä luonnos on tarkoitettu käytettäväksi NeoPixel -ohjaimen kanssa
// pinta Adafruitin Bluefruit LE Connect -mobiilisovelluksessa.
/
/ - Kokoa ja väläytä tämä luonnos nRF52 Featheriin
// - Avaa Bluefruit LE Connect -sovellus
// - Vaihda NeoPixel -apuohjelmaan
// - Napsauta 'connect' -painiketta muodostaaksesi yhteyden ja
// lähettää metatietoja pikseliasettelusta
// - Päivitä laitteen pikselit NeoPixel -apuohjelman avulla
/* HUOMAUTUS: Tämä luonnos vaati vähintään Adafruit_Neopixel -version 1.1.0 !!! */
#sisältää
#sisältää
#sisältää
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * NeoPixels -ajokortti * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t width = 0;
uint8_t korkeus = 0;
uint8_t stride;
uint8_t componentsValue;
bool on 400 Hz;
uint8_t komponentit = 3; // vain 3 ja 4 ovat kelvollisia arvoja
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE -palvelu
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
mitätön asennus ()
{
Sarja.alku (115200);
kun (! sarja) viive (10); // numerolle nrf52840 natiivin USB: n kanssa
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Sarja.println ();
Serial.println ("Muodosta yhteys Bluefruit Connect LE -sovelluksella");
// Määritä neopikselit
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Tarkista bluefruit.h: sta tuetut arvot
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Johdonmukaisuuden vuoksi OTA DFU on lisättävä ensin, jos sellainen on
bledfu.begin ();
// Laitetietopalvelun määrittäminen ja käynnistäminen
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Määritä ja käynnistä BLE UART -palvelu
bleuart.begin ();
// Määritä ja aloita mainonta
startAdv ();
}
void startAdv (mitätön)
{
// Mainospaketti
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Sisällytä 128-bittinen bleuart uuid
Bluefruit. Advertising.addService (bleuart);
// Toissijaisen skannauksen vastauspaketti (valinnainen)
// Koska mainospaketissa ei ole tilaa nimelle
Bluefruit. ScanResponse.addName ();
/* Aloita mainonta
* - Ota automaattinen mainonta käyttöön, jos yhteys on katkaistu
* - Väli: nopea tila = 20 ms, hidas tila = 152,5 ms
* - Nopean tilan aikakatkaisu on 30 sekuntia
* - Aloita (aikakatkaisu) ja aikakatkaisu = 0 mainostaa ikuisesti (kunnes yhteys)
*
* Suositeltu mainosväli
*
*/
Bluefruit. Advertising.restartOnDisconnect (tosi);
Bluefruit. Advertising.setInterval (32, 244); // 0,625 ms: n yksikössä
Bluefruit. Advertising.setFastTimeout (30); // sekuntien määrä nopeassa tilassa
Bluefruit. Advertising.start (0); // 0 = Älä lopeta mainostamista n sekunnin kuluttua
}
void connect_callback (uint16_t conn_handle)
{
// Hae viittaus nykyiseen yhteyteen
BLEConnection* yhteys = Bluefruit. Connection (conn_handle);
char -keskusnimi [32] = {0};
yhteys-> getPeerName (keskimmäinen_nimi, koko (keski_nimi));
Serial.print ("Yhdistetty");
Sarja.println (keskusnimi);
Serial.println ("Valitse" Neopikselit "-välilehti, napsauta" Yhdistä "ja pidä hauskaa");
}
tyhjä silmukka ()
{
// Echo vastaanotti tietoja
jos (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int -komento = bleuart.read ();
kytkin (komento) {
tapaus 'V': {// Hae versio
commandVersion ();
tauko;
}
tapaus 'S': {// Asennusmitat, komponentit, askel…
commandSetup ();
tauko;
}
tapaus 'C': {// Kirkas väreillä
commandClearColor ();
tauko;
}
tapaus 'B': {// Aseta kirkkaus
commandSetBrightness ();
tauko;
}
tapaus 'P': {// Aseta Pixel
commandSetPixel ();
tauko;
}
tapaus 'I': {// Vastaanota uusi kuva
commandImage ();
tauko;
}
}
}
}
void swapPuskurit ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
(int j = 0; j <korkeus; j ++)
{
for (int i = 0; i <leveys; i ++) {
jos (komponentit == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
muu {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponentit;
pixelIndex ++;
}
pixelIndex += askel - leveys; // Siirrä pixelIndex seuraavalle riville (ota askel huomioon)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Komento: Version tarkistus"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Komento: asennus"));
leveys = bleuart.read ();
korkeus = bleuart.read ();
askel = bleuart.read ();
komponentitArvo = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponentit = (komponentitArvo == NEO_RGB || komponentitArvo == NEO_RBG || komponentitArvo == NEO_GRB || komponentitArvo == NEO_GBR || komponentitArvo == NEO_BRG || komponentitArvo == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", leveys, korkeus);
Serial.printf ("\ tstride: %d / n", askel);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponentit: %d / n", komponentit);
jos (pixelBuffer! = NULL) {
poista pixelBuffer;
}
uint32_t koko = leveys*korkeus;
pixelBuffer = uusi uint8_t [koko*komponentit];
neopixel.updateLength (koko);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Valmis
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Komento: SetBrightness"));
// Lue arvo
uint8_t kirkkaus = bleuart.read ();
// Aseta kirkkaus
neopixel.setBrightness (kirkkaus);
// Päivitä pikselit
swapPuskurit ();
// Valmis
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Komento: ClearColor"));
// Lue väri
uint8_t color [MAXCOMPONENTS];
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
väri [j] = bleuart.read ();
j ++;
}
}
// Aseta kaikki ledit väreiksi
int koko = leveys * korkeus;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <koko; i ++) {
for (int j = 0; j <komponentit; j ++) {
*base_addr = väri [j];
base_addr ++;
}
}
// Vaihda puskurit
Serial.println (F ("ClearColor valmis"));
swapPuskurit ();
jos (komponentit == 3) {
Serial.printf ("\ t selkeä (%d, %d, %d) n", väri [0], väri [1], väri [2]);
}
muu {
Serial.printf ("\ t selkeä (%d, %d, %d, %d) n", väri [0], väri [1], väri [2], väri [3]);
}
// Valmis
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Komento: SetPixel"));
// Lue sijainti
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Lue värit
uint32_t pixelOffset = y*leveys+x;
uint32_t pixelDataOffset = pixelOffset*komponentit;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Aseta värit
uint32_t neopixelIndex = y*askel+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t väri;
jos (komponentit == 3) {
väri = neopikseli. Väri (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tväri (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
muu {
väri = neopikseli. Väri (*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, väri);
neopixel.show ();
// Valmis
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Komento: Kuva %dx %d, %d, %d / n", leveys, korkeus, komponentit, askel);
// Vastaanota uusi pikselipuskuri
int koko = leveys * korkeus;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <koko; i ++) {
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
jos (komponentit == 3) {
uint32_t index = i*komponentit;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Vaihda puskurit
Serial.println (F ("Kuva vastaanotettu"));
swapPuskurit ();
// Valmis
sendResponse ("OK");
}
void sendResponse (char const *response) {
Serial.printf ("Lähetä vastaus: %s / n", vastaus);
bleuart.write (vastaus, strlen (vastaus)*sizeof (char));
}