Kazalo:
- 1. korak: 1. korak: Spajkajte vezje
- 2. korak: 2. korak: Napišite kodo
- 3. korak: 3. korak: Nakup senčnika
- Korak 4: Korak 4: Potegnite vse skupaj
- 5. korak: 5. korak: Izdelava igralnih kart
Video: Resnično izziv: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
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));
}
3. korak: 3. korak: Nakup senčnika
Korak 4: Korak 4: Potegnite vse skupaj
Priporočena:
Kako narediti resnično poceni senzorje tlaka: 6 korakov (s slikami)
Kako narediti resnično poceni senzorje tlaka: V zadnjem času sem bil zasvojen z menjavo običajnih gospodinjskih predmetov, zato sem se odločil, da bom naredil svoj senzor tlaka v proračunu iz nekaj gobic, ki sem jih imel naokoli. Razlog za to je drugačen od drugih različic proračunskih senzorjev tlaka, ker je
Resnično WiFi Extender: 5 korakov
Resnično WiFi Extender: Uvod Truly WiFi Extender je repetitor WiFi, ki temelji na Raspberry Pi Zero W. Je dobra alternativa komercialnemu repetitorju WiFi, ki združuje nizkocenovne (manj kot 10 USD) in zelo prilagodljivo programsko opremo. Zažene lahko tudi nekatere rešitve za blokiranje oglasov
Raspberry Pi NAS, ki resnično izgleda kot NAS: 13 korakov (s slikami)
Raspberry Pi NAS, ki resnično izgleda kot NAS: Zakaj Raspberry Pi NASNaj, iskal sem čudovit, a prostorsko varčen Raspberry Pi NAS iz interneta in nisem našel ničesar. Ugotovil sem, da je nekaj zasnove NAS z Raspberry Pi prilepljeno na leseno podlago, vendar tega ne želim. Hočem
Naredite resnično kul matrico v Pythonu!: 6 korakov
Naredite resnično kul matrico v Pythonu!: Pozdravljeni, fantje! Ta navodila vas bodo naučila, kako narediti matrico v Pythonu! Običajno bi ljudje naredili matriko v paketu, ker je to enostavno. Tokrat pa vam bom pokazal, kako narediti matrico v enem od močnih računalniških jezikov
Kako ustvariti sistem JARVIS ali resnično življenje JARVIS / lastna pomoč AI: 8 korakov
Kako ustvariti sistem JARVIS ali resnično življenje JARVIS / lastna pomoč AI: Ali ste v filmu Iron Man kdaj gledali govorilni računalnik, kot je JARVIS, s Tonyjem Starkom? Ste si kdaj želeli imeti takšen računalnik? Ali imam prav? Brez skrbi … To željo lahko uresničite s svojim računalnikom. Lahko imate računalniški JARVIS in