Obsah:
- Krok 1: Krok 1: Pájejte obvod
- Krok 2: Krok 2: Napište kód
- Krok 3: Krok 3: Nákup stínítka
- Krok 4: Krok 4: Vytáhněte vše dohromady
- Krok 5: Krok 5: Výroba hracích karet
Video: Opravdu výzva: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Moderní svět vyžaduje, aby lidé vystoupili z fyzického a žili v digitálu.
S výskytem Al a šířením technologií lidé příliš důvěřovali stroji a věřili, že je vždy správný.
„Opravdu“má otřást touto falešnou důvěrou vytvořením testu falešného detektoru lži. Lidé snadno uvěří, že Really opravdu funguje, ale když poskytnou falešné odpovědi, otřese to jejich slepou důvěrou v technologie.
Krok 1: Krok 1: Pájejte obvod
Protože moje díla mají pouze jedno světlo, je velmi snadné je pájet. Hlavní problém je na začátku, pájím dvě světla, ale expoziční část jsem hned nezakryl. Když se tedy část dvou vodičů dotýká. Zkratuje se.
Krok 2: Krok 2: Napište kód
p.p1 {margin: 0,0px 0,0px 0,0px 0,0px; výška řádku: 15,0 px; písmo: 12,0px Times; barva: #000000; barva pozadí: #ffffff}
p.p2 {margin: 0,0px 0,0px 0,0px 0,0px; výška řádku: 15,0 px; písmo: 12,0px Times; barva: #000000; barva pozadí: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Krok 2: Napište kód
/*********************************************************************
Toto je příklad pro naše moduly Bluefruit LE založené na nRF52
Vyzvedněte si jeden dnes v obchodě adafruit!
Adafruit investuje čas a prostředky poskytováním tohoto otevřeného zdrojového kódu, podpořte prosím Adafruit a open-source hardware zakoupením
produkty od Adafruit!
Licence MIT, další informace najdete v LICENCI
Veškerý text nahoře a úvodní obrazovka níže musí být zahrnuty v
jakékoli přerozdělování
*********************************************************************
/ Tato skica je určena k použití s ovládacím prvkem NeoPixel
// povrch v mobilní aplikaci Adafruit Bluefruit LE Connect.
/
/ - Zkompilovat a flashovat tento náčrt do nRF52 Feather
// - Otevřete aplikaci Bluefruit LE Connect
// - Přepněte na nástroj NeoPixel
// - Kliknutím na tlačítko „připojit“navážete připojení a
// odeslání metadat o rozložení pixelů
// - Pomocí nástroje NeoPixel aktualizujte pixely ve vašem zařízení
/* POZNÁMKA: Tato skica vyžadovala alespoň verzi 1.1.0 Adafruit_Neopixel !!! */
#zahrnout
#zahrnout
#zahrnout
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin používaný k pohonu NeoPixels * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t šířka = 0;
uint8_t výška = 0;
uint8_t krok;
uint8_t componentsValue;
bool je 400 Hz;
uint8_t komponenty = 3; // pouze 3 a 4 jsou platné hodnoty
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// Služba BLE
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
neplatné nastavení ()
{
Serial.begin (115200);
while (! Serial) delay (10); // pro nrf52840 s nativním usb
Serial.println ("Neopixelový test Adafruit Bluefruit");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println („Připojte se prosím pomocí aplikace Bluefruit Connect LE“);
// Konfigurace Neopixelů
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Podporované hodnoty najdete na bluefruit.h
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Aby byla konzistentní, OTA DFU by měla být přidána jako první, pokud existuje
bledfu.begin ();
// Konfigurace a spuštění služby informací o zařízení
bledis.setManufacturer („Adafruit Industries“);
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Konfigurace a spuštění služby BLE UART
bleuart.begin ();
// Nastavení a zahájení reklamy
startAdv ();
}
void startAdv (neplatné)
{
// Reklamní balíček
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Zahrnout bleuart 128bitový uuid
Bluefruit. Advertising.addService (bleuart);
// Balíček odezvy na sekundární skenování (volitelně)
// Protože v reklamním paketu není místo pro 'Jméno'
Bluefruit. ScanResponse.addName ();
/* Začněte inzerovat
* - Povolit automatickou reklamu, pokud je odpojen
* - Interval: rychlý režim = 20 ms, pomalý režim = 152,5 ms
* - Časový limit pro rychlý režim je 30 sekund
* - Start (časový limit) s časovým limitem = 0 bude inzerovat navždy (dokud nebude připojen)
*
* Pro doporučený reklamní interval
*
*/
Bluefruit. Advertising.restartOnDisconnect (true);
Bluefruit. Advertising.setInterval (32, 244); // v jednotce 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // počet sekund v rychlém režimu
Bluefruit. Advertising.start (0); // 0 = Nepřestávejte s reklamou po n sekundách
}
neplatné connect_callback (uint16_t conn_handle)
{
// Získejte odkaz na aktuální připojení
BLEConnection* connection = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
connection-> getPeerName (central_name, sizeof (central_name));
Serial.print („Připojeno k“);
Serial.println (central_name);
Serial.println („Vyberte prosím kartu„ Neopixely “, klikněte na„ Připojit “a bavte se“);
}
prázdná smyčka ()
{
// Echo přijatá data
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int příkaz = bleuart.read ();
přepínač (příkaz) {
případ 'V': {// Získat verzi
commandVersion ();
přestávka;
}
případ 'S': {// Nastavení rozměrů, komponent, krok…
commandSetup ();
přestávka;
}
případ 'C': {// Vymazat barvou
příkazClearColor ();
přestávka;
}
případ 'B': {// Nastavit jas
commandSetBrightness ();
přestávka;
}
případ 'P': {// Nastavit Pixel
commandSetPixel ();
přestávka;
}
případ 'I': {// Přijmout nový obrázek
commandImage ();
přestávka;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
pro (int j = 0; j <výška; j ++)
{
pro (int i = 0; i <šířka; i ++) {
pokud (komponenty == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
jinak {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponenty;
pixelIndex ++;
}
pixelIndex += krok - šířka; // Přesuňte pixelIndex na další řádek (vezměte v úvahu krok)
}
neopixel.show ();
}
neplatný příkazVersion () {
Serial.println (F ("Příkaz: Kontrola verze"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
neplatný příkazSetup () {
Serial.println (F ("Příkaz: Nastavení"));
width = bleuart.read ();
výška = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponenty = (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", šířka, výška);
Serial.printf ("\ tstride: %d / n", krok);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tcomponents: %d / n", komponenty);
if (pixelBuffer! = NULL) {
odstranit pixelBuffer;
}
uint32_t velikost = šířka*výška;
pixelBuffer = nový uint8_t [velikost*komponenty];
neopixel.updateLength (velikost);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Hotovo
sendResponse („OK“);
}
neplatný příkazSetBrightness () {
Serial.println (F ("Příkaz: SetBrightness"));
// Přečíst hodnotu
uint8_t jas = bleuart.read ();
// Nastavení jasu
neopixel.setBrightness (jas);
// Obnovte pixely
swapBuffers ();
// Hotovo
sendResponse ("OK");
}
zrušit příkazClearColor () {
Serial.println (F ("Příkaz: ClearColor"));
// Přečíst barvu
uint8_t barva [MAXKOMPONENTY];
pro (int j = 0; j <komponenty;) {
if (bleuart.available ()) {
barva [j] = bleuart.read ();
j ++;
}
}
// Nastavte všechny LED na barvu
int velikost = šířka * výška;
uint8_t *base_addr = pixelBuffer;
pro (int i = 0; i <velikost; i ++) {
pro (int j = 0; j <komponenty; j ++) {
*base_addr = barva [j];
base_addr ++;
}
}
// Výměna vyrovnávacích pamětí
Serial.println (F ("ClearColor dokončeno"));
swapBuffers ();
pokud (komponenty == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", barva [0], barva [1], barva [2]);
}
jinak {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", barva [0], barva [1], barva [2], barva [3]);
}
// Hotovo
sendResponse ("OK");
}
neplatný příkazSetPixel () {
Serial.println (F ("Příkaz: SetPixel"));
// Přečíst pozici
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Čtení barev
uint32_t pixelOffset = y*width+x;
uint32_t pixelDataOffset = pixelOffset*komponenty;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
pro (int j = 0; j <komponenty;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Nastavení barev
uint32_t neopixelIndex = y*krok+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
barva uint32_t;
pokud (komponenty == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
jinak {
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, barva);
neopixel.show ();
// Hotovo
sendResponse ("OK");
}
neplatný příkazImage () {
Serial.printf ("Příkaz: Obrázek %dx %d, %d, %d / n", šířka, výška, komponenty, krok);
// Příjem nového pixelového bufferu
int velikost = šířka * výška;
uint8_t *base_addr = pixelBuffer;
pro (int i = 0; i <velikost; i ++) {
pro (int j = 0; j <komponenty;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
pokud (komponenty == 3) {
uint32_t index = i*komponenty;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Výměna vyrovnávacích pamětí
Serial.println (F ("Obrázek přijat"));
swapBuffers ();
// Hotovo
sendResponse („OK“);
}
void sendResponse (char const *response) {
Serial.printf ("Odeslat odpověď: %s / n", odpověď);
bleuart.write (odpověď, strlen (odpověď)*sizeof (char));
}
Krok 3: Krok 3: Nákup stínítka
Krok 4: Krok 4: Vytáhněte vše dohromady
Doporučuje:
Jak vyrobit opravdu levné tlakové senzory: 6 kroků (s obrázky)
Jak vyrobit skutečně levné tlakové senzory: V poslední době jsem byl závislý na výrobě spínačů z běžných domácích potřeb a rozhodl jsem se vyrobit si vlastní tlakový senzor s rozpočtem z několika houbiček, kolem kterých jsem ležel. Důvodem, proč se liší od ostatních verzí rozpočtových tlakových senzorů, je
Raspberry Pi NAS, který opravdu vypadá jako NAS: 13 kroků (s obrázky)
Raspberry Pi NAS, který opravdu vypadá jako NAS: Proč Raspberry Pi NAS No, hledal jsem krásný, ale prostorově úsporný Raspberry Pi NAS z internetu a nic jsem nenašel. Našel jsem nějaký design NAS s Raspberry Pi přilepený na dřevěnou bázi, ale to není to, co chci. Chci
Vytvořte opravdu skvělou matici v Pythonu!: 6 kroků
Vytvořte opravdu skvělou matici v Pythonu!: Ahoj kluci! Tento návod vás naučí, jak vytvořit matici v Pythonu! Lidé by ve službě Batch obvykle vytvořili matici, protože je to snadné. Ale tentokrát vám ukážu, jak vytvořit Matrix v jednom z výkonných počítačových jazyků
Opravdu, opravdu snadný USB motor!: 3 kroky
Opravdu, SKUTEČNĚ snadný USB motor !: Konečně můj 2. instruktáž !!! Toto je ventilátor pro vás nebo váš počítač, který běží z jakéhokoli dostupného portu USB. Doporučuji pro začátečníky do elektroniky, až po profíky. Je to snadné a zábavné, můžete to udělat doslova za pět minitů !!! NEMOVITÝ
Opravdu jednoduchý/snadný/nekomplikovaný způsob, jak přimět lidi/lidi/zvířata/roboty, aby vypadali, jako by měli opravdu chladné/jasné tepelné vidění (barva dle vašeho výběru) pomocí GIMP: 4 kroky
Opravdu jednoduchý/snadný/nekomplikovaný způsob, jak přimět lidi/lidi/zvířata/roboty, aby vypadali, jako by měli opravdu chladnou/jasnou tepelnou vizi (barva dle vašeho výběru) pomocí GIMP: Přečtěte si … název