Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Dunia modern menuntut manusia untuk keluar dari fisik dan hidup dalam digital.
Dengan munculnya Al dan perkembangan teknologi, orang terlalu percaya pada mesin dan percaya bahwa itu selalu benar.
"Sungguh" dimaksudkan untuk menggoyahkan kepercayaan palsu ini melalui pembuatan tes pendeteksi kebohongan palsu. Orang akan dengan mudah percaya bahwa Benar-benar berfungsi tetapi ketika jawaban salah diberikan, itu akan menggoyahkan kepercayaan buta mereka terhadap teknologi.
Langkah 1: Langkah 1: Solder Sirkuit
Karena karya saya hanya memiliki satu lampu, jadi sangat mudah untuk disolder. Masalah utama adalah pada awalnya, saya menyolder dua lampu, tetapi saya tidak segera menutupi bagian eksposur. Jadi ketika dua bagian kabel bersentuhan. Ini singkat.
Langkah 2: Langkah 2: Tulis Kode
p.p1 {margin: 0,0px 0,0px 0,0px 0,0px; tinggi garis: 15.0px; font: 12.0px Kali; warna: #000000; warna latar belakang: #ffffff}
p.p2 {margin: 0,0px 0,0px 0,0px 0,0px; tinggi garis: 15.0px; font: 12.0px Kali; warna: #000000; warna latar belakang: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Langkah 2: Tulis Kode
/*********************************************************************
Ini adalah contoh untuk modul Bluefruit LE berbasis nRF52 kami
Ambil satu hari ini di toko adafruit!
Adafruit menginvestasikan waktu dan sumber daya untuk menyediakan kode sumber terbuka ini, tolong dukung Adafruit dan perangkat keras sumber terbuka dengan membeli
produk dari Adafruit!
Lisensi MIT, periksa LISENSI untuk informasi lebih lanjut
Semua teks di atas, dan layar pembuka di bawah harus disertakan dalam
redistribusi apapun
*********************************************************************
/ Sketsa ini dimaksudkan untuk digunakan dengan kontrol NeoPixel
// muncul di aplikasi seluler Bluefruit LE Connect Adafruit.
/
/ - Kompilasi dan flash sketsa ini ke nRF52 Feather
// - Buka aplikasi Bluefruit LE Connect
// - Beralih ke utilitas NeoPixel
// - Klik tombol 'sambungkan' untuk membuat koneksi dan
// kirim meta-data tentang tata letak piksel
// - Gunakan utilitas NeoPixel untuk memperbarui piksel pada perangkat Anda
/* CATATAN: Sketsa ini membutuhkan setidaknya versi 1.1.0 dari Adafruit_Neopixel !!! */
#termasuk
#termasuk
#termasuk
#define NEOPIXEL_VERSION_STRING "Neopiksel v2.0"
#define PIN 16 /* Pin yang digunakan untuk menggerakkan NeoPixels */
#menentukan MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t lebar = 0;
tinggi uint8_t = 0;
uint8_t langkah;
uint8_t komponenNilai;
bool adalah400Hz;
komponen uint8_t = 3; // hanya 3 dan 4 nilai yang valid
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel();
// Layanan BLE
BLEDfu berdarah;
BLEDis berdarah;
BLEUart bleuart;
batalkan pengaturan()
{
Serial.begin(115200);
while (!Serial) delay(10); // untuk nrf52840 dengan usb asli
Serial.println("Uji Neopiksel Adafruit Bluefruit");
Serial.println("--------------------------------");
Serial.println();
Serial.println("Silakan sambungkan menggunakan aplikasi Bluefruit Connect LE");
// Konfigurasi Neopiksel
neopixel.begin();
// Inisi Buah Biru
Buah biru.mulai();
Bluefruit.setTxPower(4); // Periksa bluefruit.h untuk nilai yang didukung
Bluefruit.setName("Bluefruit52");
Bluefruit. Periph.setConnectCallback(connect_callback);
// Agar konsisten OTA DFU harus ditambahkan terlebih dahulu jika ada
bledfu.begin();
// Konfigurasi dan Mulai Layanan Informasi Perangkat
bledis.setManufacturer("Adafruit Industries");
bledis.setModel("Bulu Buah Biru52");
bledis.begin();
// Konfigurasi dan mulai layanan BLE UART
bleuart.begin();
// Siapkan dan mulai beriklan
mulaiAdv();
}
batal startAdv (batal)
{
// Paket iklan
Bluefruit. Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower();
// Sertakan bleuart 128-bit uuid
Bluefruit. Advertising.addService(bleuart);
// Paket Respons Pemindaian Sekunder (opsional)
// Karena tidak ada ruang untuk 'Nama' dalam paket Iklan
Bluefruit. ScanResponse.addName();
/* Mulai Beriklan
* - Aktifkan iklan otomatis jika terputus
* - Interval: mode cepat = 20 md, mode lambat = 152,5 md
* - Batas waktu untuk mode cepat adalah 30 detik
* - Mulai (batas waktu) dengan batas waktu = 0 akan beriklan selamanya (sampai terhubung)
*
* Untuk interval iklan yang direkomendasikan
*
*/
Bluefruit. Advertising.restartOnDisconnect(benar);
Bluefruit. Advertising.setInterval(32, 244); // dalam satuan 0,625 ms
Bluefruit. Advertising.setFastTimeout(30); // jumlah detik dalam mode cepat
Bluefruit. Advertising.start(0); // 0 = Jangan berhenti beriklan setelah n detik
}
batal connect_callback(uint16_t conn_handle)
{
// Dapatkan referensi ke koneksi saat ini
BLEConnection* koneksi = Bluefruit. Connection(conn_handle);
char central_name[32] = { 0 };
koneksi->getPeerName(nama_pusat, sizeof(nama_pusat));
Serial.print("Terhubung ke ");
Serial.println(nama_pusat);
Serial.println("Silahkan pilih tab 'Neopixels', klik 'Connect' dan selamat bersenang-senang");
}
lingkaran kosong()
{
// Gema menerima data
jika (Bluefruit.connected() && bleuart.notifyEnabled())
{
perintah int = bleuart.read();
beralih (perintah) {
case 'V': { // Dapatkan Versi
perintahVersi();
merusak;
}
case 'S': { // Atur dimensi, komponen, langkah…
perintahSetup();
merusak;
}
case 'C': { // Hapus dengan warna
perintahClearColor();
merusak;
}
case 'B': { // Atur Kecerahan
commandSetBrightness();
merusak;
}
case 'P': { // Setel Piksel
perintahSetPixel();
merusak;
}
case 'I': { // Terima gambar baru
perintahGambar();
merusak;
}
}
}
}
batalkan swapBuffer()
{
uint8_t *base_addr = pixelBuffer;
int pikselIndeks = 0;
untuk (int j = 0; j < tinggi; j++)
{
for (int i = 0; i < lebar; i++) {
if (komponen == 3) {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2)));
}
lain {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+=komponen;
pikselIndeks++;
}
pixelIndex += langkah - lebar; // Pindahkan pixelIndex ke baris berikutnya (perhitungkan langkahnya)
}
neopixel.show();
}
batal perintahVersi() {
Serial.println(F("Perintah: Pemeriksaan versi"));
sendResponse(NEOPIXEL_VERSION_STRING);
}
batal perintahSetup() {
Serial.println(F("Perintah: Pengaturan"));
lebar = bleuart.read();
tinggi = bleuart.read();
langkah = bleuart.read();
componentValue = bleuart.read();
is400Hz = bleuart.read();
neoPixelType pixelType;
pixelType = nilai komponen + (is400Hz ? NEO_KHZ400: NEO_KHZ800);
komponen = (Nilai komponen == NEO_RGB || Nilai komponen == NEO_RBG || Nilai komponen == NEO_GRB || Nilai komponen == NEO_GBR || Nilai komponen == NEO_BRG || Nilai komponen == NEO_BGR) ? 3:4;
Serial.printf("\tukuran: %dx%d\n", lebar, tinggi);
Serial.printf("\tlangkah: %d\n", langkah);
Serial.printf("\tpixelType %d\n", pixelType);
Serial.printf("\tkomponen: %d\n", komponen);
if (pixelBuffer != NULL) {
hapus pixelBuffer;
}
uint32_t ukuran = lebar*tinggi;
pixelBuffer = new uint8_t[ukuran*komponen];
neopixel.updateLength(ukuran);
neopixel.updateType(pixelType);
neopixel.setPin(PIN);
// Selesai
sendResponse("Oke");
}
void commandSetBrightness() {
Serial.println(F("Perintah: SetBrightness"));
// Baca nilai
kecerahan uint8_t = bleuart.read();
// Setel kecerahan
neopixel.setBrightness(kecerahan);
// Segarkan piksel
swapBuffer();
// Selesai
sendResponse("Oke");
}
batalkan perintahClearColor() {
Serial.println(F("Perintah: ClearColor"));
// Baca warna
uint8_t warna[MAXCOMPONENTS];
for (int j = 0; j < komponen;) {
if (bleuart.available()) {
warna[j] = bleuart.read();
j++;
}
}
// Atur semua led menjadi warna
int ukuran = lebar * tinggi;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i < ukuran; i++) {
for (int j = 0; j < komponen; j++) {
*base_addr = warna[j];
basis_addr++;
}
}
// Tukar buffer
Serial.println(F("Hapus Warna Selesai"));
swapBuffer();
if (komponen == 3) {
Serial.printf("\tclear (%d, %d, %d)\n", warna[0], warna[1], warna[2]);
}
lain {
Serial.printf("\tclear (%d, %d, %d, %d)\n", warna[0], warna[1], warna[2], warna[3]);
}
// Selesai
sendResponse("Oke");
}
batalkan perintahSetPixel() {
Serial.println(F("Perintah: SetPixel"));
// Baca posisi
uint8_t x = bleuart.read();
uint8_t y = bleuart.read();
// Baca warna
uint32_t pixelOffset = y*lebar+x;
uint32_t pixelDataOffset = pixelOffset*komponen;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j < komponen;) {
if (bleuart.available()) {
*base_addr = bleuart.read();
basis_addr++;
j++;
}
}
// Setel warna
uint32_t neopixelIndex = y*langkah+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
warna uint32_t;
if (komponen == 3) {
warna = neopixel. Color(*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf("\tcolor (%d, %d, %d)\n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
lain {
warna = 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, warna);
neopixel.show();
// Selesai
sendResponse("Oke");
}
batalkan perintahImage() {
Serial.printf("Perintah: Gambar %dx%d, %d, %d\n", lebar, tinggi, komponen, langkah);
// Terima buffer piksel baru
int ukuran = lebar * tinggi;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i < ukuran; i++) {
for (int j = 0; j < komponen;) {
if (bleuart.available()) {
*base_addr = bleuart.read();
basis_addr++;
j++;
}
}
/*
if (komponen == 3) {
indeks uint32_t = i*komponen;
Serial.printf("\tp%d (%d, %d, %d)\n", i, pixelBuffer[index], pixelBuffer[index+1], pixelBuffer[index+2]);
}
*/
}
// Tukar buffer
Serial.println(F("Gambar diterima"));
swapBuffer();
// Selesai
sendResponse("Oke");
}
void sendResponse(char const *respon) {
Serial.printf("Kirim Respons: %s\n", respon);
bleuart.write(respons, strlen(respons)*sizeof(char));
}