Mündəricat:
- Addım 1: Adım 1: Dövrəni Lehimləyin
- Addım 2: Adım 2: Kodu yazın
- Adım 3: Adım 3: Abajur Alın
- Addım 4: Addım 4: Hamısını Birlikdə çəkin
- Addım 5: Adım 5: Oyun Kartları Hazırlayın
Video: Həqiqətən Çağırış: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Müasir dünya insanlardan fiziki olaraq çıxmağı və rəqəmsal mühitdə yaşamağı tələb edir.
Al -ın görünüşü və texnologiyanın yayılması ilə insanlar maşına çox güvənirlər və həmişə doğru olduğuna inanırlar.
"Həqiqətən", saxta yalan detektoru testi yaratmaqla bu yanlış güvəni sarsıtmaq məqsədi daşıyır. İnsanlar Həqiqətən işlədiyinə asanlıqla inanacaqlar, ancaq yanlış cavablar verildikdə texnologiyaya olan inamlarını sarsıdacaqlar.
Addım 1: Adım 1: Dövrəni Lehimləyin
Çünki əsərlərimin yalnız bir işığı var, ona görə də lehimləmək çox asandır. Əsas problem başlanğıcdadır, iki işığı lehimləyirəm, amma ifşa hissəsini dərhal örtmədim. Beləliklə, iki tel hissəsi bir -birinə toxunanda. Qısadır.
Addım 2: Adım 2: Kodu yazın
p.p1 {marj: 0.0px 0.0px 0.0px 0.0px; xətt hündürlüyü: 15.0px; font: 12.0px Times; rəng: #000000; fon rəngi: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; xətt hündürlüyü: 15.0px; font: 12.0px Times; rəng: #000000; fon rəngi: #ffffff; min yüksəklik: 14.0px} span.s1 {font-kerning: none}
Addım 2: Kodu yazın
/*********************************************************************
Bu nRF52 əsaslı Bluefruit LE modullarımız üçün bir nümunədir
Adafruit mağazasında bu gün birini götür!
Adafruit, bu açıq mənbə kodunu təmin edərək vaxt və resurslar qoyur.
zəhmət olmasa Adafruit və açıq mənbə aparatını satın alaraq dəstəkləyin
Adafruit məhsulları!
MIT lisenziyası, daha çox məlumat üçün LİSANSİYA baxın
Yuxarıdakı bütün mətn və aşağıda açılan ekran daxil edilməlidir
hər hansı bir yenidən bölüşdürmə
*********************************************************************
/ Bu eskizin NeoPixel nəzarəti ilə istifadə edilməsi nəzərdə tutulmuşdur
// Adafruit -in Bluefruit LE Connect mobil tətbiqetməsində.
/
/ - Bu eskizi tərtib edin və nRF52 Tüyünə yandırın
// - Bluefruit LE Connect tətbiqini açın
// - NeoPixel yardım proqramına keçin
// - Bir əlaqə qurmaq üçün 'əlaqə' düyməsini basın və
// piksel düzeni haqqında meta məlumat göndərin
// - Cihazınızdakı pikselləri yeniləmək üçün NeoPixel yardım proqramından istifadə edin
/* DİQQƏT: Bu eskiz üçün ən azı Adafruit_Neopixel 1.1.0 versiyası tələb olunur !!! */
#daxil edin
#daxil edin
#daxil edin
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * NeoPikselləri idarə etmək üçün istifadə olunan pin * /
#MAXCOMPONENTS 4 təyin edin
uint8_t *pixelBuffer = NULL;
uint8_t eni = 0;
uint8_t hündürlük = 0;
uint8_t addım;
uint8_t komponentləriDəyər;
bool 400Hz;
uint8_t komponentləri = 3; // yalnız 3 və 4 etibarlı dəyərlərdir
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE Xidməti
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
boş quraşdırma ()
{
Serial.begin (115200);
while (! Serial) gecikmə (10); // yerli usb ilə nrf52840 üçün
Serial.println ("Adafruit Bluefruit Neopixel Testi");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Zəhmət olmasa Bluefruit Connect LE tətbiqindən istifadə edərək əlaqə saxlayın");
// Neopixelləri konfiqurasiya edin
neopixel.begin ();
// Bluefruit -i işə salın
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Dəstəklənən dəyərlər üçün bluefruit.h yoxlayın
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Tutarlı olmaq üçün OTA DFU varsa, əvvəlcə əlavə edilməlidir
bledfu.begin ();
// Cihaz Məlumat Xidmətini konfiqurasiya edin və işə salın
bledis.setMen Manufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// BLE UART xidmətini konfiqurasiya edin və işə salın
bleuart.begin ();
// Reklam qurun və işə başlayın
startAdv ();
}
void startAdv (boş)
{
// Reklam paketi
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// bleuart 128 bitlik uuid daxil edin
Bluefruit. Advertising.addService (bleuart);
// İkincil Tarama Cavabı paketi (isteğe bağlı)
// Reklam paketində 'Ad' üçün yer olmadığı üçün
Bluefruit. ScanResponse.addName ();
/* Reklam etməyə başlayın
* - Bağlantı kəsildikdə avtomatik reklamı aktivləşdirin
* - Aralıq: sürətli rejim = 20 ms, yavaş rejim = 152.5 ms
* - Sürətli rejim üçün zaman aşımı 30 saniyədir
* - Zaman aşımı ilə başla (zaman aşımı) = 0 sonsuza qədər reklam edəcək (bağlanana qədər)
*
* Tövsiyə olunan reklam aralığı üçün
*
*/
Bluefruit. Advertising.restartOnDisconnect (doğru);
Bluefruit. Advertising.setInterval (32, 244); // 0.625 ms vahidində
Bluefruit. Advertising.setFastTimeout (30); // sürətli rejimdə saniyə sayı
Bluefruit. Advertising.start (0); // 0 = n saniyədən sonra reklamı dayandırmayın
}
void connect_callback (uint16_t conn_handle)
{
// Cari əlaqəyə istinad alın
BLEConnection* bağlantısı = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
keçid-> getPeerName (central_name, sizeof (central_name));
Serial.print ("Bağlandı");
Serial.println (central_name);
Serial.println ("Zəhmət olmasa 'Neopixels' sekmesini seçin, 'Bağlan' düyməsini basın və əylənin)";
}
boşluq döngəsi ()
{
// Echo məlumat aldı
əgər (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int əmri = bleuart.read ();
keçid (əmr) {
hal 'V': {// Versiya alın
commandVersion ();
fasilə;
}
case 'S': {// Ölçüləri, komponentləri qurun, addım…
commandSetup ();
fasilə;
}
hal 'C': {// Rənglə silin
commandClearColor ();
fasilə;
}
hal 'B': {// Parlaqlığı Ayarlayın
commandSetBrightness ();
fasilə;
}
hal 'P': {// Pixel qurun
commandSetPixel ();
fasilə;
}
case 'I': {// Yeni şəkil alın
commandImage ();
fasilə;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
üçün (int j = 0; j <hündürlük; j ++)
{
üçün (int i = 0; i <en; i ++) {
əgər (komponentlər == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
başqa {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponentlər;
pixelIndex ++;
}
pixelIndex += addım - en; // PixelIndex'i növbəti sıraya köçürün (addımı nəzərə alın)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Command: Version check"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Əmr: Quraşdırma"));
eni = bleuart.read ();
hündürlük = bleuart.read ();
addım = bleuart.read ();
komponentlərValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = komponentlərValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponentler = (bileşenlerDeğeri == NEO_RGB || bileşenlerDeğeri == NEO_RBG || bileşenlerDeğeri == NEO_GRB || bileşenlerDeğeri == NEO_GBR || bileşenlerDeğeri == NEO_BRG || KomponentleriDeğeri == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", en, hündürlük);
Serial.printf ("\ tstride: %d / n", addım);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tcomponents: %d / n", komponentlər);
əgər (pixelBuffer! = NULL) {
silmək pixelBuffer;
}
uint32_t ölçüsü = eni*hündürlüyü;
pixelBuffer = yeni uint8_t [ölçüsü*komponentləri];
neopixel.updateLength (ölçü);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Tamamlandı
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Command: SetBrightness"));
// Dəyəri oxuyun
uint8_t parlaqlıq = bleuart.read ();
// Parlaqlığı təyin edin
neopixel.setBarıqlıq (parlaqlıq);
// Pikselləri yeniləyin
swapBuffers ();
// Tamamlandı
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Komanda: ClearColor"));
// Rəngi oxuyun
uint8_t rəng [MAXCOMPONENTS];
üçün (int j = 0; j <komponentlər;) {
əgər (bleuart.available ()) {
rəng [j] = bleuart.read ();
j ++;
}
}
// Bütün ledləri rəngləndirin
int ölçüsü = eni * hündürlük;
uint8_t *base_addr = pixelBuffer;
üçün (int i = 0; i <ölçü; i ++) {
üçün (int j = 0; j <komponentləri; j ++) {
*base_addr = rəng [j];
base_addr ++;
}
}
// Tamponları dəyişdirin
Serial.println (F ("ClearColor tamamlandı"));
swapBuffers ();
əgər (komponentlər == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", rəng [0], rəng [1], rəng [2]);
}
başqa {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", rəng [0], rəng [1], rəng [2], rəng [3]);
}
// Tamamlandı
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Əmr: SetPixel"));
// Vəzifəni oxuyun
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Rəngləri oxuyun
uint32_t pixelOffset = y*eni+x;
uint32_t pixelDataOffset = pixelOffset*komponentləri;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
üçün (int j = 0; j <komponentlər;) {
əgər (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Rəngləri təyin edin
uint32_t neopixelIndex = y*addım+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t rəng;
əgər (komponentlər == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
başqa {
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, rəng);
neopixel.show ();
// Tamamlandı
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Əmr: Şəkil %dx %d, %d, %d / n", en, hündürlük, komponentlər, addım);
// Yeni piksel tamponu alın
int ölçüsü = eni * hündürlük;
uint8_t *base_addr = pixelBuffer;
üçün (int i = 0; i <ölçü; i ++) {
üçün (int j = 0; j <komponentlər;) {
əgər (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
əgər (komponentlər == 3) {
uint32_t index = i*komponentləri;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Tamponları dəyişdirin
Serial.println (F ("Şəkil alındı"));
swapBuffers ();
// Tamamlandı
sendResponse ("OK");
}
etibarsız sendResponse (char const *cavabı) {
Serial.printf ("Cavab göndər: %s / n", cavab);
bleuart.write (cavab, strlen (cavab)*sizeof (char));
}
Adım 3: Adım 3: Abajur Alın
Addım 4: Addım 4: Hamısını Birlikdə çəkin
Tövsiyə:
Həqiqətən WiFi Genişləndiricisi: 5 addım
Həqiqətən WiFi Extender: GirişTruly WiFi Extender, Raspberry Pi Zero W-ə əsaslanan bir WiFi təkrarlayıcısıdır. Bu, aşağı qiymətli (10USD-dən aşağı) və yüksək dərəcədə özəlləşdirilə bilən proqramı birləşdirən kommersiya WiFi təkrarlayıcıya gözəl alternativdir. Bəzi reklam bloklama həlləri də işlədə bilər
Python -da həqiqətən sərin bir matris hazırlayın!: 6 addım
Pythonda həqiqətən sərin bir matris hazırlayın!: Salam uşaqlar! Bu təlimat sizə Pythonda matris necə qurulacağını öyrədəcək! Adətən, insanlar Batch -da bir matris hazırlayırdılar, çünki bu, asandır. Ancaq bu dəfə sizə güclü kompüter dillərindən birində Matrix necə ediləcəyini göstərəcəyəm
Şapka yox şapka - Həqiqətən şapka geyinməyən, lakin şapka təcrübəsi istəyən insanlar üçün şapka: 8 addım
Şapka Şapka deyil - Həqiqətən Şapka Geyinməyən, Ancaq Şapka Təcrübəsi İstəyən İnsanların Şapkası: Həmişə şapka sahibi olmağı arzulamışam, amma mənim üçün işləyən bir şapka tapmamışam. Bu " Şapka deyil Şapka " və ya sehrbaz adlandırıldığı kimi, Kentukki Derbisinə qatıla biləcəyim şapka problemimin üst qatı bir həllidir
Həqiqətən, Həqiqətən, Asan USB Motor!: 3 addım
Həqiqətən, Həqiqətən, Asan USB Motor !: Nəhayət, mənim 2 -ci təlimatım !!! Bu, hər hansı bir USB portu ilə işləyən sizin və ya kompüteriniz üçün bir pərəstişkardır. Yeni başlayanlar üçün elektronikaya başlamağı məsləhət görürəm. Asan və əyləncəlidir, sözün əsl mənasında beş dəqiqə edə bilərsiniz !!! REAL
GIMP -dən istifadə edərək insanları/insanları/heyvanları/robotları həqiqətən sərin/parlaq bir istilik görmə qabiliyyətinə (seçdiyiniz rəng) bənzətməyin həqiqətən sadə/asan/çətin olmayan yolu: 4 addım
GIMP -dən istifadə edərək İnsanları/İnsanları/Heyvanları/Robotları Həqiqətən Sərin/Parlaq İstilik Görmə Sahəsinə (Seçdiyiniz Rəngə) bənzətməyin Həqiqətən Sadə/Asan/Qeyri -Mürəkkəb Yolu: Oxuyun … başlığını oxuyun