Բովանդակություն:
- Քայլ 1: Քայլ 1: oldոդել սխեման
- Քայլ 2: Քայլ 2: Գրեք ծածկագիրը
- Քայլ 3: Քայլ 3. Գնել լուսամփոփ
- Քայլ 4: Քայլ 4. Քաշեք այն բոլորը միասին
- Քայլ 5. Քայլ 5. Խաղաթղթեր պատրաստելը
Video: Իսկապես մարտահրավեր. 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Worldամանակակից աշխարհը մարդկանցից պահանջում է դուրս գալ ֆիզիկականից և ապրել թվայնության սահմաններում:
Al- ի հայտնվելով և տեխնոլոգիայի տարածմամբ մարդիկ չափազանց մեծ վստահություն են տալիս մեքենային և կարծում են, որ այն միշտ ճիշտ է:
«Իսկապես» -ը նպատակ ունի ցնցել այս կեղծ վստահությունը կեղծ ստերի հայտնաբերման թեստ ստեղծելու միջոցով: Մարդիկ հեշտությամբ կհավատան, որ իսկապես աշխատում է, բայց երբ կեղծ պատասխաններ տրվեն, դա կխաթարի նրանց կույր վստահությունը տեխնոլոգիայի նկատմամբ:
Քայլ 1: Քայլ 1: oldոդել սխեման
Քանի որ իմ աշխատանքները միայն մեկ լույս ունեն, ուստի այն շատ հեշտ է զոդել: Հիմնական խնդիրը սկզբում է, ես երկու լույս եմ կպցրել, բայց միանգամից չծածկեցի լուսավորման հատվածը: Այսպիսով, երբ երկու լարերը բաժանվում են միմյանց: Կարճ դուրս եկավ:
Քայլ 2: Քայլ 2: Գրեք ծածկագիրը
p.p1 {լուսանցք `0.0px 0.0px 0.0px 0.0px; գծի բարձրություն `15.0px; տառատեսակ ՝ 12.0px Times; գույնը ՝ #000000; ֆոնի գույնը ՝ #ffffff}
p.p2 {լուսանցք `0.0px 0.0px 0.0px 0.0px; գծի բարձրություն `15.0px; տառատեսակ ՝ 12.0px Times; գույնը ՝ #000000; ֆոնի գույնը ՝ #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Քայլ 2: Գրեք ծածկագիրը
/*********************************************************************
Սա օրինակ է մեր nRF52- ի վրա հիմնված Bluefruit LE մոդուլների համար
Վերցրեք մեկը այսօր adafruit խանութում:
Adafruit- ը ներդնում է ժամանակ և ռեսուրսներ ՝ ապահովելով այս բաց կոդով ծածկագիրը, խնդրում ենք աջակցել Adafruit- ին և բաց կոդով սարքավորումներին `գնումներ կատարելով
արտադրանք Adafruit- ից!
MIT լիցենզիա, լրացուցիչ տեղեկությունների համար ստուգեք LICENSE
Բոլոր տեքստերը վերևում և ներքևի շաղ տալու էկրանը պետք է ներառված լինեն դրա մեջ
ցանկացած վերաբաշխում
*********************************************************************
/ Այս ուրվագիծը նախատեսված է օգտագործել NeoPixel հսկիչով
// մակերես Adafruit's Bluefruit LE Connect բջջային հավելվածում:
/
/ - Կազմեք և միացրեք այս ուրվագիծը nRF52 փետուրին
// - Բացեք Bluefruit LE Connect ծրագիրը
// - Անցում դեպի NeoPixel օգտակար
// - Կապ հաստատելու համար կտտացրեք «միացնել» կոճակին և
// ուղարկել պիքսելների դասավորության մասին մետա-տվյալները
// - Օգտագործեք NeoPixel ծրագիրը ՝ ձեր սարքի պիքսելները թարմացնելու համար
/* ՆՇՈՄ. Այս ուրվագիծը պահանջում էր Adafruit_Neopixel- ի առնվազն 1.1.0 տարբերակ !!! */
#ներառում
#ներառում
#ներառում
#սահմանեք NEOPIXEL_VERSION_STRING «Neopixel v2.0»
#սահմանեք PIN 16 / * PIN- ն, որն օգտագործվում է NeoPixels- ը վարելու համար * /
#սահմանել ՄԱՔՍԱՄՈՆՔՆԵՐ 4
uint8_t *pixelBuffer = NULL;
uint8_t լայնություն = 0;
uint8_t բարձրություն = 0;
uint8_t քայլ;
uint8_t բաղադրիչներԱրժեք;
bool is 400Hz;
uint8_t բաղադրիչներ = 3; // միայն 3 -ը և 4 -ը վավեր արժեքներ են
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE ծառայություն
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
դատարկ կարգավորում ()
{
Serial.begin (115200);
մինչդեռ (! Սերիական) ուշացում (10); // nrf52840- ի համար հայրենի USB- ով
Serial.println («Adafruit Bluefruit Neopixel Test»);
Serial.println ("--------------------------------");
Serial.println ();
Serial.println («Խնդրում ենք միանալ Bluefruit Connect LE հավելվածի միջոցով»);
// Կարգավորել նեոպիքսելները
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Ստուգեք bluefruit.h աջակցվող արժեքների համար
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Հետևողական լինելու համար OTA DFU- ն պետք է նախ ավելացվի, եթե այն գոյություն ունի
bledfu.begin ();
// Կարգավորել և գործարկել սարքի տեղեկատվական ծառայությունը
bledis.setMan Manufacturer («Adafruit Industries»);
bledis.setModel («Կապույտ փետուր 52»);
bledis.begin ();
// Կարգավորեք և սկսեք BLE UART ծառայությունը
bleuart.begin ();
// Ստեղծեք և սկսեք գովազդել
startAdv ();
}
void startAdv (դատարկ)
{
// Գովազդային փաթեթ
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Ներառեք bleuart 128-bit uuid
Bluefruit. Advertising.addService (bleuart);
// Երկրորդային սկանավորման պատասխան փաթեթ (ըստ ցանկության)
// Քանի որ գովազդային փաթեթում «Անուն» -ի համար տեղ չկա
Bluefruit. ScanResponse.addName ();
/* Գովազդ սկսել
* - Անջատված լինելու դեպքում միացրեք ավտոմատ գովազդը
* - ընդմիջում. Արագ ռեժիմ = 20 ms, դանդաղ ռեժիմ = 152.5 ms
* - Արագ ռեժիմի տևողությունը 30 վայրկյան է
* - Սկիզբ (ժամանակի ընդմիջում) ընդմիջումով = 0 -ը գովազդելու է ընդմիշտ (մինչև միանալը)
*
* Առաջարկվող գովազդային ընդմիջման համար
*
*/
Bluefruit. Advertising.restartOnDisconnect (ճշմարիտ);
Bluefruit. Advertising.setInterval (32, 244); // 0.625 ms միավորով
Bluefruit. Advertising.setFastTimeout (30); // վայրկյանների քանակը արագ ռեժիմում
Bluefruit. Avertvertising.start (0); // 0 = Մի դադարեցրեք գովազդը n վայրկյանից հետո
}
անվավեր connect_callback (uint16_t conn_handle)
{
// Ստացեք հղում ընթացիկ կապին
BLEConnection* կապ = Bluefruit. Connection (conn_handle);
char կենտրոնական_անուն [32] = {0};
կապ-> getPeerName (կենտրոնական_անուն, չափս (կենտրոնական_անուն));
Serial.print («Միացված է»);
Serial.println (կենտրոնական_անուն);
Serial.println («Խնդրում ենք ընտրել« Neopixels »ներդիրը, սեղմել« Connect »և զվարճանալ»);
}
դատարկ շրջան ()
{
// Էխոն ստացավ տվյալներ
եթե (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int հրաման = bleuart.read ();
անջատիչ (հրաման) {
գործ 'V': {// Ստացեք տարբերակը
commandVersion ();
ընդմիջում;
}
case 'S': {// Կարգավորել չափերը, բաղադրիչները, քայլը…
commandSetup ();
ընդմիջում;
}
գործ 'C': {// Մաքրել գույնով
commandClearColor ();
ընդմիջում;
}
գործ 'B': {// Սահմանել Պայծառություն
commandSetBrightness ();
ընդմիջում;
}
գործ 'P': {// Սահմանել Pixel
commandSetPixel ();
ընդմիջում;
}
case 'I': {// Ստացեք նոր պատկեր
commandImage ();
ընդմիջում;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
համար (int j = 0; j <բարձրություն; j ++)
{
համար (int i = 0; i <լայնություն; 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 ();
}
void commandVersion () {
Serial.println (F («Հրաման. Տարբերակի ստուգում»));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F («Հրաման. Կարգավորում»));
width = bleuart.read ();
բարձրություն = bleuart.read ();
քայլ = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = բաղադրիչներValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
բաղադրիչներ = (բաղադրիչներԱրժեք == NEO_RGB || բաղադրիչներԱրժեք == NEO_RBG || բաղադրիչներԱրժեք == NEO_GRB || բաղադրիչներԱրժեք == NEO_GBR || բաղադրիչներԱրժեք == NEO_BRG || բաղադրիչներԱրժեք == NEO_BGR): 3: 4;
Serial.printf ("\ tsize: %dx %d / n", լայնություն, բարձրություն);
Serial.printf ("\ tstride: %d / n", քայլ);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ t բաղադրիչներ. %D / n", բաղադրիչներ);
եթե (pixelBuffer! = NULL) {
ջնջել pixelBuffer;
}
uint32_t չափը = լայնությունը*բարձրությունը;
pixelBuffer = նոր uint8_t [չափը*բաղադրիչներ];
neopixel.updateLength (չափը);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Կատարած
sendResponse («Լավ»);
}
void commandSetBrightness () {
Serial.println (F («Հրաման. SetBrightness»));
// Կարդալու արժեքը
uint8_t պայծառություն = bleuart.read ();
// Սահմանել պայծառությունը
neopixel.setBrightness (պայծառություն);
// Թարմացնել պիքսելները
swapBuffers ();
// Կատարած
sendResponse («Լավ»);
}
void commandClearColor () {
Serial.println (F («Հրաման. ClearColor»));
// կարդալ գույնը
uint8_t գույն [MAXCOMPONENTS];
համար (int j = 0; j <բաղադրիչներ;) {
եթե (bleuart.available ()) {
գույն [j] = bleuart.read ();
j ++;
}
}
// Բոլոր լուսարձակները սահմանեք գույնի
int չափը = լայնությունը * բարձրությունը;
uint8_t *base_addr = pixelBuffer;
համար (int i = 0; i <չափը; i ++) {
համար (int j = 0; j <բաղադրիչներ; j ++) {
*base_addr = գույն [j];
base_addr ++;
}
}
// Փոխանակեք բուֆերները
Serial.println (F («ClearColor ավարտված է»));
swapBuffers ();
եթե (բաղադրիչներ == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", գույնը [0], գույնը [1], գույնը [2]);
}
ուրիշ {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", գույնը [0], գույնը [1], գույնը [2], գույնը [3]);
}
// Կատարած
sendResponse («Լավ»);
}
void commandSetPixel () {
Serial.println (F («Հրաման. SetPixel»));
// Կարդալու դիրքորոշում
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Կարդացեք գույները
uint32_t պիքսելՕֆսեթ = y*լայնություն+x;
uint32_t pixelDataOffset = pixelOffset*բաղադրիչներ;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
համար (int j = 0; j <բաղադրիչներ;) {
եթե (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Գույներ սահմանել
uint32_t neopixelIndex = y*քայլ+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 («Լավ»);
}
void commandImage () {
Serial.printf ("Հրաման. Պատկեր %dx %d, %d, %d / n", լայնություն, բարձրություն, բաղադրիչներ, քայլք);
// Ստացեք նոր պիքսելային բուֆեր
int չափը = լայնությունը * բարձրությունը;
uint8_t *base_addr = pixelBuffer;
համար (int i = 0; i <չափը; i ++) {
համար (int j = 0; j <բաղադրիչներ;) {
եթե (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
եթե (բաղադրիչներ == 3) {
uint32_t ինդեքս = i*բաղադրիչներ;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Փոխանակեք բուֆերները
Serial.println (F («Պատկերը ստացվել է»));
swapBuffers ();
// Կատարած
sendResponse («Լավ»);
}
void sendResponse (char const *response) {
Serial.printf ("Պատասխան ուղարկել. %S / n", պատասխան);
bleuart.write (պատասխան, strlen (պատասխան)*sizeof (char));
}
Քայլ 3: Քայլ 3. Գնել լուսամփոփ
Քայլ 4: Քայլ 4. Քաշեք այն բոլորը միասին
Խորհուրդ ենք տալիս:
Ինչպես կատարել իսկապես էժան ճնշման տվիչներ. 6 քայլ (նկարներով)
Ինչպես կատարել իսկապես էժան ճնշման սենսորներ. Ես վերջին ժամանակներս զբաղված եմ եղել սովորական տնային իրերից անջատիչներ պատրաստելով, և որոշեցի բյուջեով ինքս իմ ճնշման սենսորը պատրաստել մի քանի սպունգներից, որոնց շուրջս պառկած էի: Պատճառն այն է, որ սա տարբերվում է բյուջետային ճնշման տվիչների այլ տարբերակներից, դա
Իսկապես WiFi ընդլայնիչ ՝ 5 քայլ
Իսկապես WiFi Extender: Ներածություն ruշմարիտ WiFi Extender- ը WiFi- ի կրկնողիչ է, որը հիմնված է Raspberry Pi Zero W.- ի վրա: Այն հաճելի այլընտրանք է դարձնում առևտրային WiFi կրկնողիչին `համատեղելով էժան (մինչև 10 ԱՄՆ դոլար) և բարձրակարգելի ծրագրակազմ: Այն կարող է նաև գործարկել գովազդի արգելափակման որոշ լուծումներ
Raspberry Pi NAS, որն իսկապես նման է NAS- ի. 13 քայլ (նկարներով)
Raspberry Pi NAS, որն իրոք նման է NAS- ի. Ինչու՞ Raspberry Pi NAS Ես իսկապես գտա NAS- ի որոշ դիզայն ՝ Raspberry Pi- ով, որը սոսնձվեց փայտե հիմքի վրա, բայց դա այն չէ, ինչ ես ուզում եմ: Ես ուզում եմ
Կատարեք իսկապես հիանալի մատրիցա Python- ում: 6 քայլ
Ստեղծեք իսկապես հոյակապ մատրիցա Python- ում: Բարև տղերք: Այս ուսուցանվողը կսովորեցնի ձեզ, թե ինչպես պատրաստել մատրիցա Python- ում: Սովորաբար, մարդիկ խմբում մատրիցա էին պատրաստում, քանի որ դա հեշտ է: Բայց այս անգամ ես ձեզ ցույց կտամ, թե ինչպես պատրաստել մատրիցա համակարգչային հզոր լեզուներից մեկով
3D KEVA մարտահրավեր 2. մահճակալ ՝ 3 քայլ
3D KEVA Challenge 2: Մահճակալ. Բարի գալուստ 3D KEVA մարտահրավեր: Դուք պատրաստ եք դրան Միայն այս տեսարանների օգտագործմամբ մարտահրավերն այն է, որ ձեր KEVA տախտակները տեղադրեք այնպես, որ համապատասխանի տեսակետներին: