Wirklich herausfordern: 5 Schritte
Wirklich herausfordern: 5 Schritte
Anonim
Image
Image
Schritt 1: Löten Sie die Schaltung
Schritt 1: Löten Sie die Schaltung

Die moderne Welt verlangt vom Menschen, aus dem Physischen herauszutreten und im Digitalen zu leben.

Mit dem Erscheinen von Al und der Verbreitung der Technologie vertrauen die Leute zu sehr auf die Maschine und glauben, dass sie immer richtig ist.

„Wirklich“soll dieses falsche Vertrauen durch die Erstellung eines gefälschten Lügendetektortests erschüttern. Die Leute werden leicht glauben, dass Really funktioniert, aber wenn falsche Antworten gegeben werden, wird ihr blindes Vertrauen in die Technologie erschüttert.

Schritt 1: Schritt 1: Löten Sie die Schaltung

Da mein Werk nur ein Licht hat, ist es sehr einfach zu löten. Das Hauptproblem ist am Anfang, ich löte zwei Lichter, aber ich habe den Belichtungsteil nicht sofort abgedeckt. Also, wenn sich die beiden Drähte berühren. Es kurz aus.

Schritt 2: Schritt 2: Schreiben Sie den Code

p.p1 {Rand: 0.0px 0.0px 0.0px 0.0px; Zeilenhöhe: 15.0px; Schriftart: 12.0px Mal; Farbe: #000000; Hintergrundfarbe: #ffffff}

p.p2 {Rand: 0.0px 0.0px 0.0px 0.0px; Zeilenhöhe: 15.0px; Schriftart: 12.0px Mal; Farbe: #000000; Hintergrundfarbe: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Schritt 2: Schreiben Sie den Code

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

Dies ist ein Beispiel für unsere nRF52-basierten Bluefruit LE-Module

Holen Sie sich noch heute eine im adafruit-Shop!

Adafruit investiert Zeit und Ressourcen, um diesen Open-Source-Code bereitzustellen, Bitte unterstützen Sie Adafruit und Open-Source-Hardware durch den Kauf

Produkte von Adafruit!

MIT-Lizenz, siehe LIZENZ für weitere Informationen

Der gesamte Text oben und der Begrüßungsbildschirm unten müssen in enthalten sein

jede Umverteilung

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

/ Diese Skizze soll mit der NeoPixel-Steuerung verwendet werden

// Oberfläche in der mobilen Anwendung Bluefruit LE Connect von Adafruit.

/

/ - Kompilieren und flashen Sie diesen Sketch auf die nRF52 Feather

// - Öffnen Sie die Bluefruit LE Connect-App

// - Wechseln Sie zum NeoPixel-Dienstprogramm

// - Klicken Sie auf die Schaltfläche 'Verbinden', um eine Verbindung herzustellen und

// sende die Metadaten zum Pixellayout

// - Verwenden Sie das NeoPixel-Dienstprogramm, um die Pixel auf Ihrem Gerät zu aktualisieren

/* HINWEIS: Dieser Sketch benötigt mindestens Version 1.1.0 von Adafruit_Neopixel !!! */

#enthalten

#enthalten

#enthalten

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 /* Pin zum Ansteuern der NeoPixel */

#define MAXCOMPONENTS 4

uint8_t *pixelBuffer = NULL;

uint8_t Breite = 0;

uint8_t Höhe = 0;

uint8_t Schritt;

uint8_t KomponentenWert;

bool ist 400Hz;

uint8_t-Komponenten = 3; // nur 3 und 4 sind gültige Werte

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel();

// BLE-Service

Bledfu Bledfu;

BLEDist bledis;

BLEUart bleuart;

Void-Setup ()

{

Serial.begin(115200);

while (!Seriell) delay(10); // für nrf52840 mit nativem USB

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

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

Serial.println();

Serial.println ("Bitte verbinden Sie sich mit der Bluefruit Connect LE-Anwendung");

// Neopixel konfigurieren

neopixel.begin();

// Init Blaufrucht

Blaufrucht.begin();

Bluefruit.setTxPower(4); // Überprüfen Sie bluefruit.h auf unterstützte Werte

Bluefruit.setName("Bluefruit52");

Bluefruit. Periph.setConnectCallback(connect_callback);

// Um konsistent zu sein, sollte OTA DFU zuerst hinzugefügt werden, falls vorhanden

bledfu.begin();

// Geräteinformationsdienst konfigurieren und starten

bledis.setManufacturer("Adafruit Industries");

bledis.setModel("Blaufruchtfeder52");

bledis.begin();

// Konfigurieren und starten Sie den BLE UART-Dienst

bleuart.begin();

// Einrichten und Werbung starten

startAdv();

}

void startAdv(void)

{

// Werbepaket

Bluefruit. Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower();

// Bleuart 128-Bit-UUID einbinden

Bluefruit. Advertising.addService(bleuart);

// Sekundäres Scan-Antwort-Paket (optional)

// Da im Werbepaket kein Platz für 'Name' ist

Bluefruit. ScanResponse.addName();

/* Werbung starten

* - Automatische Werbung aktivieren, wenn die Verbindung getrennt ist

* - Intervall: schneller Modus = 20 ms, langsamer Modus = 152,5 ms

* - Timeout für den Schnellmodus beträgt 30 Sekunden

* - Start(timeout) mit timeout = 0 wird für immer werben (bis verbunden)

*

* Für empfohlenes Werbeintervall

*

*/

Bluefruit. Advertising.restartOnDisconnect(true);

Bluefruit. Advertising.setInterval(32, 244); // in der Einheit 0,625 ms

Bluefruit. Advertising.setFastTimeout(30); // Anzahl der Sekunden im Schnellmodus

Blaufrucht. Werbung.start(0); // 0 = Werbung nicht nach n Sekunden stoppen

}

void connect_callback(uint16_t conn_handle)

{

// Holen Sie sich den Verweis auf die aktuelle Verbindung

BLEConnection*-Verbindung = Bluefruit. Connection(conn_handle);

char zentraler_name[32] = { 0 };

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

Serial.print ("Verbunden mit");

Serial.println (zentraler_name);

Serial.println ("Bitte wählen Sie die Registerkarte "Neopixels", klicken Sie auf "Verbinden" und haben Sie Spaß");

}

Leere Schleife ()

{

// Echo empfangene Daten

if (Bluefruit.connected() && bleuart.notifyEnabled())

{

int-Befehl = bleuart.read();

Schalter (Befehl) {

Fall 'V': { // Version abrufen

BefehlVersion();

brechen;

}

Fall 'S': { // Setup Abmessungen, Komponenten, Schrittlänge…

BefehlSetup();

brechen;

}

Fall 'C': { // Mit Farbe löschen

BefehlClearColor();

brechen;

}

Fall 'B': { // Helligkeit einstellen

BefehlSetHelligkeit();

brechen;

}

Fall 'P': { // Pixel setzen

commandSetPixel();

brechen;

}

Fall 'I': { // Neues Bild empfangen

BefehlImage();

brechen;

}

}

}

}

void swapPuffer()

{

uint8_t *base_addr = PixelBuffer;

int pixelIndex = 0;

für (int j = 0; j < Höhe; j++)

{

für (int i = 0; i < Breite; i ++) {

if (Komponenten == 3) {

neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2)));

}

anders {

neopixel.setPixelColor(pixelIndex, neopixel. Color(*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));

}

base_addr+=Komponenten;

PixelIndex++;

}

PixelIndex += Schrittweite - Breite; // PixelIndex in die nächste Zeile verschieben (Schritte berücksichtigen)

}

neopixel.show();

}

void befehlVersion() {

Serial.println (F ("Befehl: Versionsprüfung"));

sendResponse(NEOPIXEL_VERSION_STRING);

}

void befehlSetup() {

Serial.println (F ("Befehl: Setup"));

Breite = bleuart.read();

Höhe = bleuart.read();

Schritt = bleuart.read();

KomponentenWert = bleuart.read();

is400Hz = bleuart.read();

neoPixelType PixelType;

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

Komponenten = (KomponentenWert == NEO_RGB || KomponentenWert == NEO_RBG || KomponentenWert == NEO_GRB || KomponentenWert == NEO_GBR || KomponentenWert == NEO_BRG || KomponentenWert == NEO_BGR) ? 3:4;

Serial.printf("\tsize: %dx%d\n", Breite, Höhe);

Serial.printf("\tstride: %d\n", stride);

Serial.printf("\tpixelType %d\n", pixelType);

Serial.printf("\tcomponents: %d\n", Komponenten);

if (pixelBuffer != NULL) {

delete PixelBuffer;

}

uint32_t Größe = Breite*Höhe;

pixelBuffer = new uint8_t[Größe*Komponenten];

neopixel.updateLength(Größe);

neopixel.updateType(pixelType);

neopixel.setPin(PIN);

// Fertig

sendResponse("OK");

}

void commandSetBrightness() {

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

// Wert lesen

uint8_t Helligkeit = bleuart.read();

// Helligkeit einstellen

neopixel.setHelligkeit(Helligkeit);

// Pixel aktualisieren

swapPuffer();

// Fertig

sendResponse("OK");

}

void befehlClearColor() {

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

// Farbe lesen

uint8_t color[MAXCOMPONENTS];

für (int j = 0; j < Komponenten;) {

if (bleuart.verfügbar()) {

color[j] = bleuart.read();

j++;

}

}

// Setze alle LEDs auf Farbe

int-Größe = Breite * Höhe;

uint8_t *base_addr = PixelBuffer;

für (int i = 0; i < Größe; i ++) {

for (int j = 0; j < Komponenten; j++) {

*base_addr = Farbe[j];

base_addr++;

}

}

// Puffer tauschen

Serial.println (F ("ClearColor abgeschlossen"));

swapPuffer();

if (Komponenten == 3) {

Serial.printf("\tclear (%d, %d, %d)\n", color[0], color[1], color[2]);

}

anders {

Serial.printf("\tclear (%d, %d, %d, %d)\n", color[0], color[1], color[2], color[3]);

}

// Fertig

sendResponse("OK");

}

Void-BefehlSetPixel() {

Serial.println (F ("Befehl: SetPixel"));

// Position lesen

uint8_t x = bleuart.read();

uint8_t y = bleuart.read();

// Farben lesen

uint32_t pixelOffset = y*Breite+x;

uint32_t pixelDataOffset = pixelOffset*Komponenten;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

für (int j = 0; j < Komponenten;) {

if (bleuart.verfügbar()) {

*base_addr = bleuart.read();

base_addr++;

j++;

}

}

// Farben einstellen

uint32_t neopixelIndex = y*Schrittweite+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t Farbe;

if (Komponenten == 3) {

color = neopixel. Color(*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

Serial.printf("\tcolor (%d, %d, %d)\n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

}

anders {

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, Farbe);

neopixel.show();

// Fertig

sendResponse("OK");

}

void commandImage() {

Serial.printf("Befehl: Bild %dx%d, %d, %d\n", Breite, Höhe, Komponenten, Schrittlänge);

// Empfange neuen Pixelpuffer

int-Größe = Breite * Höhe;

uint8_t *base_addr = PixelBuffer;

für (int i = 0; i < Größe; i ++) {

für (int j = 0; j < Komponenten;) {

if (bleuart.verfügbar()) {

*base_addr = bleuart.read();

base_addr++;

j++;

}

}

/*

if (Komponenten == 3) {

uint32_t-Index = i*Komponenten;

Serial.printf("\tp%d (%d, %d, %d)\n", i, pixelBuffer[index], pixelBuffer[index+1], pixelBuffer[index+2]);

}

*/

}

// Puffer tauschen

Serial.println (F ("Bild empfangen"));

swapPuffer();

// Fertig

sendResponse("OK");

}

void sendResponse(char const *Antwort) {

Serial.printf("Antwort senden: %s\n", Antwort);

bleuart.write(Antwort, strlen(Antwort)*sizeof(char));

}

Schritt 3: Schritt 3: Lampenschirm kaufen

Schritt 3: Lampenschirm kaufen
Schritt 3: Lampenschirm kaufen
Schritt 3: Lampenschirm kaufen
Schritt 3: Lampenschirm kaufen

Schritt 4: Schritt 4: Ziehen Sie alles zusammen