Përmbajtje:
- Hapi 1: Hapi 1: Saldoni qarkun
- Hapi 2: Hapi 2: Shkruani Kodin
- Hapi 3: Hapi 3: Blerja e llambadarit
- Hapi 4: Hapi 4: Tërhiqini të gjitha së bashku
- Hapi 5: Hapi 5: Bërja e Kartave të Lojërave
Video: Sfidë e vërtetë: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:17
Bota moderne kërkon që njerëzit të dalin nga ajo fizike dhe të jetojnë brenda asaj dixhitale.
Me shfaqjen e Al dhe përhapjen e teknologjisë njerëzit i besojnë shumë makinës dhe besojnë se është gjithmonë e saktë.
"Me të vërtetë" synohet të shkundë këtë besim të rremë përmes krijimit të një testi të rremë të detektorit të gënjeshtrës. Njerëzit lehtë do të besojnë se Really po funksionon, por kur jepen përgjigje të rreme kjo do të trondisë besimin e tyre të verbër në teknologji.
Hapi 1: Hapi 1: Saldoni qarkun
Sepse veprat e mia kanë vetëm një dritë, kështu që është shumë e lehtë për t'u bashkuar. Problemi kryesor është në fillim, bashkova dy drita, por pjesën e ekspozimit nuk e mbulova menjëherë. Pra, kur të dy telat ndahen prekin së bashku. Shkurtohet.
Hapi 2: Hapi 2: Shkruani Kodin
p.p1 {diferenca: 0.0px 0.0px 0.0px 0.0px; lartësia e vijës: 15.0px; font: 12.0px Times; ngjyra: #000000; sfondi-ngjyra: #ffffff}
p.p2 {diferenca: 0.0px 0.0px 0.0px 0.0px; lartësia e vijës: 15.0px; font: 12.0px Times; ngjyra: #000000; sfond-ngjyra: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Hapi 2: Shkruani Kodin
/*********************************************************************
Ky është një shembull për modulet tona të bazuara në nRF52 Bluefruit LE
Merrni një sot në dyqanin e adafruit!
Adafruit investon kohë dhe burime duke siguruar këtë kod me kod të hapur, ju lutemi mbështesni Adafruit dhe pajisjet me burim të hapur duke blerë
produkte nga Adafruit!
Licenca MIT, kontrolloni LICENSE për më shumë informacion
I gjithë teksti i mësipërm dhe ekrani i spërkatjes më poshtë duhet të përfshihen në të
çdo rishpërndarje
*********************************************************************
/ Ky skicë synohet të përdoret me kontrollin NeoPixel
// shfaqet në aplikacionin celular të Adafruit's Bluefruit LE Connect.
/
/ - Përpiloni dhe ndizni këtë skicë në pendën nRF52
// - Hapni aplikacionin Bluefruit LE Connect
// - Kaloni në programin NeoPixel
// - Klikoni butonin 'lidhje' për të krijuar një lidhje dhe
// dërgoni meta-të dhënat në lidhje me paraqitjen e pikselëve
// - Përdorni programin NeoPixel për të përditësuar pikselët në pajisjen tuaj
/* SHENIM: Ky skicë kërkonte të paktën versionin 1.1.0 të Adafruit_Neopixel !!! */
#përfshi
#përfshi
#përfshi
#përcakto NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin e përdorur për të drejtuar NeoPixels * /
#përcaktoni MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t gjerësia = 0;
uint8_t lartësi = 0;
uint8_t hapi;
uint8_t komponentetVlera;
bool është 400Hz;
komponentët uint8_t = 3; // vetëm 3 dhe 4 janë vlera të vlefshme
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// Shërbimi BLE
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
void setup ()
{
Serial.filloj (115200);
ndërsa (! Serial) vonesë (10); // për nrf52840 me usb amtare
Serial.println ("Testi i Neopixelit Adafruit Bluefruit");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Ju lutemi lidheni duke përdorur aplikacionin Bluefruit Connect LE");
// Konfiguro neopixelët
neopixel.filloj ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Kontrolloni bluefruit.h për vlerat e mbështetura
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Për të qenë konsistent OTA DFU duhet të shtohet së pari nëse ekziston
bledfu.filloj ();
// Konfiguro dhe fillo Shërbimin e Informacionit të Pajisjes
bledis.setManufacturer ("Industritë Adafruit");
bledis.setModel ("Bluefruit Feather52");
bledis.filloj ();
// Konfiguroni dhe filloni shërbimin BLE UART
bleuart.filloj ();
// Vendosni dhe filloni reklamat
startAdv ();
}
fillimi i pavlefshëm Adv (i pavlefshëm)
{
// Paketë reklamuese
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Përfshi bleuart 128-bit uuid
Bluefruit. Advertising.addService (bleuart);
// Paketa e Përgjigjes së Skanimit Sekondar (opsionale)
// Meqenëse nuk ka vend për 'Name' në paketën e Reklamimit
Bluefruit. ScanResponse.addName ();
/* Filloni Reklamimin
* - Aktivizoni reklamat automatike nëse shkëputeni
* - Intervali: modaliteti i shpejtë = 20 ms, mënyra e ngadaltë = 152.5 ms
* - Koha për modalitetin e shpejtë është 30 sekonda
* - Fillimi (timeout) me timeout = 0 do të reklamojë përgjithmonë (derisa të lidhet)
*
* Për intervalin e rekomanduar të reklamimit
*
*/
Bluefruit. Advertising.restartOnDisconnect (e vërtetë);
Bluefruit. Advertising.setInterval (32, 244); // në njësi prej 0.625 ms
Bluefruit. Advertising.setFastTimeout (30); // numri i sekondave në modalitetin e shpejtë
Bluefruit. Advertising.start (0); // 0 = Mos ndaloni reklamat pas n sekondash
}
void connect_callback (uint16_t conn_handle)
{
// Merrni referencën për lidhjen aktuale
BLEConnection* lidhje = Bluefruit. Connection (conn_handle);
emri qendror char [32] = {0};
lidhje-> getPeerName (emri qendror, madhësia (emri qendror));
Serial.print ("I lidhur me");
Serial.println (emri_qendror);
Serial.println ("Ju lutemi zgjidhni skedën" Neopixels ", klikoni" Connect "dhe argëtohuni");
}
lak void ()
{
// Echo mori të dhëna
nëse (Bluefruit.connected () && bleuart.notifyEnabled ())
{
komanda int = bleuart.read ();
kaloni (komandën) {
rasti 'V': {// Merr Versionin
commandVersion ();
pushim;
}
rasti 'S': {// Përcaktoni dimensionet, përbërësit, hapin…
commandSetup ();
pushim;
}
rasti 'C': {// I qartë me ngjyrë
commandClearColor ();
pushim;
}
rasti 'B': {// Set Brightness
commandSetBrightness ();
pushim;
}
rasti 'P': {// Vendos Pixel
commandSetPixel ();
pushim;
}
rasti 'I': {// Merr imazh të ri
commandImage ();
pushim;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
për (int j = 0; j <lartësia; j ++)
{
për (int i = 0; i <gjerësia; i ++) {
nëse (përbërësit == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
tjeter {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponentët;
pixelIndex ++;
}
pixelIndex += hap - gjerësi; // Zhvendos pixelIndex në rreshtin tjetër (merr parasysh hapin)
}
neopixel.shfaq ();
}
void commandVersion () {
Serial.println (F ("Komanda: Verifikimi i versionit"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Komanda: Setup"));
width = bleuart.read ();
lartësia = bleuart.read ();
hap = bleuart.read ();
komponentëtVlera = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = komponentëtVlera + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponentët = (komponentëtVlera == NEO_RGB || komponentëtVlera == NEO_RBG || komponentëtVlera == NEO_GRB || komponentëtVlera == NEO_GBR || komponentëtVlera == NEO_BRG || komponentëtVlera == NEO_BGR)? 3: 4;
Serial.printf ("\ madhësia: %dx %d / n", gjerësia, lartësia);
Serial.printf ("\ tstide: %d / n", hap);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponentët: %d / n", përbërës);
nëse (pixelBuffer! = NULL) {
fshini pixelBuffer;
}
uint32_t madhësia = gjerësia*lartësia;
pixelBuffer = uint8_t i ri [madhësia*komponentët];
neopixel.updateLength (madhësia);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// U krye
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Komanda: SetBrightness"));
// Lexo vlerën
uint8_t shkëlqim = bleuart.read ();
// Vendosni shkëlqimin
neopixel.setBritness (shkëlqim);
// Rifreskoni pikselet
swapBuffers ();
// U krye
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Komanda: ClearColor"));
// Lexoni ngjyrën
ngjyra uint8_t [MAXCOMPONENTS];
për (int j = 0; j <komponentët;) {
if (bleuart.available ()) {
ngjyra [j] = bleuart.read ();
j ++;
}
}
// Vendosni të gjitha dritat në ngjyrë
int madhësia = gjerësia * lartësia;
uint8_t *base_addr = pixelBuffer;
për (int i = 0; i <madhësia; i ++) {
për (int j = 0; j <komponentët; j ++) {
*base_addr = ngjyra [j];
base_addr ++;
}
}
// Ndërroni tamponët
Serial.println (F ("ClearColor përfundoi"));
swapBuffers ();
nëse (përbërësit == 3) {
Serial.printf ("\ tqarta (%d, %d, %d) n", ngjyra [0], ngjyra [1], ngjyra [2]);
}
tjeter {
Serial.printf ("\ tqarta (%d, %d, %d, %d) n", ngjyra [0], ngjyra [1], ngjyra [2], ngjyra [3]);
}
// U krye
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Komanda: SetPixel"));
// Pozicioni i leximit
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Lexoni ngjyrat
uint32_t pixelOffset = y*gjerësi+x;
uint32_t pixelDataOffset = përbërës pixelOffset*;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
për (int j = 0; j <komponentët;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Vendosni ngjyrat
uint32_t neopixelIndex = y*hap+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
ngjyra uint32_t;
nëse (përbërësit == 3) {
ngjyra = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
tjeter {
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, ngjyra);
neopixel.shfaq ();
// U krye
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Komanda: Imazhi %dx %d, %d, %d / n", gjerësia, lartësia, përbërësit, hapi);
// Merrni tampon të ri piksel
int madhësia = gjerësia * lartësia;
uint8_t *base_addr = pixelBuffer;
për (int i = 0; i <madhësia; i ++) {
për (int j = 0; j <komponentët;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
nëse (përbërësit == 3) {
uint32_t index = i*komponentë;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeksi], pixelBuffer [indeksi+1], pixelBuffer [indeksi+2]);
}
*/
}
// Ndërroni tamponët
Serial.println (F ("Imazhi u mor"));
swapBuffers ();
// U krye
sendResponse ("OK");
}
void sendResponse (char const *përgjigje) {
Serial.printf ("Dërgoni përgjigje: %s / n", përgjigje);
bleuart.write (përgjigje, strlen (përgjigje)*sizeof (char));
}
Hapi 3: Hapi 3: Blerja e llambadarit
Hapi 4: Hapi 4: Tërhiqini të gjitha së bashku
Recommended:
Ora binare e vërtetë me sinkronizim NTP: 4 hapa
Ora binare e vërtetë me sinkronizimin NTP: Një orë binare e vërtetë shfaq kohën e ditës si një shumë të fraksioneve binare të një dite të plotë, në krahasim me një "orë binare" tradicionale; që shfaq kohën si shifra dhjetore të koduara në mënyrë binare që korrespondojnë me orët/minutat/sekondat. Tradita
Ajër - kitarë ajrore e vërtetë celulare (prototip): 7 hapa (me fotografi)
Ajër - Kitarë Ajrore e Vërtetë Mobile (Prototip): Mirë, kjo do të jetë një udhëzues vërtet i shkurtër për pjesën e parë të përfundimit më në fund të ëndrrës sime të fëmijërisë. Kur isha një djalë i ri, unë gjithmonë shikoja artistët dhe grupet e mia të preferuara duke luajtur kitarë në mënyrë të papërlyer. Ndërsa u rrita, nuk isha
Renegade-i (Testues IC i programueshëm që ndihet si një gjë e vërtetë): 3 hapa (me fotografi)
Renegade-i (Testues IC i Programueshëm që Ndihet si Gjëja e Vërtetë): RENDRERRIMI MILION DOLLAR. A keni ëndërruar ndonjëherë të keni testuesin tuaj IC në shtëpi? Jo vetëm një vegël që mund të testojë IC, por një makinë "të programueshme" që ndihet si një nga produktet kryesore të lojtarëve më të mëdhenj në industrinë e testeve gjysmëpreshe, suksesi
Me të vërtetë WiFi Extender: 5 hapa
Me të vërtetë WiFi Extender: HyrjeTë vërtetë WiFi Extender është një përsëritës WiFi bazuar në Raspberry Pi Zero W. Ai bën një alternativë të mirë për një përsëritës komercial WiFi që kombinon kosto të ulët (nën 10USD) dhe softuer shumë të personalizueshëm. Gjithashtu mund të ekzekutojë disa zgjidhje për bllokimin e reklamave
Si të bëni një madhësi të vërtetë BB8 me Arduino: 12 hapa
Si të bëni një madhësi të vërtetë BB8 me Arduino: Përshëndetje të gjithëve, ne jemi dy studentë italianë që kemi ndërtuar një klon BB8 me materiale të lira dhe me këtë tutorial ne duam të ndajmë përvojën tonë me ju! Ne kemi përdorur materiale të lira për shkak të kufizimit tonë buxhet, por rezultati përfundimtar është shumë i mirë