İçindekiler:

Gerçekten Meydan Okuma: 5 Adım
Gerçekten Meydan Okuma: 5 Adım

Video: Gerçekten Meydan Okuma: 5 Adım

Video: Gerçekten Meydan Okuma: 5 Adım
Video: 5 ADIM İLERİ MEYDAN OKUMASI! || 123 GO! CHALLENGE’TAN KOMİK ŞAKALAR VE TUHAF DURUMLAR 2024, Temmuz
Anonim
Image
Image
Adım 1: Devreyi Lehimleyin
Adım 1: Devreyi Lehimleyin

Modern dünya, insanların fiziksel olanın dışına çıkmasını ve dijitalin içinde yaşamasını gerektiriyor.

Al'ın ortaya çıkması ve teknolojinin yaygınlaşmasıyla birlikte insanlar makineye çok fazla güveniyor ve her zaman doğru olduğuna inanıyorlar.

“Gerçekten”, sahte bir yalan dedektörü testi oluşturarak bu yanlış güveni sarsmayı amaçlamaktadır. İnsanlar, Gerçekten'in çalıştığına kolayca inanacaklar, ancak yanlış cevaplar verildiğinde, teknolojiye olan kör güvenlerini sarsacak.

Adım 1: Adım 1: Devreyi Lehimleyin

İşlerimde tek ışık olduğu için lehimlemesi çok kolay. Asıl sorun başlangıçta iki ışık lehimledim ama pozlama kısmını hemen kapatmadım. Yani iki tel parçası birbirine dokunduğunda. Kısa çıktı.

Adım 2: Adım 2: Kodu Yazın

p.p1 {marj: 0.0px 0.0px 0.0px 0.0px; satır yüksekliği: 15.0 piksel; yazı tipi: 12.0px Times; renk: #000000; arka plan rengi: #ffffff}

p.p2 {marj: 0.0px 0.0px 0.0px 0.0px; satır yüksekliği: 15.0 piksel; yazı tipi: 12.0px Times; renk: #000000; arka plan rengi: #ffffff; min-height: 14.0px} span.s1 {font-kerning: yok}

Adım 2: Kodu Yazın

/*********************************************************************

Bu, nRF52 tabanlı Bluefruit LE modüllerimiz için bir örnektir.

Adafruit mağazasından bugün bir tane alın!

Adafruit, bu açık kaynak kodunu sağlayan zaman ve kaynaklara yatırım yapar, lütfen satın alarak Adafruit ve açık kaynaklı donanımı destekleyin

Adafruit'ten ürünler!

MIT lisansı, daha fazla bilgi için LİSANSI kontrol edin

Yukarıdaki tüm metinler ve aşağıdaki açılış ekranı dahil edilmelidir.

herhangi bir yeniden dağıtım

*********************************************************************

/ Bu çizim NeoPixel kontrolü ile kullanılmak üzere tasarlanmıştır.

// Adafruit'in Bluefruit LE Connect mobil uygulamasında yüzey.

/

/ - Bu çizimi derleyin ve nRF52 Feather'a aktarın

// - Bluefruit LE Connect uygulamasını açın

// - NeoPixel yardımcı programına geç

// - Bir bağlantı kurmak için 'bağlan' düğmesine tıklayın ve

// piksel düzeniyle ilgili meta verileri gönder

// - Cihazınızdaki pikselleri güncellemek için NeoPixel yardımcı programını kullanın

/* NOT: Bu çizim, Adafruit_Neopixel'in en az 1.1.0 sürümünü gerektiriyordu !!! */

#Dahil etmek

#Dahil etmek

#Dahil etmek

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 /* NeoPixels'i sürmek için kullanılan pin */

#define MAX BİLEŞENLER 4

uint8_t *pixelBuffer = NULL;

uint8_t genişlik = 0;

uint8_t yükseklik = 0;

uint8_t adım;

uint8_t componentValue;

bool 400Hz;

uint8_t bileşenleri = 3; // sadece 3 ve 4 geçerli değerlerdir

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel();

// BLE Servisi

BLEDfu bledfu;

BLED bledis;

BLEUart bleuart;

geçersiz kurulum()

{

Seri.başla(115200);

while (!Seri) gecikme(10); // yerel usb ile nrf52840 için

Serial.println("Adafruit Bluefruit Neopiksel Testi");

Serial.println("--------------------------------");

Seri.println();

Serial.println("Lütfen Bluefruit Connect LE uygulamasını kullanarak bağlanın");

// Neopikselleri Yapılandır

neopixel.begin();

// Bluefruit Başlat

Bluefruit.begin();

Bluefruit.setTxPower(4); // Desteklenen değerler için bluefruit.h'yi kontrol edin

Bluefruit.setName("Bluefruit52");

Bluefruit. Periph.setConnectCallback(connect_callback);

// Tutarlı olması için, varsa önce OTA DFU eklenmelidir.

bledfu.begin();

// Cihaz Bilgi Hizmetini Yapılandırın ve Başlatın

bledis.setManufacturer("Adafruit Industries");

bledis.setModel("Bluefruit Feather52");

bledis.begin();

// BLE UART hizmetini yapılandırın ve başlatın

bleuart.begin();

// Reklamı kurun ve başlatın

startAdv();

}

void startAdv(void)

{

// Reklam paketi

Bluefruit. Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower();

// bleuart 128-bit kullanıcı kimliğini dahil et

Bluefruit. Advertising.addService(bleuart);

// İkincil Tarama Yanıtı paketi (isteğe bağlı)

// Reklam paketinde 'Ad' için yer olmadığı için

Bluefruit. ScanResponse.addName();

/* Reklamı Başlat

* - Bağlantı kesilirse otomatik reklamcılığı etkinleştir

* - Aralık: hızlı mod = 20 ms, yavaş mod = 152,5 ms

* - Hızlı mod için zaman aşımı 30 saniyedir

* - Zaman aşımı = 0 ile başlatma (zaman aşımı) sonsuza kadar reklam verir (bağlanana kadar)

*

* Önerilen reklam aralığı için

*

*/

Bluefruit. Advertising.restartOnDisconnect(true);

Bluefruit. Advertising.setInterval(32, 244); // 0.625 ms biriminde

Bluefruit. Advertising.setFastTimeout(30); // hızlı modda saniye sayısı

Bluefruit. Reklam.start(0); // 0 = n saniye sonra reklamı durdurma

}

geçersiz connect_callback(uint16_t conn_handle)

{

// Geçerli bağlantının referansını al

BLEConnection* bağlantı = Bluefruit. Connection(conn_handle);

char merkez_adı[32] = { 0 };

bağlantı->getPeerName(central_name, sizeof(central_name));

Serial.print("Bağlandı");

Serial.println(merkez_adı);

Serial.println("Lütfen 'Neopikseller' sekmesini seçin, 'Bağlan'a tıklayın ve iyi eğlenceler");

}

boşluk döngüsü()

{

// Eko alınan veri

if (Bluefruit.connected() && bleuart.notifyEnabled())

{

int komut = bleuart.read();

geçiş (komut) {

case 'V': { // Sürümü Al

komutVersion();

kırmak;

}

case 'S': { // Kurulum boyutları, bileşenler, adım…

komutSetup();

kırmak;

}

case 'C': { // Renkle temizle

komutClearColor();

kırmak;

}

case 'B': { // Parlaklığı Ayarla

komutSetBrightness();

kırmak;

}

case 'P': { // Piksel Ayarla

komutSetPixel();

kırmak;

}

case 'I': { // Yeni imaj al

komutGörüntü();

kırmak;

}

}

}

}

geçersiz takasBuffers()

{

uint8_t *base_addr = pixelBuffer;

int pikselIndex = 0;

for (int j = 0; j < yükseklik; j++)

{

for (int i = 0; i < genişlik; i++) {

if (bileşenler == 3) {

neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2)));

}

Başka {

neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));

}

base_addr+=bileşenler;

pikselIndex++;

}

pixelIndex += adım - genişlik; // pixelIndex'i bir sonraki satıra taşıyın (adımı dikkate alın)

}

neopixel.show();

}

geçersiz komutVersion() {

Serial.println(F("Komut: Sürüm kontrolü"));

sendResponse(NEOPIXEL_VERSION_STRING);

}

