Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Kinakailangan ng modernong mundo ang mga tao na lumabas sa pisikal at mabuhay sa loob ng digital.
Sa paglitaw ng Al at ang paglaganap ng teknolohiya ang mga tao ay labis na nagtiwala sa makina at naniniwala na palaging tama.
Inilaan ang "Totoong" upang alugin ang maling tiwala sa pamamagitan ng paglikha ng isang pekeng pagsubok ng lie detector. Madaling maniwala ang mga tao na gumagana talaga ang Totoo ngunit kapag ibinigay ang maling sagot ay makakalog ng kanilang bulag na pagtitiwala sa teknolohiya.
Hakbang 1: Hakbang 1: Maghinang sa Circuit
Dahil ang aking mga gawa ay mayroon lamang isang ilaw, kaya napakadaling maghinang. Ang pangunahing problema ay sa simula, maghinang ako ng dalawang ilaw, ngunit hindi ko agad sinakop ang bahagi ng pagkakalantad. Kaya't kapag ang dalawang bahagi ng wires ay magkadikit. Maikli ito.
Hakbang 2: Hakbang 2: Isulat ang Code
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; taas ng linya: 15.0px; font: 12.0px Times; kulay: # 000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; taas ng linya: 15.0px; font: 12.0px Times; kulay: # 000000; background-color: #ffffff; min-taas: 14.0px} span.s1 {font-kerning: none}
Hakbang 2: Isulat ang Code
/*********************************************************************
Ito ay isang halimbawa para sa aming nRF52 batay sa mga module ng Bluefruit LE
Pumili ng isa ngayon sa adafruit shop!
Namumuhunan ang adafruit ng oras at mga mapagkukunan na nagbibigay ng bukas na source code na ito, mangyaring suportahan ang Adafruit at open-source hardware sa pamamagitan ng pagbili
mga produkto mula sa Adafruit!
Lisensya ng MIT, suriin ang LICENSE para sa karagdagang impormasyon
Lahat ng teksto sa itaas, at ang splash screen sa ibaba ay dapat na isama sa
anumang muling pamamahagi
*********************************************************************
/ Ang sketch na ito ay inilaan upang magamit sa kontrol ng NeoPixel
// sa ibabaw ng BlueFuit LE Connect mobile application ng Adafruit.
/
/ - Compile at flash ang sketch na ito sa nRF52 Feather
// - Buksan ang Bluefruit LE Connect app
// - Lumipat sa NeoPixel utility
// - I-click ang pindutang 'kumonekta' upang magtaguyod ng isang koneksyon at
// ipadala ang meta-data tungkol sa layout ng pixel
// - Gamitin ang NeoPixel utility upang mai-update ang mga pixel sa iyong aparato
/ * TANDAAN: Ang sketch na ito ay kinakailangan ng hindi bababa sa bersyon 1.1.0 ng Adafruit_Neopixel !!! * /
# isama
# isama
# isama
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
# tukuyin ang PIN 16 / * Pin ang ginamit upang himukin ang NeoPixels * /
# tukuyin ang MAXCOMPONENTS 4
uint8_t * pixelBuffer = NULL;
uint8_t lapad = 0;
uint8_t taas = 0;
uint8_t stride;
uint8_t mga bahagiValue;
bool ay 400Hz;
uint8_t mga bahagi = 3; // 3 at 4 lamang ang may wastong halaga
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE Serbisyo
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
walang bisa ang pag-setup ()
{
Serial.begin (115200);
habang (! Serial) pagkaantala (10); // para sa nrf52840 kasama ang katutubong usb
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("-----------------");
Serial.println ();
Serial.println ("Mangyaring kumonekta gamit ang application na Bluefruit Connect LE");
// Config Neopixels
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Suriin ang bluefruit.h para sa mga sinusuportahang halaga
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Upang maging pare-pareho ang OTA DFU dapat idagdag muna kung mayroon ito
bledfu.begin ();
// Configure and Start Device Information Service
bledis.setManufaktur ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// I-configure at simulan ang serbisyo ng BLE UART
bleuart.begin ();
// I-set up at simulan ang advertising
startAdv ();
}
void startAdv (walang bisa)
{
// Advertising packet
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Isama ang bluart ng 128-bit uuid
Bluefruit. Advertising.addService (bleuart);
// Secondary Scan Response packet (opsyonal)
// Dahil walang puwang para sa 'Pangalan' sa Advertising packet
Bluefruit. ScanResponse.addName ();
/ * Simulan ang Advertising
* - Paganahin ang auto advertising kung naka-disconnect
* - Agwat: mabilis na mode = 20 ms, mabagal na mode = 152.5 ms
* - Ang timeout para sa mabilis na mode ay 30 segundo
* - Start (timeout) na may timeout = 0 ay mag-a-advertise magpakailanman (hanggang sa konektado)
*
* Para sa inirekumendang agwat ng advertising
*
*/
Bluefruit. Advertising.restartOnDisconnect (totoo);
Bluefruit. Advertising.setInterval (32, 244); // sa yunit ng 0.625 ms
Bluefruit. Advertising.setFastTimeout (30); // bilang ng mga segundo sa mabilis na mode
Bluefruit. Advertising.start (0); // 0 = Huwag itigil ang advertising pagkatapos ng segundo
}
void connect_callback (uint16_t conn_handle)
{
// Kunin ang sanggunian sa kasalukuyang koneksyon
BLEConnection * koneksyon = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
koneksyon-> getPeerName (central_name, sizeof (central_name));
Serial.print ("Nakakonekta sa");
Serial.println (central_name);
Serial.println ("Mangyaring piliin ang tab na 'Neopixels', i-click ang 'Connect' at magsaya");
}
walang bisa loop ()
{
// Nakatanggap ng data ang echo
kung (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int command = bleuart.read ();
lumipat (utos) {
case 'V': {// Kumuha ng Bersyon
commandVersion ();
pahinga;
}
case 'S': {// Mga sukat ng pag-set up, mga bahagi, hakbang-hakbang…
commandSetup ();
pahinga;
}
case 'C': {// Malinaw na may kulay
commandClearColor ();
pahinga;
}
case 'B': {// Itakda ang Liwanag
commandSetBightness ();
pahinga;
}
case 'P': {// Itakda ang Pixel
commandSetPixel ();
pahinga;
}
case 'I': {// Tumanggap ng bagong imahe
commandImage ();
pahinga;
}
}
}
}
void swapBuffers ()
{
uint8_t * base_addr = pixelBuffer;
int pixelIndex = 0;
para sa (int j = 0; j <taas; j ++)
{
para sa (int i = 0; i <lapad; i ++) {
kung (mga sangkap == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2)));
}
iba pa {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2), * (base_addr + 3)));
}
base_addr + = mga bahagi;
pixelIndex ++;
}
pixelIndex + = stride - lapad; // Ilipat ang pixelIndex sa susunod na hilera (isinasaalang-alang ang hakbang)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Command: Bersyon na suriin"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Command: Setup"));
lapad = bleuart.read ();
taas = bleuart.read ();
stride = bleuart.read ();
mga sangkapValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
mga sangkap = (mga sangkapValue == NEO_RGB || mga sangkapValue == NEO_RBG || mga sangkapValue == NEO_GRB || mga sangkapValue == NEO_GBR || mga sangkapValue == NEO_BRG || mga sangkapValue == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize:% dx% d / n", lapad, taas);
Serial.printf ("\ tstride:% d / n", stride);
Serial.printf ("\ tpixelType% d / n", pixelType);
Serial.printf ("\ tcomponents:% d / n", mga bahagi);
kung (pixelBuffer! = NULL) {
tanggalin ang pixelBuffer;
}
laki ng uint32_t = lapad * taas;
pixelBuffer = bagong uint8_t [laki * ng mga sangkap];
neopixel.updateLength (laki);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandSetBightness () {
Serial.println (F ("Command: SetBrightness"));
// Basahin ang halaga
uint8_t brightness = bleuart.read ();
// Itakda ang ningning
neopixel.setBightness (ningning);
// Refresh pixel
swapBuffers ();
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandClearColor () {
Serial.println (F ("Command: ClearColor"));
// Basahin ang kulay
uint8_t kulay [MAXCOMPONENTS];
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
kulay [j] = bleuart.read ();
j ++;
}
}
// Itakda ang lahat ng mga leds sa kulay
int laki = lapad * taas;
uint8_t * base_addr = pixelBuffer;
para sa (int i = 0; i <size; i ++) {
para sa (int j = 0; j <mga bahagi; j ++) {
* base_addr = kulay [j];
base_addr ++;
}
}
// Ipagpalit ang mga buffer
Serial.println (F ("Nakumpleto ang ClearColor"));
swapBuffers ();
kung (mga sangkap == 3) {
Serial.printf ("\ tclear (% d,% d,% d) n", kulay [0], kulay [1], kulay [2]);
}
iba pa {
Serial.printf ("\ tclear (% d,% d,% d,% d) n", color [0], color [1], color [2], color [3]);
}
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandSetPixel () {
Serial.println (F ("Command: SetPixel"));
// Basahin ang posisyon
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Basahin ang mga kulay
uint32_t pixelOffset = y * lapad + x;
uint32_t pixelDataOffset = pixelOffset * na mga bahagi;
uint8_t * base_addr = pixelBuffer + pixelDataOffset;
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Magtakda ng mga kulay
uint32_t neopixelIndex = y * stride + x;
uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t kulay;
kung (mga sangkap == 3) {
kulay = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
Serial.printf ("\ tcolor (% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
}
iba pa {
kulay = 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, kulay);
neopixel.show ();
// Tapos Na
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Command: Larawan% dx% d,% d,% d / n", lapad, taas, mga bahagi, hakbang);
// Tumanggap ng bagong buffer ng pixel
int laki = lapad * taas;
uint8_t * base_addr = pixelBuffer;
para sa (int i = 0; i <size; i ++) {
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
kung (mga sangkap == 3) {
uint32_t index = i * mga bahagi;
Serial.printf ("\ tp% d (% d,% d,% d) n", i, pixelBuffer [index], pixelBuffer [index + 1], pixelBuffer [index + 2]);
}
*/
}
// Ipagpalit ang mga buffer
Serial.println (F ("Natanggap ang imahe"));
swapBuffers ();
// Tapos Na
sendResponse ("OK");
}
walang bisa ang sendResponse (char const * tugon) {
Serial.printf ("Magpadala ng Tugon:% s / n", tugon);
bleuart.write (tugon, strlen (tugon) * laki ng (char));
}