Mục lục:
- Bước 1: Bước 1: Hàn mạch
- Bước 2: Bước 2: Viết mã
- Bước 3: 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
- Bước 5: Bước 5: Làm thẻ chơi
Video: Thực sự thách thức: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
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 4: Bước 4: Kết hợp tất cả lại với nhau
Đề xuất:
Đường mòn bằng đá cẩm thạch: 11 bước
Đường chạy bằng đá cẩm thạch: Đây là hướng dẫn về đường chạy bằng đá cẩm thạch. Bạn có thể chuyển làn bằng cách nhấn nút
Cảm biến âm thanh và âm nhạc Trâm tinh thể thạch anh với Playground Circuit Express: 8 bước (có hình ảnh)
Âm thanh và âm nhạc. và một loạt các công cụ. Đây là nguyên mẫu, hoặc bản nháp đầu tiên, của
Pháo đá cẩm thạch cho Vật lý: 12 bước
Pháo bằng đá cẩm thạch cho Vật lý: Đây là hướng dẫn chế tạo một khẩu pháo bằng đá cẩm thạch. Được tạo ra bởi: Erin Hawkins và Evan Morris
Cảm biến mê cung bằng đá cẩm thạch Makey: 8 bước (có hình ảnh)
Makey Makey Marble Maze Sensor: Đây là một dự án đơn giản với mục tiêu là tạo ra một mê cung bằng đá cẩm thạch với các cảm biến làm bằng lá thiếc. Nguồn cung cấp rất đơn giản và hầu hết chúng bạn có thể tìm thấy xung quanh nhà
Làm thế nào để đáp ứng các thách thức của thiết kế cung cấp điện bằng công nghệ DC-DC: 3 bước
Làm thế nào để đáp ứng những thách thức của thiết kế cung cấp điện của DC-DC Technologies: Tôi sẽ phân tích cách thức đáp ứng thách thức của thiết kế cung cấp điện của DC-DC Technologies. sức mạnh. Trong các thiết bị di động, hiệu suất cao hơn