Sisukord:
- 1. samm: 1. samm: jootke vooluring
- 2. samm: 2. samm: kirjutage kood
- 3. samm: 3. samm: lambivarju ostmine
- 4. samm: 4. samm: tõmmake see kõik kokku
- 5. samm: 5. samm: mängukaartide tegemine
Video: Tõeline väljakutse: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Kaasaegne maailm nõuab, et inimesed astuksid füüsilisest välja ja elaksid digitaalses keskkonnas.
Al -i väljanägemise ja tehnoloogia leviku tõttu usaldavad inimesed masinat liiga palju ja usuvad, et see on alati õige.
"Tõesti" on mõeldud selle vale usalduse kõigutamiseks võltsitud valedetektori testi loomisega. Inimesed usuvad kergesti, et tõesti töötab, kuid valede vastuste korral kõigutab see nende pimedat usaldust tehnoloogia vastu.
1. samm: 1. samm: jootke vooluring
Kuna minu töödel on ainult üks tuli, on seda väga lihtne joota. Põhiprobleem on alguses, ma jootan kaks valgust, kuid ma ei katnud kohe särituse osa. Nii et kui kaks juhtmeosa puutuvad kokku. See on lühike.
2. samm: 2. samm: kirjutage kood
p.p1 {marginaal: 0.0px 0.0px 0.0px 0.0px; rea kõrgus: 15,0 pikslit; font: 12,0 pikslit korda; värv: #000000; taustavärv: #ffffff}
p.p2 {marginaal: 0.0px 0.0px 0.0px 0.0px; rea kõrgus: 15,0 pikslit; font: 12,0 pikslit korda; värv: #000000; taustavärv: #ffffff; min-kõrgus: 14.0px} span.s1 {font-kerning: none}
Samm: kirjutage kood
/*********************************************************************
See on näide meie nRF52 -põhiste Bluefruit LE moodulite kohta
Võta üks täna kätte Adafruit poest!
Adafruit investeerib aega ja ressursse selle avatud lähtekoodi pakkumiseks, palun ostke Adafruit'i ja avatud lähtekoodiga riistvara
tooted firmalt Adafruit!
MIT -litsents, lisateabe saamiseks vaadake Litsentsi
Kogu ülaltoodud tekst ja allpool olev pritsimisekraan peavad olema kaasatud
igasugune ümberjaotamine
*********************************************************************
/ See visand on mõeldud kasutamiseks koos NeoPixeli juhtelemendiga
// pind Adafruit'i Bluefruit LE Connect mobiilirakenduses.
/
/ - Koostage ja visake see visand nRF52 Featherile
// - Avage rakendus Bluefruit LE Connect
// - lülitage utiliidile NeoPixel
// - Ühenduse loomiseks klõpsake nuppu 'Ühenda' ja
// saata metaandmeid pikslite paigutuse kohta
// - kasutage seadme pikslite värskendamiseks utiliiti NeoPixel
/* MÄRKUS. See visand nõudis vähemalt Adafruit_Neopixeli versiooni 1.1.0 !!! */
#kaasake
#kaasake
#kaasake
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * PIN -kood, mida kasutatakse NeoPixelite juhtimiseks * /
#defineeri MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t laius = 0;
uint8_t kõrgus = 0;
uint8_t samm;
uint8_t componentsValue;
bool on 400Hz;
uint8_t komponendid = 3; // ainult 3 ja 4 on kehtivad väärtused
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE teenus
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
tühine seadistus ()
{
Seriaalne algus (115200);
samas (! Seeria) viivitus (10); // nrf52840 jaoks, kasutades kohalikku USB -d
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Palun ühendage, kasutades rakendust Bluefruit Connect LE");
// Neopikslite seadistamine
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Kontrollige bluefruit.h -st toetatud väärtusi
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Järjepidevuse huvides tuleks kõigepealt lisada OTA DFU, kui see on olemas
bledfu.begin ();
// Seadme teabeteenuse seadistamine ja käivitamine
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// BLE UART teenuse seadistamine ja käivitamine
bleuart.begin ();
// Seadistage ja alustage reklaami
startAdv ();
}
void startAdv (tühine)
{
// Reklaamipakett
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Kaasa 128-bitine bleuart uuid
Bluefruit. Advertising.addService (bleuart);
// Sekundaarse skannimise vastuse pakett (valikuline)
// Kuna reklaamipaketis pole ruumi nimele
Bluefruit. ScanResponse.addName ();
/* Alusta reklaami
* - lubage automaatne reklaamimine, kui see on lahti ühendatud
* - Intervall: kiire režiim = 20 ms, aeglane režiim = 152,5 ms
* - Kiire režiimi ajalõpp on 30 sekundit
* - Start (timeout) koos timeout = 0 reklaamib igavesti (kuni ühendamiseni)
*
* Soovitatava reklaamivahemiku jaoks
*
*/
Bluefruit. Advertising.restartOnDisconnect (tõene);
Bluefruit. Advertising.setInterval (32, 244); // ühikus 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // sekundite arv kiirrežiimis
Bluefruit. Advertising.start (0); // 0 = Ärge lõpetage reklaamimist n sekundi pärast
}
void connect_callback (uint16_t conn_handle)
{
// Hankige viide praegusele ühendusele
BLEConnection* ühendus = Bluefruit. Connection (conn_handle);
sümbol kesknimi [32] = {0};
ühendus-> getPeerName (kesknimi, suurus (kesknimi));
Serial.print ("Ühendatud");
Serial.println (kesknimi);
Serial.println ("Palun valige vahekaart" Neopikslid ", klõpsake" Ühenda "ja nautige");
}
tühine tsükkel ()
{
// Kaja sai andmeid
kui (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int käsk = bleuart.read ();
lüliti (käsk) {
juhtum 'V': {// Hangi versioon
commandVersion ();
murda;
}
juhtum 'S': {// Seadistuse mõõtmed, komponendid, samm…
commandSetup ();
murda;
}
juhtum 'C': {// Selge värviga
commandClearColor ();
murda;
}
juhtum 'B': {// Määra heledus
commandSetBrightness ();
murda;
}
juhtum 'P': {// Määra piksel
commandSetPixel ();
murda;
}
juhtum 'I': {// Uue pildi saamine
commandImage ();
murda;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
jaoks (int j = 0; j <kõrgus; j ++)
{
jaoks (int i = 0; i <laius; i ++) {
kui (komponendid == 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+= komponendid;
pixelIndex ++;
}
pixelIndex += samm - laius; // Teisalda pixelIndex järgmisele reale (arvesta sammuga)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Käsk: versioonikontroll"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Käsk: seadistamine"));
laius = bleuart.read ();
kõrgus = bleuart.read ();
samm = bleuart.read ();
komponendidVäärtus = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponendid = (komponendidVäärtus == NEO_RGB || komponendidVäärtus == NEO_RBG || komponendidVäärtus == NEO_GRB || komponendidVäärtus == NEO_GBR || komponendidVäärtus == NEO_BRG || komponendidVäärtus == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", laius, kõrgus);
Serial.printf ("\ tstride: %d / n", samm);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponendid: %d / n", komponendid);
kui (pixelBuffer! = NULL) {
kustuta pixelBuffer;
}
uint32_t suurus = laius*kõrgus;
pixelBuffer = uus uint8_t [suurus*komponendid];
neopixel.updateLength (suurus);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Valmis
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Käsk: SetBrightness"));
// Väärtuse lugemine
uint8_t heledus = bleuart.read ();
// Heleduse määramine
neopixel.setBrightness (heledus);
// Värskenda piksleid
swapPuhvrid ();
// Valmis
sendResponse ("OK");
}
tühine käskClearColor () {
Serial.println (F ("Käsk: ClearColor"));
// Loe värvi
uint8_t color [MAXCOMPONENTS];
jaoks (int j = 0; j <komponendid;) {
kui (bleuart.available ()) {
värv [j] = bleuart.read ();
j ++;
}
}
// Määra kõik LED -id värviliseks
int suurus = laius * kõrgus;
uint8_t *base_addr = pixelBuffer;
jaoks (int i = 0; i <suurus; i ++) {
jaoks (int j = 0; j <komponendid; j ++) {
*base_addr = värv [j];
base_addr ++;
}
}
// Vaheta puhvreid
Serial.println (F ("ClearColor valmis"));
swapPuhvrid ();
kui (komponendid == 3) {
Serial.printf ("\ tselge (%d, %d, %d) n", värv [0], värv [1], värv [2]);
}
muu {
Serial.printf ("\ tselge (%d, %d, %d, %d) n", värv [0], värv [1], värv [2], värv [3]);
}
// Valmis
sendResponse ("OK");
}
tühine käskSetPixel () {
Serial.println (F ("Käsk: SetPixel"));
// Lugemisasend
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Värvide lugemine
uint32_t pixelOffset = y*laius+x;
uint32_t pixelDataOffset = pixelOffset*komponendid;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
jaoks (int j = 0; j <komponendid;) {
kui (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Määra värvid
uint32_t neopixelIndex = y*samm+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t värv;
kui (komponendid == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tvärv (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
muu {
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, värv);
neopixel.show ();
// Valmis
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Käsk: Pilt %dx %d, %d, %d / n", laius, kõrgus, komponendid, samm);
// Uue pikslipuhvri vastuvõtmine
int suurus = laius * kõrgus;
uint8_t *base_addr = pixelBuffer;
jaoks (int i = 0; i <suurus; i ++) {
jaoks (int j = 0; j <komponendid;) {
kui (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
kui (komponendid == 3) {
uint32_t indeks = i*komponendid;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeks], pixelBuffer [indeks+1], pixelBuffer [indeks+2]);
}
*/
}
// Vaheta puhvreid
Serial.println (F ("Pilt vastu võetud"));
swapPuhvrid ();
// Valmis
sendResponse ("OK");
}
void sendResponse (char const *response) {
Serial.printf ("Saada vastus: %s / n", vastus);
bleuart.write (vastus, strlen (vastus)*sizeof (char));
}
3. samm: 3. samm: lambivarju ostmine
4. samm: 4. samm: tõmmake see kõik kokku
Soovitan:
Tõeline binaarkell koos NTP sünkroonimisega: 4 sammu
Tõeline binaarkell koos NTP -sünkroonimisega: tõeline binaarkell kuvab kellaaega terve päeva binaarmurdude summana, erinevalt traditsioonilisest " binaarkellast " mis kuvab aega binaarselt kodeeritud kümnendkohtade kujul, mis vastavad tundidele/minutitele/sekunditele. Traditsiooniline
Õhk - tõeline mobiilne õhukitarr (prototüüp): 7 sammu (koos piltidega)
Õhk - tõeline mobiilne õhukitarr (prototüüp): Okei, see on tõesti lühike juhend, mis käsitleb esimest osa minu lapsepõlveunistusele lähemale jõudmisest. Kui olin noor poiss, vaatasin alati, kuidas mu lemmikartistid ja bändid laitmatult kitarri mängisid. Kui ma suureks kasvasin, ei olnud ma
Renegade-i (programmeeritav IC-tester, mis tundub tõeline): 3 sammu (piltidega)
Renegade-i (programmeeritav IC-tester, mis tundub tõeline): MILJON DOLLAR DREAM. Kas olete kunagi unistanud, et teil oleks kodus oma IC-tester? Mitte ainult vidin, millega saab testida IC -d, vaid ka “programmeeritav” masin, mis tundub olevat üks semikoni testitööstuse suurimate tegijate lipulaev
Combat Drones Quadcopters Aka tõeline koeravõitluse kogemus: 8 sammu (piltidega)
Võitlusdroonide nelikopterid tõeline koeravõitluse kogemus: Tere tulemast minu " ible " #37 Peame tunnistama, et praegused turul olevad lahingudroonid on natuke räpased. Väga raske on aru saada, kes võidab ja kes kaotab. Kui üks droon alla tuleb, järgneb teine (kukub üksteisele vastu
3D KEVA väljakutse 2: voodi: 3 sammu
3D KEVA väljakutse 2: Voodi: Tere tulemast 3D KEVA väljakutsesse! Kas olete valmis seda tegema? Iga 3D KEVA väljakutse esitab õppijale kolm vaadet (üleval, ees ja paremal). Ainuüksi nende vaadete kasutamine on väljakutseks paigutada oma KEVA plangud seisukohtadele sobival viisil. Si