Mục lục:

Thực sự thách thức: 5 bước
Thực sự thách thức: 5 bước

Video: Thực sự thách thức: 5 bước

Video: Thực sự thách thức: 5 bước
Video: Chuyện gì xảy ra khi bạn nhịn đói liên tục 1 tuần 2024, Tháng bảy
Anonim
Image
Image
Bước 1: Hàn mạch
Bước 1: Hàn mạch

Thế giới hiện đại đòi hỏi con người phải bước ra khỏi vật chất và sống trong kỹ thuật số.

Với sự xuất hiện của Al và sự nở rộ của công nghệ con người đã đặt quá nhiều niềm tin vào chiếc máy và tin rằng nó luôn đúng.

“Thực sự” nhằm mục đích làm lung lay lòng tin sai lầm này thông qua việc tạo ra một bài kiểm tra phát hiện nói dối giả. Mọi người sẽ dễ dàng tin rằng Thực sự đang hoạt động nhưng khi những câu trả lời sai được cung cấp, nó sẽ làm lung lay niềm tin mù quáng của họ vào công nghệ.

Bước 1: Bước 1: Hàn mạch

Vì các tác phẩm của tôi chỉ có một đèn chiếu sáng nên rất dễ bị hàn. Vấn đề chính là lúc đầu, tôi hàn hai ánh sáng, nhưng tôi đã không che phần tiếp xúc ngay lập tức. Vì vậy, khi hai phần dây tiếp xúc với nhau. Nó rút gọn.

Bước 2: Bước 2: Viết mã

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; chiều cao dòng: 15.0px; phông chữ: 12.0px Lần; màu: # 000000; background-color: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; chiều cao dòng: 15.0px; phông chữ: 12.0px Lần; màu: # 000000; màu nền: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Bước 2: Viết mã

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

Đây là một ví dụ cho các mô-đun Bluefruit LE dựa trên nRF52 của chúng tôi

Chọn một chiếc ngay hôm nay tại cửa hàng adafruit!

Adafruit đầu tư thời gian và tài nguyên để cung cấp mã nguồn mở này, vui lòng hỗ trợ Adafruit và phần cứng mã nguồn mở bằng cách mua

sản phẩm từ Adafruit!

Giấy phép MIT, kiểm tra LICENSE để biết thêm thông tin

Tất cả văn bản ở trên và màn hình giật gân bên dưới phải được đưa vào

bất kỳ sự phân phối lại nào

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

/ Bản phác thảo này được thiết kế để sử dụng với điều khiển NeoPixel

// bề mặt trong ứng dụng di động Bluefruit LE Connect của Adafruit.

/

/ - Biên dịch và flash bản phác thảo này sang nRF52 Feather

// - Mở ứng dụng Bluefruit LE Connect

// - Chuyển sang tiện ích NeoPixel

// - Nhấp vào nút 'kết nối' để thiết lập kết nối và

// gửi siêu dữ liệu về bố cục pixel

// - Sử dụng tiện ích NeoPixel để cập nhật pixel trên thiết bị của bạn

/ * LƯU Ý: Bản phác thảo này yêu cầu ít nhất phiên bản 1.1.0 của Adafruit_Neopixel !!! * /

#bao gồm

#bao gồm

#bao gồm

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Pin được sử dụng để điều khiển NeoPixels * /

#define MAXCOMPONENTS 4

uint8_t * pixelBuffer = NULL;

uint8_t width = 0;

uint8_t height = 0;

uint8_t sải bước;

uint8_t componentsValue;

bool là 400Hz;

uint8_t các thành phần = 3; // chỉ 3 và 4 là giá trị hợp lệ

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// Dịch vụ BLE

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

void setup ()

{

Serial.begin (115200);

while (! Serial) delay (10); // cho nrf52840 với usb gốc

Serial.println ("Thử nghiệm Neopixel của quả Adafruit Bluefruit");

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

Serial.println ();

Serial.println ("Vui lòng kết nối bằng ứng dụng Bluefruit Connect LE");

// Định cấu hình Neopixels

neopixel.begin ();

// Init Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Kiểm tra bluefruit.h để biết các giá trị được hỗ trợ

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Để nhất quán OTA DFU nên được thêm vào đầu tiên nếu nó tồn tại

bledfu.begin ();

// Định cấu hình và khởi động dịch vụ thông tin thiết bị

bledis.setManosystemurer ("Adafruit Industries");

bledis.setModel ("Bluefruit Feather52");

bledis.begin ();

// Định cấu hình và khởi động dịch vụ BLE UART

bleuart.begin ();

// Thiết lập và bắt đầu quảng cáo

startAdv ();

}

void startAdv (void)

{

// Gói quảng cáo

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Bao gồm uuid bleuart 128-bit

Bluefruit. Advertising.addService (bleuart);

// Gói phản hồi quét thứ cấp (tùy chọn)

// Vì không có chỗ cho 'Tên' trong gói Quảng cáo

Bluefruit. ScanResponse.addName ();

/ * Bắt đầu quảng cáo

* - Bật quảng cáo tự động nếu bị ngắt kết nối

* - Khoảng thời gian: chế độ nhanh = 20 ms, chế độ chậm = 152,5 ms

* - Thời gian chờ cho chế độ nhanh là 30 giây

* - Start (hết giờ) với timeout = 0 sẽ quảng cáo mãi mãi (cho đến khi kết nối)

*

* Đối với khoảng thời gian quảng cáo được đề xuất

*

*/

Bluefruit. Advertising.restartOnDisconnect (true);

Bluefruit. Advertising.setInterval (32, 244); // theo đơn vị 0,625 ms

Bluefruit. Advertising.setFastTimeout (30); // số giây ở chế độ nhanh

Bluefruit. Advertising.start (0); // 0 = Không dừng quảng cáo sau n giây

}

void connect_callback (uint16_t conn_handle)

{

// Lấy tham chiếu đến kết nối hiện tại

BLEConnection * kết nối = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

connection-> getPeerName (tên_thường_trọng, sizeof (tên_tập_trung));

Serial.print ("Đã kết nối với");

Serial.println (tên_trung);

Serial.println ("Vui lòng chọn tab 'Neopixels', nhấp vào 'Kết nối' và vui chơi");

}

void loop ()

{

// Tiếng vọng dữ liệu đã nhận

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

{

lệnh int = bleuart.read ();

switch (lệnh) {

case 'V': {// Lấy phiên bản

commandVersion ();

nghỉ;

}

case 'S': {// Thiết lập kích thước, thành phần, bước đi…

commandSetup ();

nghỉ;

}

case 'C': {// Xóa với màu

commandClearColor ();

nghỉ;

}

case 'B': {// Đặt độ sáng

commandSetBrightness ();

nghỉ;

}

case 'P': {// Đặt Pixel

commandSetPixel ();

nghỉ;

}

case 'I': {// Nhận hình ảnh mới

commandImage ();

nghỉ;

}

}

}

}

void swapBuffers ()

{

uint8_t * base_addr = pixelBuffer;

int pixelIndex = 0;

for (int j = 0; j <height; j ++)

{

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

if (các thành phần == 3) {

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

}

khác {

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

}

base_addr + = các thành phần;

pixelIndex ++;

}

pixelIndex + = sải chân - chiều rộng; // Di chuyển pixelIndex sang hàng tiếp theo (có tính đến bước đi)

}

neopixel.show ();

}

void commandVersion () {

Serial.println (F ("Lệnh: Kiểm tra phiên bản"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

Serial.println (F ("Lệnh: Thiết lập"));

width = bleuart.read ();

chiều cao = bleuart.read ();

sải bước = bleuart.read ();

componentValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

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

component = (componentsValue == NEO_RGB || componentsValue == NEO_RBG || componentsValue == NEO_GRB || componentsValue == NEO_GBR || componentsValue == NEO_BRG || componentsValue == NEO_BGR)? 3: 4;

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

Serial.printf ("\ tstride:% d / n", bước đi);

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

Serial.printf ("\ tcomponents:% d / n", các thành phần);

if (pixelBuffer! = NULL) {

xóa pixelBuffer;

}

uint32_t size = width * height;

pixelBuffer = new uint8_t [kích thước * thành phần];

neopixel.updateLength (kích thước);

neopixel.updateType (pixelType);

neopixel.setPin (mã PIN);

// Xong

sendResponse ("Được");

}

void commandSetBrightness () {

Serial.println (F ("Lệnh: SetBrightness"));

// Đọc giá trị

uint8_t Bright = bleuart.read ();

// Đặt độ sáng

neopixel.setBrightness (độ sáng);

// Làm mới pixel

swapBuffers ();

// Xong

sendResponse ("Được");

}

void commandClearColor () {

Serial.println (F ("Lệnh: ClearColor"));

// Đọc màu

uint8_t màu [MAXCOMPONENTS];

for (int j = 0; j <thành phần;) {

if (bleuart.available ()) {

color [j] = bleuart.read ();

j ++;

}

}

// Đặt tất cả các đèn led thành màu

int size = width * height;

uint8_t * base_addr = pixelBuffer;

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

for (int j = 0; j <các thành phần; j ++) {

* base_addr = color [j];

base_addr ++;

}

}

// Hoán đổi bộ đệm

Serial.println (F ("Đã hoàn thành ClearColor"));

swapBuffers ();

if (các thành phần == 3) {

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

}

khác {

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

}

// Xong

sendResponse ("Được");

}

void commandSetPixel () {

Serial.println (F ("Lệnh: SetPixel"));

// Đọc vị trí

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Đọc màu

uint32_t pixelOffset = y * width + x;

uint32_t pixelDataOffset = pixelOffset * các thành phần;

uint8_t * base_addr = pixelBuffer + pixelDataOffset;

for (int j = 0; j <thành phần;) {

if (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Đặt màu

uint32_t neopixelIndex = y * sải + x;

uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t màu;

if (các thành phần == 3) {

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

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

}

khác {

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, màu);

neopixel.show ();

// Xong

sendResponse ("Được");

}

void commandImage () {

Serial.printf ("Lệnh: Hình ảnh% dx% d,% d,% d / n", chiều rộng, chiều cao, thành phần, sải chân);

// Nhận bộ đệm pixel mới

int size = width * height;

uint8_t * base_addr = pixelBuffer;

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

for (int j = 0; j <thành phần;) {

if (bleuart.available ()) {

* base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

if (các thành phần == 3) {

uint32_t index = i * các thành phần;

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

}

*/

}

// Hoán đổi bộ đệm

Serial.println (F ("Hình ảnh đã nhận"));

swapBuffers ();

// Xong

sendResponse ("Được");

}

void sendResponse (char const * response) {

Serial.printf ("Gửi phản hồi:% s / n", phản hồi);

bleuart.write (phản hồi, strlen (phản hồi) * sizeof (char));

}

Bước 3: Bước 3: Mua Chụp đèn

Bước 3: Mua chụp đèn
Bước 3: Mua chụp đèn
Bước 3: Mua chụp đèn
Bước 3: Mua chụp đèn

Bước 4: Bước 4: Kết hợp tất cả lại với nhau

Đề xuất: