Мазмуну:

Чынында чакырык: 5 кадам
Чынында чакырык: 5 кадам

Video: Чынында чакырык: 5 кадам

Video: Чынында чакырык: 5 кадам
Video: АРКАРДЫ ТАШ МЕНЕН БАШЫНА УРУП ЖЫГЫТКАНДАРДЫН ВИДЕОСУ 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 Times; түс: #000000; фон түсү: #ffffff}

p.p2 {маржа: 0.0px 0.0px 0.0px 0.0px; сызык бийиктиги: 15.0px; шрифт: 12.0px Times; түс: #000000; background-color: #ffffff; мин-бийиктик: 14.0px} span.s1 {font-kerning: none}

2 -кадам: Кодду жазыңыз

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

Бул биздин nRF52 негизделген Bluefruit LE модулдары үчүн мисал

Бүгүн адафрут дүкөнүнөн бирин алыңыз!

Adafruit бул ачык булак кодун берүү менен убакытты жана ресурстарды жумшайт, сураныч, Adafruit жана ачык булак жабдууларын сатып алуу менен колдоп коюңуз

Adafruitтен келген продукциялар!

MIT лицензиясы, көбүрөөк маалымат алуу үчүн ЛИЦЕНЗИЯНЫ текшериңиз

Жогорудагы бардык текст жана төмөндөгү экрандын терезеси киргизилиши керек

кандайдыр бир кайра бөлүштүрүү

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

/ Бул эскиз NeoPixel көзөмөлү менен колдонууга арналган

// Adafruitтин Bluefruit LE Connect мобилдик тиркемесинде.

/

/ - Бул эскизди nRF52 Featherге түзүңүз жана жаркылдатыңыз

// - Bluefruit LE Connect колдонмосун ачыңыз

// - NeoPixel утилитасына өтүү

// - Байланыш түзүү үчүн 'туташуу' баскычын басыңыз

// пиксель макети жөнүндө мета-маалыматтарды жөнөтүү

// - Аспабыңыздагы пикселдерди жаңыртуу үчүн NeoPixel утилитасын колдонуңуз

/* ЭСКЕРТҮҮ: Бул эскизге Adafruit_Neopixelдин 1.1.0 версиясы керек болчу !!! */

#кошуу

#кошуу

#кошуу

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * NeoPixelsти айдоо үчүн колдонулган пин * /

#аныктоо MAXCOMPONENTS 4

uint8_t *pixelBuffer = NULL;

uint8_t туурасы = 0;

uint8_t бийиктиги = 0;

uint8_t кадам;

uint8_t componentsValue;

бол 400 Гц;

uint8_t компоненттери = 3; // 3 жана 4 гана жарактуу баалуулуктар

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// BLE кызматы

BLEDfu bledfu;

BLEDis bledis;

BLEUart bleuart;

жараксыз орнотуу ()

{

Serial.begin (115200);

while (! Serial) delay (10); // nrf52840 үчүн жергиликтүү USB менен

Serial.println ("Adafruit Bluefruit Neopixel Test");

Serial.println ("--------------------------------");

Serial.println ();

Serial.println ("Bluefruit Connect LE тиркемесин колдонуп туташыңыз");

// Config Neopixels

neopixel.begin ();

// Инф Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Текшерилген bluefruit.h колдоого алынган баалуулуктар үчүн

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Ырааттуу болуу үчүн OTA DFU бар болсо, биринчи кезекте кошулушу керек

bledfu.begin ();

// Configure and Start Device Information Service

bledis.setManufacturer ("Adafruit Industries");

bledis.setModel ("Bluefruit Feather52");

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-бит uuid кошуу

Bluefruit. Advertising.addService (bleuart);

// Экинчи скандоо жооп пакети (милдеттүү эмес)

// Жарнак пакетинде "Аты" үчүн орун жок болгондуктан

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 секунддан кийин жарнаманы токтотпоңуз

}

Void connect_callback (uint16_t conn_handle)

{

// Учурдагы туташууга шилтеме алыңыз

BLEConnection* байланышы = Bluefruit. Connection (conn_handle);

char central_name [32] = {0};

connection-> getPeerName (central_name, sizeof (central_name));

Serial.print ("Туташты");

Serial.println (central_name);

Serial.println ("Сураныч, 'Neopixels' өтмөгүн тандаңыз, 'Connect' баскычын басыңыз жана көңүл ачыңыз)";

}

боштук цикл ()

{

// Эхо алынган маалыматтарды

эгер (Bluefruit.connected () && bleuart.notifyEnabled ())

{

int командасы = bleuart.read ();

которуу (буйрук) {

case 'V': {// Версияны алуу

commandVersion ();

тыныгуу;

}

case 'S': {// Орнотуу өлчөмдөрү, компоненттери, кадамы…

commandSetup ();

тыныгуу;

}

case 'C': {// Түс менен тазалаңыз

commandClearColor ();

тыныгуу;

}

case 'B': {// Жарыктыкты коюу

commandSetBrightness ();

тыныгуу;

}

case 'P': {// Пикселди коюу

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 ("Command: Version check"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

Serial.println (F ("Команда: Орнотуу"));

туурасы = bleuart.read ();

бийиктик = bleuart.read ();

кадам = bleuart.read ();

komponentValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

компоненттер = (componentValue == NEO_RGB || компоненттериValue == NEO_RBG || компоненттериValue == NEO_GRB || компоненттериValue == NEO_GBR || компоненттериValue == NEO_BRG || компоненттериValue == 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 size = туурасы*бийиктиги;

pixelBuffer = жаңы uint8_t [size*компоненттери];

neopixel.updateLength (өлчөм);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Бүттү

sendResponse ("OK");

}

void commandSetBrightness () {

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

// Окуу мааниси

uint8_t жарыктыгы = bleuart.read ();

// Жарыктыкты коюу

neopixel.setBrightness (жарыктык);

// Пикселдерди жаңыртуу

swapBuffers ();

// Бүттү

sendResponse ("OK");

}

void commandClearColor () {

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

// Түс окуу

uint8_t түсү [MAXCOMPONENTS];

үчүн (int j = 0; j <компоненттер;) {

if (bleuart.available ()) {

түс [j] = bleuart.read ();

j ++;

}

}

// Бардык леддерди түскө коюңуз

int size = туурасы * бийиктиги;

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i <size; 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 ("OK");

}

жараксыз 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;

үчүн (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));

}

башка {

color = 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 ("OK");

}

void commandImage () {

Serial.printf ("Буйрук: Сүрөт %dx %d, %d, %d / n", туурасы, бийиктиги, компоненттери, кадам);

// Жаңы пиксель буферин алуу

int size = туурасы * бийиктиги;

uint8_t *base_addr = pixelBuffer;

for (int i = 0; i <size; i ++) {

үчүн (int j = 0; j <компоненттер;) {

if (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

эгер (компоненттер == 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 ("OK");

}

жараксыз sendResponse (char const *жооп) {

Serial.printf ("Жооп жөнөтүү: %s / n", жооп);

bleuart.write (жооп, strlen (жооп)*sizeof (char));

}

3 -кадам: 3 -кадам: Абажур сатып алуу

3 -кадам: абажур сатып алуу
3 -кадам: абажур сатып алуу
3 -кадам: абажур сатып алуу
3 -кадам: абажур сатып алуу

4 -кадам: 4 -кадам: Баарын бирге тартыңыз

Сунушталууда: