สารบัญ:

ท้าทายจริงๆ: 5 ขั้นตอน
ท้าทายจริงๆ: 5 ขั้นตอน

วีดีโอ: ท้าทายจริงๆ: 5 ขั้นตอน

วีดีโอ: ท้าทายจริงๆ: 5 ขั้นตอน
วีดีโอ: เวลา 24 ชั่วโมง ของคนที่มีเป้าหมายชัด l พี่เก่ง @CREATIVETALK สิทธิพงศ์ ศิริมาศเกษม@GENGSittipong 2024, กรกฎาคม
Anonim
Image
Image
ขั้นตอนที่ 1: ประสานวงจร
ขั้นตอนที่ 1: ประสานวงจร

โลกสมัยใหม่ต้องการให้มนุษย์ก้าวออกจากร่างกายและใช้ชีวิตในโลกดิจิทัล

ด้วยรูปลักษณ์ของ 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: ซื้อโป๊ะโคม

ขั้นตอนที่ 3: การซื้อโป๊ะโคม
ขั้นตอนที่ 3: การซื้อโป๊ะโคม
ขั้นตอนที่ 3: ซื้อโป๊ะโคม
ขั้นตอนที่ 3: ซื้อโป๊ะโคม

ขั้นตอนที่ 4: ขั้นตอนที่ 4: ดึงมันทั้งหมดเข้าด้วยกัน

แนะนำ: