Betul-betul Cabaran: 5 Langkah
Betul-betul Cabaran: 5 Langkah
Anonim
Image
Image
Langkah 1: Selesaikan Litar
Langkah 1: Selesaikan Litar

Dunia moden memerlukan manusia melangkah keluar dari fizikal dan hidup dalam digital.

Dengan penampilan Al dan percambahan teknologi, orang terlalu mempercayai mesin dan mempercayainya selalu betul.

"Betul" dimaksudkan untuk menggoyahkan kepercayaan palsu ini melalui penciptaan ujian pengesan pembohongan palsu. Orang akan mudah percaya bahawa Benar-benar berfungsi tetapi apabila jawapan palsu diberikan, ia akan menggoyahkan kepercayaan mereka terhadap teknologi.

Langkah 1: Langkah 1: Memateri Litar

Oleh kerana karya saya hanya mempunyai satu cahaya, jadi sangat mudah untuk disolder. Masalah utama adalah pada awalnya, saya menyolder dua cahaya, tetapi saya langsung tidak menutup bahagian pendedahan. Oleh itu, apabila kedua-dua bahagian wayar bersentuhan. Ia pendek.

Langkah 2: Langkah 2: Tulis Kod

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; ketinggian garisan: 15.0 piksel; fon: 12.0px Kali; warna: # 000000; warna latar: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; ketinggian garisan: 15.0 piksel; fon: 12.0px Kali; warna: # 000000; warna latar: #ffffff; ketinggian min: 14.0px} span.s1 {font-kerning: none}

Langkah 2: Tulis Kod

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

Ini adalah contoh untuk modul Bluefruit LE berasaskan nRF52 kami

Pilih hari ini di kedai iklan!

Adafruit melaburkan masa dan sumber yang menyediakan kod sumber terbuka ini, tolong sokong Adafruit dan perkakasan sumber terbuka dengan membeli

produk dari Adafruit!

Lesen MIT, periksa LESEN untuk maklumat lebih lanjut

Semua teks di atas, dan skrin percikan di bawah mesti disertakan dalam

sebarang pengagihan semula

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

/ Sketsa ini dimaksudkan untuk digunakan dengan alat kawalan NeoPixel

// permukaan dalam aplikasi mudah alih Adelruit's Bluefruit LE Connect.

/

/ - Susun dan pasangkan lakaran ini ke Bulu nRF52

// - Buka aplikasi Bluefruit LE Connect

// - Beralih ke utiliti NeoPixel

// - Klik butang 'sambung' untuk membuat sambungan dan

// hantar meta-data mengenai susun atur piksel

// - Gunakan utiliti NeoPixel untuk mengemas kini piksel pada peranti anda

/ * CATATAN: Lakaran ini memerlukan sekurang-kurangnya versi 1.1.0 Adafruit_Neopixel !!! * /

#sertakan

#sertakan

#sertakan

#tentukan NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Pin yang digunakan untuk menggerakkan NeoPixels * /

#menentukan MAXKOMPONEN 4

uint8_t * pixelBuffer = NULL;

uint8_t lebar = 0;

uint8_t tinggi = 0;

uint8_t langkah;

uint8_t komponenNilai;

bool is400Hz;

komponen uint8_t = 3; // hanya 3 dan 4 adalah nilai yang sah

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// Perkhidmatan BLE

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

persediaan tidak sah ()

{

Serial.begin (115200);

sementara (! Serial) kelewatan (10); // untuk nrf52840 dengan usb asli

Serial.println ("Adafruit Bluefruit Neopixel Test");

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

Bersiri.println ();

Serial.println ("Sila sambungkan menggunakan aplikasi Bluefruit Connect LE");

// Konfigurasi Neopixels

neopixel.begin ();

// Init Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Periksa bluefruit.h untuk nilai yang disokong

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Untuk menjadi konsisten OTA DFU harus ditambahkan terlebih dahulu jika ada

bledfu.begin ();

// Konfigurasikan dan Mulakan Perkhidmatan Maklumat Peranti

bledis.setManufacturer ("Adafruit Industries");

bledis.setModel ("Bluefruit Feather52");

bledis.begin ();

// Konfigurasikan dan mulakan perkhidmatan BLE UART

bleuart.begin ();

// Siapkan dan mulakan pengiklanan

mulaAdv ();

}

kekosongan permulaanAdv (kekosongan)

{

// Paket iklan

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Sertakan bleuart 128-bit uuid

Bluefruit. Advertising.addService (bleuart);

// Paket Respons Imbasan Sekunder (pilihan)

// Oleh kerana tidak ada ruang untuk 'Nama' dalam paket Iklan

Bluefruit. ScanResponse.addName ();

/ * Mula Iklan

* - Aktifkan iklan automatik jika terputus

* - Selang: mod pantas = 20 ms, mod perlahan = 152.5 ms

* - Waktu tamat untuk mod pantas ialah 30 saat

* - Mulakan (timeout) dengan timeout = 0 akan beriklan selamanya (sehingga disambungkan)

*

* Untuk selang iklan yang disyorkan

*

*/

Bluefruit. Advertising.restartOnDisconnect (benar);

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

Bluefruit. Advertising.setFastTimeout (30); // bilangan saat dalam mod pantas

Bluefruit. Advertising.start (0); // 0 = Jangan berhenti beriklan selepas n saat

}

batal connect_callback (uint16_t conn_handle)

{

// Dapatkan rujukan untuk sambungan semasa

BLEConnection * sambungan = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

sambungan-> getPeerName (nama_pusat, sizeof (nama_pusat));

Serial.print ("Bersambung ke");

Serial.println (nama_pusat);

Serial.println ("Sila pilih tab 'Neopixels', klik 'Sambung' dan bersenang-senang");

}

gelung kosong ()

{

// Echo menerima data

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

{

perintah int = bleuart.read ();

beralih (arahan) {

case 'V': {// Dapatkan Versi

commandVersion ();

rehat;

}

case 'S': {// Siapkan dimensi, komponen, langkah…

arahanSetup ();

rehat;

}

casing 'C': {// Jelas dengan warna

commandClearColor ();

rehat;

}

kes 'B': {// Tetapkan Kecerahan

commandSetBrightness ();

rehat;

}

casing 'P': {// Tetapkan Pixel

commandSetPixel ();

rehat;

}

case 'I': {// Terima gambar baru

arahanImage ();

rehat;

}

}

}

}

pertukaran kosongBuffers ()

{

uint8_t * base_addr = pixelBuffer;

int pixelIndex = 0;

untuk (int j = 0; j <tinggi; j ++)

{

untuk (int i = 0; i <lebar; i ++) {

jika (komponen == 3) {

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

}

lain {

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

}

base_addr + = komponen;

pixelIndex ++;

}

pixelIndex + = langkah - lebar; // Pindahkan pixelIndex ke baris berikutnya (ambil kira langkah)

}

neopixel.show ();

}

perintah batalVersion () {

Serial.println (F ("Perintah: Pemeriksaan versi"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

perintah batalSetup () {

Serial.println (F ("Perintah: Persediaan"));

lebar = bleuart.read ();

tinggi = bleuart.read ();

stride = bleuart.read ();

componentsValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

komponen = (komponenValue == NEO_RGB || komponenValue == NEO_RBG || komponenValue == NEO_GRB || komponenValue == NEO_GBR || komponenValue == NEO_BRG || komponenValue == NEO_BGR)? 3: 4;

Serial.printf ("\ tsize:% dx% d / n", lebar, tinggi);

Serial.printf ("\ tstride:% d / n", langkah);

Serial.printf ("\ tpixelType% d / n", Jenis pixel);

Serial.printf ("\ tcomponents:% d / n", komponen);

jika (pixelBuffer! = NULL) {

padamkan pixelBuffer;

}

ukuran uint32_t = lebar * tinggi;

pixelBuffer = uint8_t baru [saiz * komponen];

neopixel.updateLength (saiz);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Selesai

sendResponse ("OK");

}

perintah batalSetBrightness () {

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

// Nilai baca

uint8_t brightness = bleuart.read ();

// Tetapkan kecerahan

neopixel.setBrightness (kecerahan);

// Muat semula piksel

swapBuffers ();

// Selesai

sendResponse ("OK");

}

perintah batalClearColor () {

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

// Baca warna

warna uint8_t [MAXKOMPONEN];

untuk (int j = 0; j <komponen;) {

jika (bleuart.available ()) {

warna [j] = bleuart.read ();

j ++;

}

}

// Tetapkan semua warna ke warna

saiz int = lebar * tinggi;

uint8_t * base_addr = pixelBuffer;

untuk (int i = 0; i <size; i ++) {

untuk (int j = 0; j <komponen; j ++) {

* base_addr = warna [j];

base_addr ++;

}

}

// Tukar penyangga

Serial.println (F ("ClearColor selesai"));

swapBuffers ();

jika (komponen == 3) {

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

}

lain {

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

}

// Selesai

sendResponse ("OK");

}

perintah batalSetPixel () {

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

// kedudukan membaca

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Baca warna

uint32_t pixelOffset = y * lebar + x;

komponen uint32_t pixelDataOffset = pixelOffset *;

uint8_t * base_addr = pixelBuffer + pixelDataOffset;

untuk (int j = 0; j <komponen;) {

jika (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Tetapkan warna

uint32_t neopixelIndex = y * langkah + x;

uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;

warna uint32_t;

jika (komponen == 3) {

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

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

}

lain {

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, warna);

neopixel.show ();

// Selesai

sendResponse ("OK");

}

batal perintahImage () {

Serial.printf ("Perintah: Gambar% dx% d,% d,% d / n", lebar, tinggi, komponen, langkah);

// Terima buffer piksel baru

saiz int = lebar * tinggi;

uint8_t * base_addr = pixelBuffer;

untuk (int i = 0; i <size; i ++) {

untuk (int j = 0; j <komponen;) {

jika (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

jika (komponen == 3) {

uint32_t index = i * komponen;

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

}

*/

}

// Tukar penyangga

Serial.println (F ("Gambar diterima"));

swapBuffers ();

// Selesai

sendResponse ("OK");

}

batal sendResponse (char const * tindak balas) {

Serial.printf ("Kirim Respons:% s / n", respons);

bleuart.write (tindak balas, strlen (tindak balas) * sizeof (char));

}

Langkah 3: Langkah 3: Membeli Kap Lampu

Langkah 3: Membeli Kap Lampu
Langkah 3: Membeli Kap Lampu
Langkah 3: Membeli Kap Lampu
Langkah 3: Membeli Kap Lampu

Langkah 4: Langkah 4: Tarik Semua Bersama

Disyorkan: