![Valódi kihívás: 5 lépés Valódi kihívás: 5 lépés](https://i.howwhatproduce.com/images/010/image-29457-j.webp)
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:47
![Image Image](https://i.howwhatproduce.com/images/010/image-29457-2-j.webp)
![](https://i.ytimg.com/vi/PqDvFa4jYaA/hqdefault.jpg)
![Lépés: Forrasztja az áramkört Lépés: Forrasztja az áramkört](https://i.howwhatproduce.com/images/010/image-29457-3-j.webp)
A modern világ megköveteli az emberektől, hogy kilépjenek a fizikából és a digitális keretek között éljenek.
Az Al megjelenésével és a technológia elterjedésével az emberek túlságosan bíznak a gépben, és azt hiszik, hogy mindig helyes.
A „Valóban” célja a hamis bizalom megingatása egy hamis hazugságvizsgáló teszt létrehozásával. Az emberek könnyen el fogják hinni, hogy a Valóban működik, de ha hamis válaszokat adnak, az megingatja a technológia iránti bizalmukat.
1. lépés: 1. lépés: Forrasztja az áramkört
Mivel a munkáimnak csak egy fénye van, így nagyon könnyen forrasztható. A fő probléma az elején van, két fényt forrasztom, de nem fedtem le azonnal az expozíciós részt. Tehát amikor a két vezeték része összeér. Rövid lesz.
2. lépés: 2. lépés: Írja be a kódot
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; vonalmagasság: 15,0 képpont; betűtípus: 12.0px Times; szín: #000000; háttérszín: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; vonalmagasság: 15,0 képpont; betűtípus: 12.0px Times; szín: #000000; háttérszín: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
2. lépés: Írja be a kódot
/*********************************************************************
Ez egy példa az nRF52 alapú Bluefruit LE moduljainkra
Vedd fel ma az adafruit boltban!
Az Adafruit időt és erőforrásokat fektet be a nyílt forráskód biztosításába, Kérjük, vásárlásával támogassa az Adafruitot és a nyílt forráskódú hardvert
az Adafruit termékei!
MIT licenc, további információkért tekintse meg a LICENCE -t
A fenti szöveget és az alábbi splash képernyőt bele kell foglalni
bármilyen újraelosztás
*********************************************************************
/ Ez a vázlat a NeoPixel vezérlővel használható
// felület az Adafruit Bluefruit LE Connect mobilalkalmazásában.
/
/ - Fordítsa össze és villanja fel ezt a vázlatot az nRF52 tollhoz
// - Nyissa meg a Bluefruit LE Connect alkalmazást
// - Váltás a NeoPixel segédprogramra
// - Kattintson a "connect" gombra a kapcsolat létrehozásához és
// elküldi a metaadatokat a képpont-elrendezésről
// - Használja a NeoPixel segédprogramot a készüléken lévő képpontok frissítéséhez
/* MEGJEGYZÉS: Ehhez a vázlathoz legalább az Adafruit_Neopixel 1.1.0 verziója szükséges !!! */
#befoglalni
#befoglalni
#befoglalni
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * A NeoPixel -ek meghajtásához használt PIN -kód * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t width = 0;
uint8_t magasság = 0;
uint8_t stride;
uint8_t componentsValue;
bool 400 Hz;
uint8_t összetevők = 3; // csak a 3 és a 4 érvényes érték
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE szolgáltatás
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
üres beállítás ()
{
Sorozat.kezdet (115200);
míg (! Soros) késleltetés (10); // nrf52840 esetén natív USB -vel
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Sorozat.println ();
Serial.println ("Kérjük, csatlakozzon a Bluefruit Connect LE alkalmazás segítségével");
// Neopixelek konfigurálása
neopixel.begin ();
Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Ellenőrizze a bluefruit.h oldalon a támogatott értékeket
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// A következetesség érdekében az OTA DFU -t először hozzá kell adni, ha létezik
bledfu.begin ();
// Eszközinformációs szolgáltatás konfigurálása és indítása
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// A BLE UART szolgáltatás konfigurálása és indítása
bleuart.begin ();
// Állítsa be és indítsa el a hirdetést
startAdv ();
}
void startAdv (void)
{
// Reklámcsomag
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Belefoglalja a 128 bites uuid-t
Bluefruit. Advertising.addService (bleuart);
// Másodlagos szkennelési válasz csomag (opcionális)
// Mivel a Reklámcsomagban nincs hely a „Név” számára
Bluefruit. ScanResponse.addName ();
/* Indítsa el a hirdetést
* - Engedélyezze az automatikus hirdetést, ha le van választva
* - Időköz: gyors üzemmód = 20 ms, lassú mód = 152,5 ms
* - A gyors üzemmód időtúllépése 30 másodperc
* - Kezdés (időtúllépés) időtúllépéssel = 0 örökre hirdetni fog (amíg nem csatlakozik)
*
* Az ajánlott hirdetési időközhöz
*
*/
Bluefruit. Advertising.restartOnDisconnect (igaz);
Bluefruit. Advertising.setInterval (32, 244); // 0,625 ms -os egységben
Bluefruit. Advertising.setFastTimeout (30); // másodpercek száma gyors módban
Bluefruit. Advertising.start (0); // 0 = Ne hagyja abba a hirdetést n másodperc múlva
}
void connect_callback (uint16_t conn_handle)
{
// Hivatkozás az aktuális kapcsolatra
BLEConnection* kapcsolat = Bluefruit. Connection (conn_handle);
char központi_név [32] = {0};
kapcsolat-> getPeerName (központi_név, sizeof (központi_név));
Serial.print ("Csatlakoztatva");
Serial.println (központi_név);
Serial.println ("Kérjük, válassza ki a" Neopixelek "fület, kattintson a" Csatlakozás "gombra és érezze jól magát");
}
üres hurok ()
{
// Az Echo adatokat kapott
ha (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int parancs = bleuart.read ();
kapcsoló (parancs) {
„V” eset: {// Verzió letöltése
commandVersion ();
szünet;
}
„S” eset: {// Beállítási méretek, alkatrészek, lépés…
commandSetup ();
szünet;
}
„C” eset: {// Tiszta színnel
commandClearColor ();
szünet;
}
„B” eset: {// Fényerő beállítása
commandSetBrightness ();
szünet;
}
„P” eset: {// Pixel beállítása
commandSetPixel ();
szünet;
}
„I” eset: {// Új kép fogadása
commandImage ();
szünet;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <magasság; j ++)
{
for (int i = 0; i <szélesség; i ++) {
if (összetevők == 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)));
}
base_addr+= összetevők;
pixelIndex ++;
}
pixelIndex += lépés - szélesség; // A pixelIndex áthelyezése a következő sorba (vegye figyelembe a lépést)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Parancs: Verzióellenőrzés"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Parancs: Beállítás"));
szélesség = bleuart.read ();
magasság = bleuart.read ();
lépés = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponensek = (összetevők Érték == NEO_RGB || komponensekVért == NEO_RBG || komponensVérték == NEO_GRB || komponensVérték == NEO_GBR || összetevőkVért == NEO_BRG || komponensérték = = NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", szélesség, magasság);
Serial.printf ("\ tstride: %d / n", lépés);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tösszetevők: %d / n", összetevők);
if (pixelBuffer! = NULL) {
delete pixelBuffer;
}
uint32_t méret = szélesség*magasság;
pixelBuffer = új uint8_t [méret*összetevők];
neopixel.updateLength (méret);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Kész
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Parancs: SetBrightness"));
// Érték olvasása
uint8_t fényerő = bleuart.read ();
// Állítsa be a fényerőt
neopixel.setBrightness (fényerő);
// Képpontok frissítése
swapBuffers ();
// Kész
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Parancs: ClearColor"));
// Szín olvasása
uint8_t color [MAXCOMPONENTS];
for (int j = 0; j <komponensek;) {
if (bleuart.available ()) {
szín [j] = bleuart.read ();
j ++;
}
}
// Az összes led színre állítása
int méret = szélesség * magasság;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <méret; i ++) {
for (int j = 0; j <komponensek; j ++) {
*base_addr = szín [j];
base_addr ++;
}
}
// Pufferek cseréje
Serial.println (F ("A ClearColor befejeződött"));
swapBuffers ();
if (összetevők == 3) {
Serial.printf ("\ t világos (%d, %d, %d) n", szín [0], szín [1], szín [2]);
}
más {
Serial.printf ("\ t világos (%d, %d, %d, %d) n", szín [0], szín [1], szín [2], szín [3]);
}
// Kész
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Parancs: SetPixel"));
// Olvasási pozíció
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Olvassa el a színeket
uint32_t pixelOffset = y*szélesség+x;
uint32_t pixelDataOffset = pixelOffset*összetevők;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponensek;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Állítsa be a színeket
uint32_t neopixelIndex = y*lépés+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t szín;
if (összetevők == 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, szín);
neopixel.show ();
// Kész
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Parancs: Kép %dx %d, %d, %d / n", szélesség, magasság, összetevők, lépés);
// Új pixelpuffer fogadása
int méret = szélesség * magasság;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <méret; i ++) {
for (int j = 0; j <komponensek;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (összetevők == 3) {
uint32_t index = i*összetevők;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Pufferek cseréje
Serial.println (F ("Kép érkezett"));
swapBuffers ();
// Kész
sendResponse ("OK");
}
void sendResponse (char const *response) {
Serial.printf ("Válasz küldése: %s / n", válasz);
bleuart.write (válasz, strlen (válasz)*sizeof (char));
}
3. lépés: 3. lépés: Lámpaernyő vásárlása
![3. lépés: Lámpaernyő vásárlása 3. lépés: Lámpaernyő vásárlása](https://i.howwhatproduce.com/images/010/image-29457-4-j.webp)
![3. lépés: Lámpaernyő vásárlása 3. lépés: Lámpaernyő vásárlása](https://i.howwhatproduce.com/images/010/image-29457-5-j.webp)
4. lépés: 4. lépés: Húzza össze mindent
Ajánlott:
Valódi bináris óra NTP szinkronizálással: 4 lépés
![Valódi bináris óra NTP szinkronizálással: 4 lépés Valódi bináris óra NTP szinkronizálással: 4 lépés](https://i.howwhatproduce.com/images/001/image-113-j.webp)
Valódi bináris óra NTP szinkronizálással: Egy valódi bináris óra a napszakot egy egész nap bináris törtjeinek összegeként jeleníti meg, szemben a hagyományos " bináris órával " amely az időt binárisan kódolt tizedes számjegyként jeleníti meg, amely az óráknak/perceknek/másodperceknek felel meg. Hagyomány
Biometrikus autóbejegyzés - valódi kulcs nélküli autó: 4 lépés
![Biometrikus autóbejegyzés - valódi kulcs nélküli autó: 4 lépés Biometrikus autóbejegyzés - valódi kulcs nélküli autó: 4 lépés](https://i.howwhatproduce.com/images/005/image-13130-j.webp)
Biometrikus autóbejegyzés - Igazi kulcs nélküli autó: Néhány hónappal ezelőtt a lányom megkérdezte tőlem, hogy a modern autók miért nincsenek felszerelve biometrikus beviteli rendszerrel, ha még egy mobiltelefon is rendelkezik ezzel. Azóta azon dolgozott, hogy végrehajtsa ugyanazt, és végül sikerült valamit telepítenem és tesztelnem a T
Frissítse a DIY Mini DSO -t valódi oszcilloszkópra fantasztikus funkciókkal: 10 lépés (képekkel)
![Frissítse a DIY Mini DSO -t valódi oszcilloszkópra fantasztikus funkciókkal: 10 lépés (képekkel) Frissítse a DIY Mini DSO -t valódi oszcilloszkópra fantasztikus funkciókkal: 10 lépés (képekkel)](https://i.howwhatproduce.com/images/007/image-18148-j.webp)
Frissítse a DIY Mini DSO -t valódi oszcilloszkópra, fantasztikus funkciókkal: Utoljára megosztottam, hogyan készítsek Mini DSO -t MCU -val. Ha lépésről lépésre szeretné megépíteni, kérjük, olvassa el az előző utasítást: https: //www.instructables. com/id/Make-Your-Own-Osc … Mivel sok embert érdekel ez a projekt, elköltöttem néhány
Valódi haszontalan doboz: 6 lépés
![Valódi haszontalan doboz: 6 lépés Valódi haszontalan doboz: 6 lépés](https://i.howwhatproduce.com/images/008/image-21767-j.webp)
Valódi haszontalan doboz: Ezt a haszontalan dobozt a számítógépes projektemhez készítettem, és az itt található információkat Nerdykat adja, köszönöm. Ebben a projektben módosítottam néhány kódolást, hogy megfeleljenek a doboz magasságának és a hosszúságnak. kéz. Bár az eredmények
DIY BB8 - Teljesen 3D nyomtatás - 20 cm átmérőjű első valódi méretű prototípus: 6 lépés (képekkel)
![DIY BB8 - Teljesen 3D nyomtatás - 20 cm átmérőjű első valódi méretű prototípus: 6 lépés (képekkel) DIY BB8 - Teljesen 3D nyomtatás - 20 cm átmérőjű első valódi méretű prototípus: 6 lépés (képekkel)](https://i.howwhatproduce.com/images/009/image-24209-j.webp)
DIY BB8 - Teljesen 3D nyomtatás - 20 cm átmérő Az első valódi méretű prototípus: Sziasztok, ez az első projektem, ezért meg akartam osztani a kedvenc projektemet. Ebben a projektben elkészítjük a BB8 -at, amelyet 20 cm átmérőjű, teljesen 3D nyomtatóval készítünk. Építeni fogok egy robotot, amely pontosan ugyanúgy mozog, mint az igazi BB8