İçindekiler:
- Adım 1: Adım 1: Devreyi Lehimleyin
- Adım 2: Adım 2: Kodu Yazın
- Adım 3: Adım 3: Abajur Satın Alma
- Adım 4: Adım 4: Hepsini Bir Araya Çekin
- Adım 5: Adım 5: Oyun Kartları Yapma
Video: Gerçekten Meydan Okuma: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
Modern dünya, insanların fiziksel olanın dışına çıkmasını ve dijitalin içinde yaşamasını gerektiriyor.
Al'ın ortaya çıkması ve teknolojinin yaygınlaşmasıyla birlikte insanlar makineye çok fazla güveniyor ve her zaman doğru olduğuna inanıyorlar.
“Gerçekten”, sahte bir yalan dedektörü testi oluşturarak bu yanlış güveni sarsmayı amaçlamaktadır. İnsanlar, Gerçekten'in çalıştığına kolayca inanacaklar, ancak yanlış cevaplar verildiğinde, teknolojiye olan kör güvenlerini sarsacak.
Adım 1: Adım 1: Devreyi Lehimleyin
İşlerimde tek ışık olduğu için lehimlemesi çok kolay. Asıl sorun başlangıçta iki ışık lehimledim ama pozlama kısmını hemen kapatmadım. Yani iki tel parçası birbirine dokunduğunda. Kısa çıktı.
Adım 2: Adım 2: Kodu Yazın
p.p1 {marj: 0.0px 0.0px 0.0px 0.0px; satır yüksekliği: 15.0 piksel; yazı tipi: 12.0px Times; renk: #000000; arka plan rengi: #ffffff}
p.p2 {marj: 0.0px 0.0px 0.0px 0.0px; satır yüksekliği: 15.0 piksel; yazı tipi: 12.0px Times; renk: #000000; arka plan rengi: #ffffff; min-height: 14.0px} span.s1 {font-kerning: yok}
Adım 2: Kodu Yazın
/*********************************************************************
Bu, nRF52 tabanlı Bluefruit LE modüllerimiz için bir örnektir.
Adafruit mağazasından bugün bir tane alın!
Adafruit, bu açık kaynak kodunu sağlayan zaman ve kaynaklara yatırım yapar, lütfen satın alarak Adafruit ve açık kaynaklı donanımı destekleyin
Adafruit'ten ürünler!
MIT lisansı, daha fazla bilgi için LİSANSI kontrol edin
Yukarıdaki tüm metinler ve aşağıdaki açılış ekranı dahil edilmelidir.
herhangi bir yeniden dağıtım
*********************************************************************
/ Bu çizim NeoPixel kontrolü ile kullanılmak üzere tasarlanmıştır.
// Adafruit'in Bluefruit LE Connect mobil uygulamasında yüzey.
/
/ - Bu çizimi derleyin ve nRF52 Feather'a aktarın
// - Bluefruit LE Connect uygulamasını açın
// - NeoPixel yardımcı programına geç
// - Bir bağlantı kurmak için 'bağlan' düğmesine tıklayın ve
// piksel düzeniyle ilgili meta verileri gönder
// - Cihazınızdaki pikselleri güncellemek için NeoPixel yardımcı programını kullanın
/* NOT: Bu çizim, Adafruit_Neopixel'in en az 1.1.0 sürümünü gerektiriyordu !!! */
#Dahil etmek
#Dahil etmek
#Dahil etmek
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 /* NeoPixels'i sürmek için kullanılan pin */
#define MAX BİLEŞENLER 4
uint8_t *pixelBuffer = NULL;
uint8_t genişlik = 0;
uint8_t yükseklik = 0;
uint8_t adım;
uint8_t componentValue;
bool 400Hz;
uint8_t bileşenleri = 3; // sadece 3 ve 4 geçerli değerlerdir
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel();
// BLE Servisi
BLEDfu bledfu;
BLED bledis;
BLEUart bleuart;
geçersiz kurulum()
{
Seri.başla(115200);
while (!Seri) gecikme(10); // yerel usb ile nrf52840 için
Serial.println("Adafruit Bluefruit Neopiksel Testi");
Serial.println("--------------------------------");
Seri.println();
Serial.println("Lütfen Bluefruit Connect LE uygulamasını kullanarak bağlanın");
// Neopikselleri Yapılandır
neopixel.begin();
// Bluefruit Başlat
Bluefruit.begin();
Bluefruit.setTxPower(4); // Desteklenen değerler için bluefruit.h'yi kontrol edin
Bluefruit.setName("Bluefruit52");
Bluefruit. Periph.setConnectCallback(connect_callback);
// Tutarlı olması için, varsa önce OTA DFU eklenmelidir.
bledfu.begin();
// Cihaz Bilgi Hizmetini Yapılandırın ve Başlatın
bledis.setManufacturer("Adafruit Industries");
bledis.setModel("Bluefruit Feather52");
bledis.begin();
// BLE UART hizmetini yapılandırın ve başlatın
bleuart.begin();
// Reklamı kurun ve başlatın
startAdv();
}
void startAdv(void)
{
// Reklam paketi
Bluefruit. Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower();
// bleuart 128-bit kullanıcı kimliğini dahil et
Bluefruit. Advertising.addService(bleuart);
// İkincil Tarama Yanıtı paketi (isteğe bağlı)
// Reklam paketinde 'Ad' için yer olmadığı için
Bluefruit. ScanResponse.addName();
/* Reklamı Başlat
* - Bağlantı kesilirse otomatik reklamcılığı etkinleştir
* - Aralık: hızlı mod = 20 ms, yavaş mod = 152,5 ms
* - Hızlı mod için zaman aşımı 30 saniyedir
* - Zaman aşımı = 0 ile başlatma (zaman aşımı) sonsuza kadar reklam verir (bağlanana kadar)
*
* Önerilen reklam aralığı için
*
*/
Bluefruit. Advertising.restartOnDisconnect(true);
Bluefruit. Advertising.setInterval(32, 244); // 0.625 ms biriminde
Bluefruit. Advertising.setFastTimeout(30); // hızlı modda saniye sayısı
Bluefruit. Reklam.start(0); // 0 = n saniye sonra reklamı durdurma
}
geçersiz connect_callback(uint16_t conn_handle)
{
// Geçerli bağlantının referansını al
BLEConnection* bağlantı = Bluefruit. Connection(conn_handle);
char merkez_adı[32] = { 0 };
bağlantı->getPeerName(central_name, sizeof(central_name));
Serial.print("Bağlandı");
Serial.println(merkez_adı);
Serial.println("Lütfen 'Neopikseller' sekmesini seçin, 'Bağlan'a tıklayın ve iyi eğlenceler");
}
boşluk döngüsü()
{
// Eko alınan veri
if (Bluefruit.connected() && bleuart.notifyEnabled())
{
int komut = bleuart.read();
geçiş (komut) {
case 'V': { // Sürümü Al
komutVersion();
kırmak;
}
case 'S': { // Kurulum boyutları, bileşenler, adım…
komutSetup();
kırmak;
}
case 'C': { // Renkle temizle
komutClearColor();
kırmak;
}
case 'B': { // Parlaklığı Ayarla
komutSetBrightness();
kırmak;
}
case 'P': { // Piksel Ayarla
komutSetPixel();
kırmak;
}
case 'I': { // Yeni imaj al
komutGörüntü();
kırmak;
}
}
}
}
geçersiz takasBuffers()
{
uint8_t *base_addr = pixelBuffer;
int pikselIndex = 0;
for (int j = 0; j < yükseklik; j++)
{
for (int i = 0; i < genişlik; i++) {
if (bileşenler == 3) {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2)));
}
Başka {
neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+=bileşenler;
pikselIndex++;
}
pixelIndex += adım - genişlik; // pixelIndex'i bir sonraki satıra taşıyın (adımı dikkate alın)
}
neopixel.show();
}
geçersiz komutVersion() {
Serial.println(F("Komut: Sürüm kontrolü"));
sendResponse(NEOPIXEL_VERSION_STRING);
}
geçersiz komutSetup() {
Serial.println(F("Komut: Kurulum"));
genişlik = bleuart.read();
yükseklik = bleuart.read();
adım = bleuart.read();
componentValue = bleuart.read();
is400Hz = bleuart.read();
neoPixelType pixelType;
pixelType = componentValue + (400Hz ? NEO_KHZ400: NEO_KHZ800);
bileşenler = (bileşenlerDeğeri == NEO_RGB || componentDeğeri == NEO_RBG || componentDeğeri == NEO_GRB || componentDeğeri == NEO_GBR || componentDeğeri == NEO_BRG || componentDeğeri == NEO_BGR) ? 3:4;
Serial.printf("\tsize: %dx%d\n", genişlik, yükseklik);
Serial.printf("\tadım: %d\n", adım);
Serial.printf("\tpixelType %d\n", pixelType);
Serial.printf("\tbileşenler: %d\n", bileşenler);
if (pixelBuffer != NULL) {
sil pixelBuffer;
}
uint32_t boyut = genişlik*yükseklik;
pixelBuffer = yeni uint8_t[boyut*bileşenler];
neopixel.updateLength(boyut);
neopixel.updateType(pixelType);
neopixel.setPin(PIN);
// Tamamlandı
sendResponse("Tamam");
}
geçersiz komutSetBrightness() {
Serial.println(F("Komut: SetBrightness"));
// Değeri oku
uint8_t parlaklık = bleuart.read();
// Parlaklığı ayarla
neopixel.setBrightness(parlaklık);
// Pikselleri yenile
takasBuffers();
// Tamamlandı
sendResponse("Tamam");
}
void komutuClearColor() {
Serial.println(F("Komut: ClearColor"));
// rengi oku
uint8_t color[MAKS BİLEŞENLER];
for (int j = 0; j < bileşenler;) {
if (bleuart.available()) {
renk[j] = bleuart.read();
j++;
}
}
// Tüm ledleri renge ayarla
int boyut = genişlik * yükseklik;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i < boyut; i++) {
for (int j = 0; j < bileşenler; j++) {
*base_addr = renk[j];
base_addr++;
}
}
// Tamponları değiştir
Serial.println(F("ClearColor tamamlandı"));
takasBuffers();
if (bileşenler == 3) {
Serial.printf("\tclear (%d, %d, %d)\n", color[0], color[1], color[2]);
}
Başka {
Serial.printf("\tclear (%d, %d, %d, %d)\n", color[0], color[1], color[2], color[3]);
}
// Tamamlandı
sendResponse("Tamam");
}
geçersiz komutSetPixel() {
Serial.println(F("Komut: SetPixel"));
// pozisyonu oku
uint8_t x = bleuart.read();
uint8_t y = bleuart.read();
// renkleri oku
uint32_t pixelOffset = y*genişlik+x;
uint32_t pixelDataOffset = pixelOffset*bileşenleri;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j < bileşenler;) {
if (bleuart.available()) {
*base_addr = bleuart.read();
base_addr++;
j++;
}
}
// Renkleri ayarla
uint32_t neopixelIndex = y*adım+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t renk;
if (bileşenler == 3) {
renk = neopixel. Color(*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf("\tcolor (%d, %d, %d)\n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
Başka {
renk = 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, color);
neopixel.show();
// Tamamlandı
sendResponse("Tamam");
}
geçersiz komutImage() {
Serial.printf("Komut: Görüntü %dx%d, %d, %d\n", genişlik, yükseklik, bileşenler, adım);
// Yeni piksel arabelleği al
int boyut = genişlik * yükseklik;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i < boyut; i++) {
for (int j = 0; j < bileşenler;) {
if (bleuart.available()) {
*base_addr = bleuart.read();
base_addr++;
j++;
}
}
/*
if (bileşenler == 3) {
uint32_t dizin = i*bileşenler;
Serial.printf("\tp%d (%d, %d, %d)\n", i, pixelBuffer[index], pixelBuffer[index+1], pixelBuffer[index+2]);
}
*/
}
// Tamponları değiştir
Serial.println(F("Görüntü alındı"));
takasBuffers();
// Tamamlandı
sendResponse("Tamam");
}
geçersiz sendResponse(char const *yanıt) {
Serial.printf("Yanıt Gönder: %s\n", yanıt);
bleuart.write(yanıt, strlen(yanıt)*sizeof(char));
}
Adım 3: Adım 3: Abajur Satın Alma
Adım 4: Adım 4: Hepsini Bir Araya Çekin
Önerilen:
Gerçekten Ucuz Basınç Sensörleri Nasıl Yapılır: 6 Adım (Resimlerle)
Gerçekten Ucuz Basınç Sensörleri Nasıl Yapılır: Son zamanlarda yaygın ev eşyalarından anahtarlar yapmaya başladım ve etrafta yattığım birkaç süngerden bir bütçeyle kendi basınç sensörümü yapmaya karar verdim. Bunun bütçe basınç sensörlerinin diğer versiyonlarından farklı olmasının nedeni,
Gerçekten WiFi Genişletici: 5 Adım
Truly WiFi Extender: GirişTruly WiFi Extender, Raspberry Pi Zero W tabanlı bir WiFi tekrarlayıcıdır. Düşük maliyetli (10 USD'nin altında) ve son derece özelleştirilebilir yazılımı birleştiren ticari bir WiFi tekrarlayıcıya güzel bir alternatiftir. Ayrıca bazı reklam engelleme çözümlerini de çalıştırabilir
Gerçekten NAS'a benzeyen Ahududu Pi NAS: 13 Adım (Resimlerle)
Gerçekten NAS'a benzeyen bir Raspberry Pi NAS: Neden Raspberry Pi NASİyi, internetten güzel ama yerden tasarruf sağlayan Raspberry Pi NAS'ı arıyordum ve hiçbir şey bulamadım. Bir Raspberry Pi ile ahşap bir tabana yapıştırılmış bazı NAS tasarımları buldum ama istediğim bu değil. İstiyorum
Gerçekten, GERÇEKTEN Kolay USB Motoru!: 3 Adım
Gerçekten, GERÇEKTEN Kolay USB Motoru !: Sonunda, 2. talimatım !!! Bu, herhangi bir kullanılabilir USB bağlantı noktasından çalışan sizin veya bilgisayarınız için bir fandır. Elektroniğe yeni başlayanlar için profesyonellere kadar tavsiye ederim. Kolay ve eğlenceli, kelimenin tam anlamıyla beş dakika içinde yapabilirsiniz !!! GERÇEK
GIMP Kullanarak İnsanları/insanları/hayvanları/robotları Gerçekten Harika/parlak Isı Görüşüne Sahip (Seçtiğiniz Renk) Görünmeleri İçin Gerçekten Basit/Kolay/Karmaşık Olmayan Bir Yol: 4 Adım
GIMP Kullanarak İnsanları/insanları/hayvanları/robotları Gerçekten Harika/parlak Isı Görüşüne Sahip (Seçtiğiniz Renk) Görünmeleri İçin Gerçekten Basit/Kolay/Karmaşık Olmayan Bir Yol: Oku…başlığı