geçersiz komutSetup() {

Serial.println(F("Komut: Kurulum"));

genişlik = bleuart.read();

yükseklik = bleuart.read();

adım = bleuart.read();

componentValue = bleuart.read();

is400Hz = bleuart.read();

neoPixelType pixelType;

pixelType = componentValue + (400Hz ? NEO_KHZ400: NEO_KHZ800);

bileşenler = (bileşenlerDeğeri == NEO_RGB || componentDeğeri == NEO_RBG || componentDeğeri == NEO_GRB || componentDeğeri == NEO_GBR || componentDeğeri == NEO_BRG || componentDeğeri == NEO_BGR) ? 3:4;

Serial.printf("\tsize: %dx%d\n", genişlik, yükseklik);

Serial.printf("\tadım: %d\n", adım);

Serial.printf("\tpixelType %d\n", pixelType);

Serial.printf("\tbileşenler: %d\n", bileşenler);

if (pixelBuffer != NULL) {

sil pixelBuffer;

}

uint32_t boyut = genişlik*yükseklik;

pixelBuffer = yeni uint8_t[boyut*bileşenler];

neopixel.updateLength(boyut);

neopixel.updateType(pixelType);

neopixel.setPin(PIN);

// Tamamlandı

sendResponse("Tamam");

}

geçersiz komutSetBrightness() {

Serial.println(F("Komut: SetBrightness"));

// Değeri oku

uint8_t parlaklık = bleuart.read();

// Parlaklığı ayarla

neopixel.setBrightness(parlaklık);

// Pikselleri yenile

takasBuffers();

// Tamamlandı

sendResponse("Tamam");

}

void komutuClearColor() {

Serial.println(F("Komut: ClearColor"));

// rengi oku

uint8_t color[MAKS BİLEŞENLER];

for (int j = 0; j < bileşenler;) {

if (bleuart.available()) {

renk[j] = bleuart.read();

j++;

}

}

// Tüm ledleri renge ayarla

int boyut = genişlik * yükseklik;

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i < boyut; i++) {

for (int j = 0; j < bileşenler; j++) {

*base_addr = renk[j];

base_addr++;

}

}

// Tamponları değiştir

Serial.println(F("ClearColor tamamlandı"));

takasBuffers();

if (bileşenler == 3) {

Serial.printf("\tclear (%d, %d, %d)\n", color[0], color[1], color[2]);

}

Başka {

Serial.printf("\tclear (%d, %d, %d, %d)\n", color[0], color[1], color[2], color[3]);

}

// Tamamlandı

sendResponse("Tamam");

}

geçersiz komutSetPixel() {

Serial.println(F("Komut: SetPixel"));

// pozisyonu oku

uint8_t x = bleuart.read();

uint8_t y = bleuart.read();

// renkleri oku

uint32_t pixelOffset = y*genişlik+x;

uint32_t pixelDataOffset = pixelOffset*bileşenleri;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

for (int j = 0; j < bileşenler;) {

if (bleuart.available()) {

*base_addr = bleuart.read();

base_addr++;

j++;

}

}

// Renkleri ayarla

uint32_t neopixelIndex = y*adım+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t renk;

if (bileşenler == 3) {

renk = neopixel. Color(*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

Serial.printf("\tcolor (%d, %d, %d)\n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

}

Başka {

renk = 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, color);

neopixel.show();

// Tamamlandı

sendResponse("Tamam");

}

geçersiz komutImage() {

Serial.printf("Komut: Görüntü %dx%d, %d, %d\n", genişlik, yükseklik, bileşenler, adım);

// Yeni piksel arabelleği al

int boyut = genişlik * yükseklik;

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i < boyut; i++) {

for (int j = 0; j < bileşenler;) {

if (bleuart.available()) {

*base_addr = bleuart.read();

base_addr++;

j++;

}

}

/*

if (bileşenler == 3) {

uint32_t dizin = i*bileşenler;

Serial.printf("\tp%d (%d, %d, %d)\n", i, pixelBuffer[index], pixelBuffer[index+1], pixelBuffer[index+2]);

}

*/

}

// Tamponları değiştir

Serial.println(F("Görüntü alındı"));

takasBuffers();

// Tamamlandı

sendResponse("Tamam");

}

geçersiz sendResponse(char const *yanıt) {

Serial.printf("Yanıt Gönder: %s\n", yanıt);

bleuart.write(yanıt, strlen(yanıt)*sizeof(char));

}

Adım 3: Adım 3: Abajur Satın Alma

Adım 3: Abajur Satın Alma
Adım 3: Abajur Satın Alma
Adım 3: Abajur Satın Alma
Adım 3: Abajur Satın Alma

Adım 4: Adım 4: Hepsini Bir Araya Çekin

Önerilen: