Სარჩევი:
- ნაბიჯი 1: ნაბიჯი 1: შეაერთეთ წრე
- ნაბიჯი 2: ნაბიჯი 2: ჩაწერეთ კოდი
- ნაბიჯი 3: ნაბიჯი 3: ლამპშადის ყიდვა
- ნაბიჯი 4: ნაბიჯი 4: გაიყვანეთ ეს ყველაფერი ერთად
- ნაბიჯი 5: ნაბიჯი 5: სათამაშო ბარათების დამზადება
ვიდეო: მართლაც გამოწვევა: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:17
თანამედროვე სამყარო მოითხოვს ადამიანებს, გამოვიდნენ ფიზიკურად და იცხოვრონ ციფრულში.
ალ -ს გამოჩენასა და ტექნოლოგიების გამრავლებასთან ერთად ადამიანები ძალიან ენდობიან მანქანას და თვლიან, რომ ის ყოველთვის სწორია.
"მართლაც" მიზნად ისახავს ამ ცრუ ნდობის შერყევას ყალბი სიცრუის დეტექტორის ტესტის შექმნის გზით. ხალხი ადვილად დაიჯერებს, რომ ნამდვილად მუშაობს, მაგრამ ცრუ პასუხების გაცემის შემთხვევაში ეს შეარყევს მათ ბრმა ნდობას ტექნოლოგიების მიმართ.
ნაბიჯი 1: ნაბიჯი 1: შეაერთეთ წრე
რადგან ჩემს ნამუშევრებს მხოლოდ ერთი შუქი აქვს, ამიტომ მისი შედუღება ძალიან ადვილია. მთავარი პრობლემა არის დასაწყისში, მე შევაერთე ორი შუქი, მაგრამ მე დაუყოვნებლივ არ დავფარე ექსპოზიციის ნაწილი. ასე რომ, როდესაც ორი მავთულის ნაწილი ერთმანეთს ეხება. მოკლედ გამოვიდა.
ნაბიჯი 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; მინ-სიმაღლე: 14.0px} span.s1 {font-kerning: none}
ნაბიჯი 2: ჩაწერეთ კოდი
/*********************************************************************
ეს არის მაგალითი ჩვენი nRF52 დაფუძნებული Bluefruit LE მოდულებისთვის
აიღეთ დღეს ადაფრუტის მაღაზიაში!
Adafruit ინვესტიციას უწევს დროს და რესურსებს ამ ღია კოდის უზრუნველსაყოფად, გთხოვთ მხარი დაუჭიროთ ადაფრუტს და ღია კოდის ტექნიკას შესყიდვით
პროდუქცია ადაფრუტიდან!
MIT ლიცენზია, შეამოწმეთ ლიცენზია დამატებითი ინფორმაციისთვის
ყველა ტექსტი ზემოთ და splash ეკრანი ქვემოთ უნდა იყოს ჩართული
ნებისმიერი გადანაწილება
*********************************************************************
/ ეს ესკიზი განკუთვნილია NeoPixel კონტროლთან ერთად
// ზედაპირზე Adafruit's Bluefruit LE Connect მობილური აპლიკაცია.
/
/ - შეადგინეთ და ააფეთქეთ ესკიზი nRF52 ბუმბულზე
// - გახსენით Bluefruit LE Connect აპლიკაცია
// - გადადით NeoPixel პროგრამაზე
// - დააწკაპუნეთ ღილაკზე 'დაკავშირება' კავშირის დასამყარებლად და
// გააგზავნეთ მეტა მონაცემები პიქსელის განლაგების შესახებ
// - გამოიყენეთ NeoPixel პროგრამა თქვენს მოწყობილობაზე პიქსელების გასაახლებლად
/* შენიშვნა: ეს ესკიზი მოითხოვდა Adafruit_Neopixel- ის მინიმუმ 1.1.0 ვერსიას !!! */
#ჩართეთ
#ჩართეთ
#ჩართეთ
#განსაზღვრეთ NEOPIXEL_VERSION_STRING "ნეოპიქსელი v2.0"
#განსაზღვრეთ PIN 16 / * პინი გამოიყენება NeoPixels– ის მართვისთვის * /
#განსაზღვრეთ მაქსიმალური კომპონენტები 4
uint8_t *pixelBuffer = NULL;
uint8_t სიგანე = 0;
uint8_t სიმაღლე = 0;
uint8_t ნაბიჯი;
uint8_t კომპონენტები ღირებულება;
bool არის 400Hz;
uint8_t კომპონენტები = 3; // მხოლოდ 3 და 4 არის სწორი მნიშვნელობები
Adafruit_NeoPixel ნეოპიქსელი = Adafruit_NeoPixel ();
// BLE სერვისი
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
ბათილად დაყენება ()
{
Serial.begin (115200);
ხოლო (! სერიული) დაგვიანებით (10); // for nrf52840 მშობლიური USB- ით
Serial.println ("Adafruit Bluefruit Neopixel ტესტი");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("გთხოვთ დააკავშიროთ Bluefruit Connect LE პროგრამის გამოყენებით");
// ნეოპიქსელების კონფიგურაცია
neopixel.begin ();
// ინიტ ბლუფრუტი
Bluefruit.begin ();
Bluefruit.setTxPower (4); // შეამოწმეთ bluefruit.h მხარდაჭერილი მნიშვნელობებისთვის
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// თანმიმდევრული რომ იყოს OTA DFU უნდა დაემატოს ჯერ თუ არსებობს
bledfu.begin ();
// მოწყობილობის საინფორმაციო სერვისის კონფიგურაცია და დაწყება
bledis.setMan Manufacturer ("ადაფრუტის ინდუსტრიები");
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 ("გთხოვთ შეარჩიოთ" ნეოპიქსელების "ჩანართი, დააწკაპუნეთ" დაკავშირება "და გაერთეთ");
}
ბათილი მარყუჟი ()
{
// ექომ მიიღო მონაცემები
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int ბრძანება = bleuart.read ();
გადართვა (ბრძანება) {
საქმე 'V': {// მიიღეთ ვერსია
commandVersion ();
შესვენება;
}
საქმე 'S': {// პარამეტრების ზომები, კომპონენტები, ნაბიჯი…
commandSetup ();
შესვენება;
}
საქმე 'C': {// გასუფთავება ფერით
commandClearColor ();
შესვენება;
}
საქმე 'B': {// Set Brightness
commandSetBrightness ();
შესვენება;
}
საქმე 'P': {// დააყენეთ პიქსელი
commandSetPixel ();
შესვენება;
}
საქმე 'მე': {// მიიღეთ ახალი სურათი
commandImage ();
შესვენება;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <სიმაღლე; j ++)
{
for (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 ();
}
void commandVersion () {
Serial.println (F ("Command: Version check"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Command: Setup"));
width = bleuart.read ();
სიმაღლე = bleuart.read ();
stride = 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 ("Command: SetBrightness"));
// მნიშვნელობის წაკითხვა
uint8_t სიკაშკაშე = bleuart.read ();
// დააყენეთ სიკაშკაშე
neopixel.setBrightness (სიკაშკაშე);
// პიქსელების განახლება
swapBuffers ();
// Შესრულებულია
sendResponse ("კარგი");
}
void commandClearColor () {
Serial.println (F ("Command: ClearColor"));
// წაიკითხეთ ფერი
uint8_t ფერი [MAXCOMPONENTS];
for (int j = 0; j <კომპონენტები;) {
if (bleuart.available ()) {
ფერი [j] = bleuart.read ();
j ++;
}
}
// დააყენეთ ყველა led ფერი
int ზომა = სიგანე * სიმაღლე;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (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 ("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;
for (int j = 0; j <კომპონენტები;) {
if (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;
for (int i = 0; i <ზომა; i ++) {
for (int j = 0; j <კომპონენტები;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
თუ (კომპონენტები == 3) {
uint32_t ინდექსი = i*კომპონენტები;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [ინდექსი], pixelBuffer [ინდექსი+1], pixelBuffer [ინდექსი+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 ნაბიჯი (სურათებით)
როგორ გავხადოთ მართლაც იაფი წნევის სენსორები: ამ ბოლო დროს მე ვიყავი ჩართული საყოფაცხოვრებო ნივთებიდან გადამრთველების დამზადებაზე და გადავწყვიტე, ჩემი წნევის სენსორი გამეკეთებინა ბიუჯეტზე რამდენიმე ღრუბლისგან, რომლებიც მე გარშემო ვიწექი. მიზეზი, რის გამოც ეს განსხვავდება ბიუჯეტის წნევის სენსორების სხვა ვერსიებისგან, არის
გააკეთეთ მართლაც მაგარი მატრიცა პითონში!: 6 ნაბიჯი
შექმენით მართლაც მაგარი მატრიცა პითონში!: გამარჯობა ბიჭებო! ეს გაკვეთილი გასწავლით თუ როგორ უნდა შექმნათ მატრიცა პითონში! ჩვეულებრივ, ხალხი აკეთებს მატრიცას სურათებში, რადგან ეს ადვილია. მაგრამ ამჯერად მე გაჩვენებ თუ როგორ უნდა გააკეთო მატრიცა კომპიუტერის ერთ – ერთ მძლავრ ენაზე
3D KEVA გამოწვევა 2: საწოლი: 3 ნაბიჯი
3D KEVA გამოწვევა 2: საწოლი: კეთილი იყოს თქვენი მობრძანება 3D KEVA გამოწვევაში! მზად ხართ ამისთვის? თითოეული 3D KEVA გამოწვევა წარუდგენს მოსწავლეს 3 ნახვის კომპლექტს (ზედა, წინა და მარჯვენა). მხოლოდ ამ ხედების გამოყენებით გამოწვევაა თქვენი KEVA Planks- ის პოზიციონირება ისე, რომ შეხედულებებს შეესაბამებოდეს. როგორც
მართლაც, მართლაც მარტივი USB ძრავა!: 3 ნაბიჯი
მართლაც, მართლაც მარტივი USB ძრავა!: ბოლოს და ბოლოს, ჩემი მე –2 სასწავლო !!! ეს არის გულშემატკივარი თქვენთვის ან თქვენი კომპიუტერისთვის, რომელიც მუშაობს ნებისმიერი ხელმისაწვდომი USB პორტით. მე ვურჩევ მას დამწყებთათვის ელექტრონიკაში, პროფესიონალებამდე. ეს არის მარტივი და სახალისო, შეგიძლიათ გააკეთოთ სიტყვასიტყვით ხუთ წუთში !!! ნამდვილი
მართლაც მარტივი/მარტივი/არა რთული გზა ადამიანების/ადამიანების/ცხოველების/რობოტების გარეგნობის შესაქმნელად, მათ აქვთ მართლაც მაგარი/ნათელი სითბოს ხედვა (თქვენი არჩევანის ფერი) GIMP- ის გამოყენებით: 4 ნაბიჯი
მართლაც მარტივი/მარტივი/არა რთული გზა ადამიანების/ადამიანების/ცხოველების/რობოტების გარეგნობის შესაქმნელად, მათ მართლაც აქვთ მაგარი/ნათელი სითბოს ხედვა (თქვენი არჩევანის ფერი) GIMP- ის გამოყენებით: წაიკითხეთ … სათაური