สารบัญ:
- ขั้นตอนที่ 1: ขั้นตอนที่ 1: ประสานวงจร
- ขั้นตอนที่ 2: ขั้นตอนที่ 2: เขียนโค้ด
- ขั้นตอนที่ 3: ขั้นตอนที่ 3: ซื้อโป๊ะโคม
- ขั้นตอนที่ 4: ขั้นตอนที่ 4: ดึงมันทั้งหมดเข้าด้วยกัน
- ขั้นตอนที่ 5: ขั้นตอนที่ 5: การทำไพ่
วีดีโอ: ท้าทายจริงๆ: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
โลกสมัยใหม่ต้องการให้มนุษย์ก้าวออกจากร่างกายและใช้ชีวิตในโลกดิจิทัล
ด้วยรูปลักษณ์ของ Al และการแพร่กระจายของเทคโนโลยี ผู้คนต่างวางใจในเครื่องมากเกินไป และเชื่อว่ามันถูกต้องเสมอ
“จริงๆ” มีวัตถุประสงค์เพื่อเขย่าความไว้วางใจที่ผิดพลาดนี้ผ่านการสร้างการทดสอบเครื่องจับเท็จปลอม ผู้คนจะเชื่อได้ง่าย ๆ ว่าจริงๆ ใช้งานได้ แต่เมื่อให้คำตอบเท็จ มันจะสั่นคลอนความเชื่องมงายในเทคโนโลยี
ขั้นตอนที่ 1: ขั้นตอนที่ 1: ประสานวงจร
เนื่องจากงานของฉันมีไฟเพียงดวงเดียว จึงสามารถบัดกรีได้ง่ายมาก ปัญหาหลักอยู่ที่จุดเริ่มต้น ฉันประสานแสงสองดวง แต่ฉันไม่ได้ครอบคลุมส่วนการเปิดรับแสงทันที ดังนั้นเมื่อสายทั้งสองส่วนสัมผัสกัน มันสั้นออก
ขั้นตอนที่ 2: ขั้นตอนที่ 2: เขียนโค้ด
p.p1 {ระยะขอบ: 0.0px 0.0px 0.0px 0.0px; ความสูงของบรรทัด: 15.0px; แบบอักษร: 12.0px ครั้ง; สี: #000000; สีพื้นหลัง: #ffffff}
p.p2 {ระยะขอบ: 0.0px 0.0px 0.0px 0.0px; ความสูงของบรรทัด: 15.0px; แบบอักษร: 12.0px ครั้ง; สี: #000000; สีพื้นหลัง: #ffffff; ความสูงขั้นต่ำ: 14.0px} span.s1 {การจัดช่องไฟแบบอักษร: ไม่มี}
ขั้นตอนที่ 2: เขียนรหัส
/*********************************************************************
นี่คือตัวอย่างสำหรับโมดูล Bluefruit LE ที่ใช้ nRF52 ของเรา
เลือกได้แล้ววันนี้ที่ร้าน adafruit!
Adafruit ลงทุนเวลาและทรัพยากรในการจัดหารหัสโอเพนซอร์ซนี้
โปรดสนับสนุน Adafruit และฮาร์ดแวร์โอเพ่นซอร์สโดยการซื้อ
ผลิตภัณฑ์จากอดาฟรุ๊ต!
ใบอนุญาต MIT ตรวจสอบใบอนุญาตสำหรับข้อมูลเพิ่มเติม
ข้อความทั้งหมดด้านบนและหน้าจอเริ่มต้นด้านล่างต้องรวมอยู่ใน
การแจกจ่ายใด ๆ
*********************************************************************
/ ภาพสเก็ตช์นี้มีจุดประสงค์เพื่อใช้กับส่วนควบคุม NeoPixel
// พื้นผิวในแอปพลิเคชันมือถือ Bluefruit LE Connect ของ Adafruit
/
/ - รวบรวมและแฟลชสเก็ตช์นี้ไปที่ nRF52 Feather
// - เปิดแอป Bluefruit LE Connect
// - เปลี่ยนไปใช้ยูทิลิตี้ NeoPixel
// - คลิกปุ่ม 'เชื่อมต่อ' เพื่อสร้างการเชื่อมต่อและ
// ส่งข้อมูลเมตาเกี่ยวกับเลย์เอาต์พิกเซล
// - ใช้ยูทิลิตี้ NeoPixel เพื่ออัปเดตพิกเซลบนอุปกรณ์ของคุณ
/* หมายเหตุ: ร่างนี้จำเป็นต้องมี Adafruit_Neopixel เวอร์ชัน 1.1.0 เป็นอย่างน้อย !!! */
#รวม
#รวม
#รวม
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 /* พินที่ใช้ขับเคลื่อน NeoPixels */
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t ความกว้าง = 0;
uint8_t ความสูง = 0;
uint8_t ก้าว;
uint8_t ส่วนประกอบค่า;
บูลคือ400Hz;
ส่วนประกอบ uint8_t = 3; // มีเพียง 3 และ 4 เท่านั้นที่เป็นค่าที่ถูกต้อง
Adafruit_NeoPixel นีโอพิกเซล = Adafruit_NeoPixel();
// บริการ BLE
เบลดฟู เบลดฟู;
BLEDis bledis;
BLEUart bleuart;
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin(115200);
ในขณะที่ (!Serial) ล่าช้า(10); // สำหรับ nrf52840 ที่มี usb. ดั้งเดิม
Serial.println ("การทดสอบ Adafruit Bluefruit Neopixel");
Serial.println("--------------------------------");
Serial.println();
Serial.println("โปรดเชื่อมต่อโดยใช้แอปพลิเคชัน Bluefruit Connect LE");
// Config Neopixels
neopixel.begin();
// เริ่มต้นบลูฟรุต
บลูฟรุ๊ต.begin();
บลูฟรุต.setTxPower(4); // ตรวจสอบ bluefruit.h สำหรับค่าที่รองรับ
Bluefruit.setName("Bluefruit52");
Bluefruit. Periph.setConnectCallback(connect_callback);
// เพื่อให้สอดคล้อง OTA DFU ควรเพิ่มก่อนถ้ามีอยู่
bledfu.begin();
// กำหนดค่าและเริ่มบริการข้อมูลอุปกรณ์
bledis.setManufacturer("อุตสาหกรรมอดาฟรุต");
bledis.setModel("บลูฟรุต Feather52");
bledis.begin();
// กำหนดค่าและเริ่มบริการ BLE UART
bleuart.begin();
// ตั้งค่าและเริ่มโฆษณา
startAdv();
}
เป็นโมฆะ startAdv (เป็นโมฆะ)
{
// แพ็กเก็ตโฆษณา
Bluefruit. Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
บลูฟรุ๊ต. Advertising.addTxPower();
// รวม uuid bleuart 128 บิต
บลูฟรุต.โฆษณา.addService(bleuart);
// แพ็กเก็ตการตอบสนองการสแกนรอง (ตัวเลือก)
// เนื่องจากไม่มีที่ว่างสำหรับ 'ชื่อ' ในแพ็กเก็ตโฆษณา
บลูฟรุต. ScanResponse.addName();
/* เริ่มโฆษณา
* - เปิดใช้งานการโฆษณาอัตโนมัติหากไม่ได้เชื่อมต่อ
* - ช่วงเวลา: โหมดเร็ว = 20 ms, โหมดช้า = 152.5 ms
* - หมดเวลาสำหรับโหมดเร็วคือ 30 วินาที
* - เริ่ม (หมดเวลา) โดยหมดเวลา = 0 จะโฆษณาตลอดไป (จนกว่าจะเชื่อมต่อ)
*
* สำหรับช่วงโฆษณาที่แนะนำ
*
*/
Bluefruit. Advertising.restartOnDisconnect(จริง);
บลูฟรุ๊ต. Advertising.setInterval(32, 244); // ในหน่วย 0.625 ms
บลูฟรุ๊ต. Advertising.setFastTimeout(30); // จำนวนวินาทีในโหมดเร็ว
Bluefruit. Advertising.start(0); // 0 = อย่าหยุดโฆษณาหลังจากผ่านไป n วินาที
}
เป็นโมฆะ connect_callback (uint16_t conn_handle)
{
// รับการอ้างอิงถึงการเชื่อมต่อปัจจุบัน
การเชื่อมต่อ BLEConnection* = Bluefruit. Connection (conn_handle);
ถ่าน central_name[32] = { 0 };
การเชื่อมต่อ ->getPeerName(central_name, sizeof(central_name));
Serial.print("เชื่อมต่อกับ");
Serial.println (central_name);
Serial.println("โปรดเลือกแท็บ 'Neopixels' คลิก 'เชื่อมต่อ' และสนุกไปกับมัน");
}
วงเป็นโมฆะ ()
{
// Echo ได้รับข้อมูล
ถ้า (Bluefruit.connected() && bleuart.notifyEnabled())
{
คำสั่ง int = bleuart.read();
สวิตช์ (คำสั่ง) {
กรณี 'V': { // รับเวอร์ชัน
commandVersion();
หยุดพัก;
}
case 'S': { // ตั้งค่าขนาด, ส่วนประกอบ, stride…
commandSetup();
หยุดพัก;
}
ตัวพิมพ์ 'C': { // ล้างด้วยสี
commandClearColor();
หยุดพัก;
}
กรณี 'B': { // ตั้งค่าความสว่าง
commandSetBrightness();
หยุดพัก;
}
กรณี 'P': { // ตั้งค่า Pixel
commandSetPixel();
หยุดพัก;
}
กรณี 'ฉัน': { // รับภาพใหม่
commandImage();
หยุดพัก;
}
}
}
}
เป็นโมฆะ swapBuffers()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
สำหรับ (int j = 0; j <ความสูง; j++)
{
สำหรับ (int i = 0; i < width; i++) {
ถ้า (ส่วนประกอบ == 3) {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2)));
}
อื่น {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+=ส่วนประกอบ;
pixelIndex++;
}
pixelIndex += ก้าว - ความกว้าง; // ย้าย pixelIndex ไปที่แถวถัดไป (คำนึงถึงการก้าวย่าง)
}
neopixel.show();
}
เป็นโมฆะ commandVersion () {
Serial.println(F("Command: Version check"));
sendResponse(NEOPIXEL_VERSION_STRING);
}
เป็นโมฆะ commandSetup () {
Serial.println(F("Command: Setup"));
ความกว้าง = bleuart.read();
ความสูง = bleuart.read();
ก้าว = bleuart.read();
componentValue = bleuart.read();
is400Hz = bleuart.read();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz ? NEO_KHZ400: NEO_KHZ800);
ส่วนประกอบ = (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", ความกว้าง, ความสูง);
Serial.printf("\tstride: %d\n", ก้าว);
Serial.printf("\tpixelType %d\n", pixelType);
Serial.printf("\tcomponents: %d\n", ส่วนประกอบ);
ถ้า (pixelBuffer != NULL) {
ลบ pixelBuffer;
}
uint32_t ขนาด = กว้าง*สูง;
pixelBuffer = uint8_t ใหม่ [ขนาด*ส่วนประกอบ];
neopixel.updateLength(ขนาด);
neopixel.updateType(pixelType);
neopixel.setPin (PIN);
// เสร็จแล้ว
sendResponse("ตกลง");
}
เป็นโมฆะ commandSetBrightness () {
Serial.println(F("คำสั่ง: SetBrightness"));
// อ่านค่า
uint8_t ความสว่าง = bleuart.read();
// ตั้งค่าความสว่าง
neopixel.setBrightness(ความสว่าง);
// รีเฟรชพิกเซล
สลับบัฟเฟอร์ ();
// เสร็จแล้ว
sendResponse("ตกลง");
}
เป็นโมฆะ commandClearColor() {
Serial.println(F("คำสั่ง: ClearColor"));
// อ่านสี
uint8_t สี [MAXCOMPONENTS];
สำหรับ (int j = 0; j <ส่วนประกอบ;) {
ถ้า (bleuart.available ()) {
สี[j] = bleuart.read();
เจ++;
}
}
// ตั้งค่า led ทั้งหมดเป็นสี
ขนาด int = กว้าง * สูง;
uint8_t *base_addr = pixelBuffer;
สำหรับ (int i = 0; i < size; i++) {
สำหรับ (int j = 0; j <ส่วนประกอบ j++) {
*base_addr = สี[j];
base_addr++;
}
}
// สลับบัฟเฟอร์
Serial.println(F("เคลียร์สีเสร็จแล้ว"));
สลับบัฟเฟอร์ ();
ถ้า (ส่วนประกอบ == 3) {
Serial.printf("\tclear (%d, %d, %d)\n", สี[0], สี[1], สี[2]);
}
อื่น {
Serial.printf("\tclear (%d, %d, %d, %d)\n", สี[0], สี[1], สี[2], สี[3]);
}
// เสร็จแล้ว
sendResponse("ตกลง");
}
เป็นโมฆะ commandSetPixel () {
Serial.println(F("คำสั่ง: SetPixel"));
// อ่านตำแหน่ง
uint8_t x = bleuart.read();
uint8_t y = bleuart.read();
// อ่านสี
uint32_t pixelOffset = y*width+x;
uint32_t pixelDataOffset = pixelOffset*ส่วนประกอบ;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
สำหรับ (int j = 0; j <ส่วนประกอบ;) {
ถ้า (bleuart.available ()) {
*base_addr = bleuart.read();
base_addr++;
เจ++;
}
}
// กำหนดสี
uint32_t neopixelIndex = y*stride+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t สี;
ถ้า (ส่วนประกอบ == 3) {
สี = neopixel. Color(*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf("\tcolor (%d, %d, %d)\n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
อื่น {
สี = 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, สี);
neopixel.show();
// เสร็จแล้ว
sendResponse("ตกลง");
}
โมฆะ commandImage () {
Serial.printf("คำสั่ง: รูปภาพ %dx%d, %d, %d\n", ความกว้าง, ความสูง, ส่วนประกอบ, ก้าว);
// รับบัฟเฟอร์พิกเซลใหม่
ขนาด int = กว้าง * สูง;
uint8_t *base_addr = pixelBuffer;
สำหรับ (int i = 0; i < size; i++) {
สำหรับ (int j = 0; j <ส่วนประกอบ;) {
ถ้า (bleuart.available ()) {
*base_addr = bleuart.read();
base_addr++;
เจ++;
}
}
/*
ถ้า (ส่วนประกอบ == 3) {
ดัชนี uint32_t = i*ส่วนประกอบ;
Serial.printf("\tp%d (%d, %d, %d)\n", i, pixelBuffer[index], pixelBuffer[index+1], pixelBuffer[index+2]);
}
*/
}
// สลับบัฟเฟอร์
Serial.println(F("รูปภาพที่ได้รับ"));
สลับบัฟเฟอร์ ();
// เสร็จแล้ว
sendResponse("ตกลง");
}
เป็นโมฆะ sendResponse (อักขระ const * ตอบกลับ) {
Serial.printf("ส่งคำตอบ: %s\n", ตอบกลับ);
bleuart.write(การตอบสนอง, strlen(การตอบสนอง)*sizeof(char));
}
ขั้นตอนที่ 3: ขั้นตอนที่ 3: ซื้อโป๊ะโคม
ขั้นตอนที่ 4: ขั้นตอนที่ 4: ดึงมันทั้งหมดเข้าด้วยกัน
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง