جدول المحتويات:

التحدي الحقيقي: 5 خطوات
التحدي الحقيقي: 5 خطوات

فيديو: التحدي الحقيقي: 5 خطوات

فيديو: التحدي الحقيقي: 5 خطوات
فيديو: تحدي 5 خطوات للأمام! || مقالب طريفة ومواقف محرجة 2024, يوليو
Anonim
Image
Image
الخطوة 1: لحام الدائرة
الخطوة 1: لحام الدائرة

يتطلب العالم الحديث من البشر الخروج من الواقع والعيش داخل العالم الرقمي.

مع ظهور Al وانتشار التكنولوجيا ، وضع الناس ثقة كبيرة في الماكينة ويعتقدون أنها صحيحة دائمًا.

يهدف "Really" إلى زعزعة هذه الثقة الزائفة من خلال إنشاء اختبار وهمي لكشف الكذب. سوف يعتقد الناس بسهولة أن Really تعمل ولكن عندما يتم تقديم إجابات خاطئة ، فإنها ستهز ثقتهم العمياء في التكنولوجيا.

الخطوة 1: الخطوة 1: لحام الدائرة

لأن أعمالي بها ضوء واحد فقط ، لذلك من السهل جدًا لحامها. تكمن المشكلة الرئيسية في البداية ، فقد جندت مصباحين ، لكنني لم أغطي جزء التعرض على الفور. لذلك عندما يتلامس الجزءان من الأسلاك معًا. انها قصيرة خارج.

الخطوة 2: الخطوة 2: اكتب الكود

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px؛ ارتفاع الخط: 15.0 بكسل ؛ الخط: 12.0 بكسل تايمز ؛ اللون: # 000000 ؛ لون الخلفية: #ffffff}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px؛ ارتفاع الخط: 15.0 بكسل ؛ الخط: 12.0 بكسل تايمز ؛ اللون: # 000000 ؛ لون الخلفية: #ffffff ؛ الحد الأدنى للارتفاع: 14.0 بكسل} span.s1 {font-kerning: none}

الخطوة الثانية: اكتب الكود

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

هذا مثال على وحدات Bluefruit LE المستندة إلى nRF52

اختر واحدة اليوم في متجر Adafruit!

تستثمر Adafruit الوقت والموارد في توفير هذا الكود مفتوح المصدر ،

يرجى دعم Adafruit والأجهزة مفتوحة المصدر عن طريق الشراء

منتجات من Adafruit!

ترخيص MIT ، تحقق من LICENSE لمزيد من المعلومات

يجب تضمين كل النص أعلاه وشاشة البداية أدناه في

أي إعادة توزيع

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

/ هذا الرسم التخطيطي مخصص للاستخدام مع عنصر التحكم NeoPixel

// السطح في تطبيق الهاتف المحمول Bluefruit LE Connect الخاص بـ Adafruit.

/

/ - قم بتجميع هذا الرسم التخطيطي وميضه إلى nRF52 Feather

// - افتح تطبيق Bluefruit LE Connect

// - قم بالتبديل إلى الأداة المساعدة NeoPixel

// - انقر فوق الزر "اتصال" لإنشاء اتصال و

// إرسال البيانات الوصفية حول تخطيط البكسل

// - استخدم الأداة المساعدة NeoPixel لتحديث وحدات البكسل على جهازك

/ * ملاحظة: هذا الرسم التخطيطي مطلوب على الأقل الإصدار 1.1.0 من Adafruit_Neopixel !!! * /

#يشمل

#يشمل

#يشمل

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * رقم التعريف الشخصي المستخدم لقيادة NeoPixels * /

# تعريف ماكس المكونات 4

uint8_t * pixelBuffer = NULL ؛

uint8_t العرض = 0 ؛

ارتفاع uint8_t = 0 ؛

uint8_t خطوة.

مكونات uint8_tValue ؛

منطقي هو 400 هرتز ؛

مكونات uint8_t = 3 ؛ // فقط 3 و 4 قيمتان صالحتان

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel () ؛

// خدمة BLE

بليدفو بليدفو

بليديس بليديس

بليوارت بليوارت

الإعداد باطل()

{

Serial.begin (115200) ؛

بينما (! المسلسل) تأخير (10) ؛ // لـ nrf52840 مع USB أصلي

Serial.println ("اختبار Adafruit Bluefruit Neopixel") ؛

Serial.println ("--------------------------------") ؛

Serial.println () ،

Serial.println ("الرجاء الاتصال باستخدام تطبيق Bluefruit Connect LE") ؛

// تكوين Neopixels

neopixel.begin () ،

// التهيئة Bluefruit

Bluefruit.begin () ؛

Bluefruit.setTxPower (4) ؛ // تحقق من bluefruit.h لمعرفة القيم المدعومة

Bluefruit.setName ("Bluefruit52") ؛

Bluefruit. Periph.setConnectCallback (connect_callback) ؛

// لكي تكون متسقة ، يجب إضافة OTA DFU أولاً إذا كانت موجودة

bledfu.begin () ،

// تكوين وبدء تشغيل خدمة معلومات الجهاز

bledis.setManufacturer ("Adafruit Industries") ؛

bledis.setModel ("Bluefruit Feather52") ؛

bledis.begin () ،

// تكوين وبدء خدمة BLE UART

bleuart.begin () ،

// إعداد وابدأ الإعلان

startAdv () ،

}

بداية باطلة

{

// حزمة إعلانية

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE) ؛

Bluefruit. Advertising.addTxPower () ،

// تضمين uuid 128 بت لـ bleuart

Bluefruit. Advertising.addService (بليوارت) ؛

// حزمة استجابة المسح الثانوي (اختياري)

// نظرًا لعدم وجود مساحة لـ "الاسم" في حزمة الإعلان

Bluefruit. ScanResponse.addName () ،

/ * ابدأ الإعلان

* - تمكين الإعلان التلقائي في حالة قطع الاتصال

* - الفاصل الزمني: الوضع السريع = 20 مللي ثانية ، الوضع البطيء = 152.5 مللي ثانية

* - مهلة الوضع السريع 30 ثانية

* - البدء (المهلة) مع انتهاء المهلة = 0 سيتم الإعلان إلى الأبد (حتى يتم الاتصال)

*

* لفترة الإعلان الموصى بها

*

*/

Bluefruit. Advertising.restartOnDisconnect (صحيح) ؛

Bluefruit. Advertising.setInterval (32 ، 244) ؛ // في وحدة 0.625 مللي ثانية

Bluefruit. Advertising.setFastTimeout (30) ؛ // عدد الثواني في الوضع السريع

Bluefruit. Advertising.start (0) ؛ // 0 = لا تتوقف عن الإعلان بعد n ثانية

}

connect_callback باطل (uint16_t conn_handle)

{

// احصل على المرجع للاتصال الحالي

BLEConnection * connection = Bluefruit. Connection (conn_handle) ؛

char central_name [32] = {0} ؛

connect-> getPeerName (اسم_المركز ، sizeof (اسم_المركز)) ؛

Serial.print ("متصل بـ") ؛

Serial.println (اسم_المركزية) ؛

Serial.println ("الرجاء تحديد علامة التبويب" Neopixels "، انقر فوق" اتصال "واستمتع بوقتك") ؛

}

حلقة فارغة()

{

// تلقى صدى البيانات

إذا (Bluefruit.connected () && bleuart.notifyEnabled ())

{

الأمر int = bleuart.read () ؛

التبديل (الأمر) {

الحالة "V": {// Get Version

commandVersion () ؛

استراحة؛

}

الحالة 'S': {// أبعاد الإعداد ، المكونات ، الخطوة …

commandSetup () ،

استراحة؛

}

الحالة "C": {// مسح باللون

commandClearColor () ،

استراحة؛

}

الحالة "ب": {// ضبط السطوع

commandSetBrightness () ،

استراحة؛

}

الحالة "P": {// Set Pixel

commandSetPixel () ؛

استراحة؛

}

الحالة 'I': {// Receive new image

commandImage () ؛

استراحة؛

}

}

}

}

مقايضة باطلة

{

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 () ،

}

إصدار أمر باطل () {

Serial.println (F ("الأمر: التحقق من الإصدار")) ؛

sendResponse (NEOPIXEL_VERSION_STRING) ،

}

أمر باطل الإعداد () {

Serial.println (F ("Command: Setup")) ؛

العرض = bleuart.read () ؛

الارتفاع = bleuart.read () ؛

stride = bleuart.read () ؛

المكوناتValue = bleuart.read () ،

is400Hz = bleuart.read () ،

neoPixelType pixelType ؛

pixelType = مكونات القيمة + (is400Hz؟ NEO_KHZ400: NEO_KHZ800) ؛

المكونات = (مكونات القيمة == NEO_RGB || مكونات القيمة == NEO_RBG || مكونات القيمة == NEO_GRB || قيمة المكونات == NEO_GBR || قيمة المكونات == NEO_BRG || المكونات القيمة == NEO_BGR)؟ 3: 4

Serial.printf ("\ t الحجم:٪ dx٪ d / n" ، العرض ، الارتفاع) ؛

Serial.printf ("\ tstride:٪ d / n"، خطوة)؛

Serial.printf ("\ tpixelType٪ d / n" ، نوع البكسل) ؛

Serial.printf ("\ t المكونات:٪ d / n" ، مكونات) ؛

إذا (pixelBuffer! = NULL) {

حذف pixelBuffer ؛

}

uint32_t size = العرض * الارتفاع ؛

pixelBuffer = uint8_t جديدة [الحجم * المكونات] ؛

neopixel.updateLength (الحجم) ؛

neopixel.updateType (pixelType) ،

neopixel.setPin (PIN) ؛

// منتهي

sendResponse ("موافق") ؛

}

أمر باطل SetBrightness () {

Serial.println (F ("Command: SetBrightness")) ؛

// قراءة القيمة

uint8_t السطوع = bleuart.read () ،

// ضبط السطوع

neopixel.setBrightness (السطوع) ؛

// تحديث البكسل

swapBuffers () ،

// منتهي

sendResponse ("موافق") ؛

}

أمر باطل ClearColor () {

Serial.println (F ("Command: ClearColor")) ؛

// اقرأ اللون

uint8_t color [MAXCOMPONENTS] ؛

لـ (int j = 0 ؛ j <المكونات ؛) {

إذا (bleuart.available ()) {

color [j] = bleuart.read () ؛

ي ++ ؛

}

}

// ضبط كل المصابيح على اللون

حجم int = العرض * الارتفاع ؛

uint8_t * base_addr = pixelBuffer ؛

لـ (int i = 0 ؛ i <size ؛ i ++) {

لـ (int j = 0 ؛ j <المكونات ؛ j ++) {

* base_addr = color [j] ؛

Base_addr ++ ؛

}

}

// تبديل المخازن المؤقتة

Serial.println (F ("ClearColor مكتمل")) ؛

swapBuffers () ،

إذا (المكونات == 3) {

Serial.printf ("\ tclear (٪ d،٪ d،٪ d) n"، color [0]، color [1]، color [2])؛

}

آخر {

Serial.printf ("\ t Clear (٪ d،٪ d،٪ d،٪ d) n"، color [0]، color [1]، color [2]، color [3])؛

}

// منتهي

sendResponse ("موافق") ؛

}

أمر باطل SetPixel () {

Serial.println (F ("Command: SetPixel")) ؛

// قراءة الموقف

uint8_t x = bleuart.read () ؛

uint8_t y = bleuart.read () ؛

// اقرأ الألوان

uint32_t pixelOffset = y * العرض + 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 ("\ t اللون (٪ d ،٪ d ،٪ d) n" ، * pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2)) ؛

}

آخر {

اللون = neopixel. Color (* pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2) ، * (pixelBufferPointer + 3)) ؛

Serial.printf ("\ t color (٪ d،٪ d،٪ d،٪ d) n"، * pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2) ، * (pixelBufferPointer + 3)) ؛

}

neopixel.setPixelColor (neopixelIndex ، اللون) ؛

neopixel.show () ،

// منتهي

sendResponse ("موافق") ؛

}

أمر باطلالصورة () {

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 index = i * المكونات ؛

Serial.printf ("\ tp٪ d (٪ d،٪ d،٪ d) n"، i، pixelBuffer [index]، pixelBuffer [index + 1]، pixelBuffer [index + 2])؛

}

*/

}

// تبديل المخازن المؤقتة

Serial.println (F ("تم استلام الصورة")) ؛

swapBuffers () ،

// منتهي

sendResponse ("موافق") ؛

}

sendResponse باطلة (استجابة char const *) {

Serial.printf ("إرسال استجابة:٪ s / n" ، استجابة) ؛

bleuart.write (response ، strlen (response) * sizeof (char)) ؛

}

الخطوة 3: الخطوة 3: شراء عاكس الضوء

الخطوة 3: شراء عاكس الضوء
الخطوة 3: شراء عاكس الضوء
الخطوة 3: شراء عاكس الضوء
الخطوة 3: شراء عاكس الضوء

الخطوة 4: Step4: اسحبها جميعًا معًا

موصى به: