Мазмуну:
- 1 -кадам: 1 -кадам: Районду ширетүү
- 2 -кадам: 2 -кадам: Кодду жазыңыз
- 3 -кадам: 3 -кадам: Абажур сатып алуу
- 4 -кадам: 4 -кадам: Баарын бирге тартыңыз
- 5 -кадам: 5 -кадам: Оюн карталарын жасоо
Video: Чынында чакырык: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Заманбап дүйнө адамдардан физикалык жактан чыгып, санарип ичинде жашоону талап кылат.
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 -кадам: Абажур сатып алуу
4 -кадам: 4 -кадам: Баарын бирге тартыңыз
Сунушталууда:
Чынында арзан басым сенсорлорун кантип жасоо керек: 6 кадам (сүрөттөр менен)
Кантип чындап эле арзан басым сенсорлорун жасаса болот: Мен акыркы убактарда кадимки үй буюмдарынан өчүргүчтөрдү жасоону үйрөндүм, мен өзүмдүн басым басым сенсорун бир нече губкадан бюджетке жасоону чечтим. Бул бюджеттик басым сенсорлорунун башка версияларынан айырмаланып тургандыгынын себеби
Чынында NASга окшош Raspberry Pi NAS: 13 кадам (сүрөттөр менен)
Чындап эле NASге окшош Raspberry Pi NAS: Эмне үчүн Raspberry Pi NASWell, мен интернеттен Raspberry Pi NASди үнөмдөгөн кооз, бирок мейкиндикти издеп жүрдүм, бирок эч нерсе таппадым. Мен Raspberry Pi менен УИАнын кээ бир дизайнын жыгачтан жасалган жабыштырууну таптым, бирок бул мен каалагандай эмес. Мен каалайм
Өзүңүзгө * Чынында * Арзан Интерферометр: 5 кадам (Сүрөттөр менен)
Өзүңдү чындыгында * чынында эле * арзан интерферометр кыл: Баарыңарга салам! Келгиле, Innovate.In бул үйрөткүчтүн дагы бир көрсөтмөсүнө кош келиңиздер. &Quot; Чынында арзан " себеби кымбат баалуу комплекттер сизде көп
Неон чырагын кантип жасоо керек (чынында эмес): 9 кадам
Неон чырагын кантип жасоо керек (чынында эмес): Бул көрсөтмө сизге оңой неон лампасын кантип жасоону көрсөтөт
Чынында, чындап эле оңой USB Мотор!: 3 кадам
Чынында, чындап эле Easy USB Мотору !: Акыры, менин 2 -инструкциям !!! Бул сиз үчүн же сиздин компьютериңиз үчүн каалаган USB порту иштебей турган күйөрман. Мен муну жаңыдан баштагандарга электроникага, профессионалдарга чейин сунуштайм. Бул оңой жана кызыктуу, сиз түзмө -түз беш минита жасай аласыз !!! ЧЫНЫГЫ