Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
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));
}