Πίνακας περιεχομένων:

Πραγματικά πρόκληση: 5 βήματα
Πραγματικά πρόκληση: 5 βήματα

Βίντεο: Πραγματικά πρόκληση: 5 βήματα

Βίντεο: Πραγματικά πρόκληση: 5 βήματα
Βίντεο: 4 Λεπτά Ασκήσεις Στο Σπίτι Που Αντικαθιστούν 1 Ώρα Στο Γυμναστήριο! 2024, Ιούλιος
Anonim
Image
Image
Βήμα 1: Συγκολλήστε το κύκλωμα
Βήμα 1: Συγκολλήστε το κύκλωμα

Ο σύγχρονος κόσμος απαιτεί από τους ανθρώπους να βγουν από το φυσικό και να ζήσουν μέσα στο ψηφιακό.

Με την εμφάνιση του Al και τον πολλαπλασιασμό της τεχνολογίας, οι άνθρωποι έχουν μεγάλη εμπιστοσύνη στο μηχάνημα και πιστεύουν ότι είναι πάντα σωστό.

Το «Πραγματικά» έχει σκοπό να κλονίσει αυτήν την ψεύτικη εμπιστοσύνη μέσω της δημιουργίας ενός ψεύτικου τεστ ανιχνευτή ψεύδους. Οι άνθρωποι θα πιστέψουν εύκολα ότι το Really λειτουργεί, αλλά όταν δοθούν ψευδείς απαντήσεις θα κλονίσει την τυφλή εμπιστοσύνη τους στην τεχνολογία.

Βήμα 1: Βήμα 1: Κολλήστε το κύκλωμα

Επειδή τα έργα μου έχουν μόνο ένα φως, επομένως είναι πολύ εύκολο να κολληθούν. Το κύριο πρόβλημα είναι στην αρχή, κόλλησα δύο φωτιστικά, αλλά δεν κάλυψα αμέσως το τμήμα έκθεσης. Έτσι, όταν τα δύο καλώδια χωρίζονται αγγίζουν μεταξύ τους. Βγήκε σύντομα.

Βήμα 2: Βήμα 2: Γράψτε τον Κώδικα

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; γραμμή-ύψος: 15.0px; γραμματοσειρά: 12.0px Times; χρώμα: #000000; φόντο-χρώμα: #ffffff}

p.p2 {περιθώριο: 0.0px 0.0px 0.0px 0.0px; γραμμή-ύψος: 15.0px; γραμματοσειρά: 12.0px Times; χρώμα: #000000; χρώμα φόντου: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}

Βήμα 2: Γράψτε τον κωδικό

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

Αυτό είναι ένα παράδειγμα για τις μονάδες BlueFruit LE που βασίζονται σε nRF52

Πάρτε ένα σήμερα στο κατάστημα adafruit!

Η Adafruit επενδύει χρόνο και πόρους παρέχοντας αυτόν τον ανοιχτό κώδικα, υποστηρίξτε το Adafruit και το υλικό ανοιχτού κώδικα αγοράζοντας

προϊόντα από την Adafruit!

Άδεια MIT, ελέγξτε την ΑΔΕΙΑ για περισσότερες πληροφορίες

Όλο το παραπάνω κείμενο και η οθόνη παφλασμού παρακάτω πρέπει να συμπεριληφθούν

οποιαδήποτε αναδιανομή

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

/ Αυτό το σκίτσο προορίζεται για χρήση με το χειριστήριο NeoPixel

// επιφάνεια στην εφαρμογή για κινητά του Adafruit Bluefruit LE Connect.

/

/ - Μεταγλωττίστε και αναβοσβήνετε αυτό το σκίτσο στο φτερό nRF52

// - Ανοίξτε την εφαρμογή Bluefruit LE Connect

// - Μετάβαση στο βοηθητικό πρόγραμμα NeoPixel

// - Κάντε κλικ στο κουμπί "σύνδεση" για να δημιουργήσετε μια σύνδεση και

// αποστολή των μεταδεδομένων σχετικά με τη διάταξη pixel

// - Χρησιμοποιήστε το βοηθητικό πρόγραμμα NeoPixel για να ενημερώσετε τα εικονοστοιχεία στη συσκευή σας

/* ΣΗΜΕΙΩΣΗ: Αυτό το σκίτσο απαιτούσε τουλάχιστον την έκδοση 1.1.0 του Adafruit_Neopixel !!! */

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"

#define PIN 16 / * Το pin χρησιμοποιείται για την οδήγηση των NeoPixels * /

#define MAXCOMPONENTS 4

uint8_t *pixelBuffer = NULL;

uint8_t πλάτος = 0;

uint8_t ύψος = 0;

uint8_t βήμα;

uint8_t συστατικάValue;

bool is400Hz?

συστατικά uint8_t = 3; // μόνο 3 και 4 είναι έγκυρες τιμές

Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();

// Υπηρεσία BLE

BLEDfu bledfu?

BLEDis bledis?

BLEUart bleuart?

void setup ()

{

Serial.begin (115200);

ενώ (! Σειριακή) καθυστέρηση (10)? // για nrf52840 με εγγενές usb

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

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

Serial.println ();

Serial.println ("Συνδεθείτε χρησιμοποιώντας την εφαρμογή Bluefruit Connect LE");

// Διαμόρφωση νέων εικονοστοιχείων

neopixel.begin ();

// Init Bluefruit

Bluefruit.begin ();

Bluefruit.setTxPower (4); // Ελέγξτε το bluefruit.h για υποστηριζόμενες τιμές

Bluefruit.setName ("Bluefruit52");

Bluefruit. Periph.setConnectCallback (connect_callback);

// Για να είναι συνεπής, το OTA DFU πρέπει να προστεθεί πρώτα εάν υπάρχει

bledfu.begin ();

// Διαμόρφωση και εκκίνηση υπηρεσίας πληροφοριών συσκευής

bledis.setManufacturer ("Βιομηχανίες Adafruit");

bledis.setModel ("Bluefruit Feather52");

bledis.begin ();

// Διαμορφώστε και ξεκινήστε την υπηρεσία BLE UART

bleuart.begin ();

// Ρυθμίστε και ξεκινήστε τη διαφήμιση

startAdv ();

}

void startAdv (άκυρο)

{

// Διαφημιστικό πακέτο

Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

Bluefruit. Advertising.addTxPower ();

// Συμπεριλάβετε bleuart 128-bit uuid

Bluefruit. Advertising.addService (bleuart);

// Πακέτο δευτερεύουσας απάντησης σάρωσης (προαιρετικό)

// Δεδομένου ότι δεν υπάρχει χώρος για "Όνομα" στο πακέτο διαφήμισης

Bluefruit. ScanResponse.addName ();

/* Έναρξη διαφήμισης

* - Ενεργοποιήστε την αυτόματη διαφήμιση εάν αποσυνδεθείτε

* - Διάστημα: γρήγορη λειτουργία = 20 ms, αργή λειτουργία = 152,5 ms

* - Το χρονικό όριο για γρήγορη λειτουργία είναι 30 δευτερόλεπτα

* - Έναρξη (timeout) με timeout = 0 θα διαφημίζεται για πάντα (μέχρι να συνδεθεί)

*

* Για συνιστώμενο διάστημα διαφήμισης

*

*/

Bluefruit. Advertising.restartOnDisconnect (αληθινό);

Bluefruit. Advertising.setInterval (32, 244); // σε μονάδα 0,625 ms

Bluefruit. Advertising.setFastTimeout (30); // αριθμός δευτερολέπτων σε γρήγορη λειτουργία

Bluefruit. Advertising.start (0); // 0 = Μην σταματήσετε τη διαφήμιση μετά από n δευτερόλεπτα

}

void connect_callback (uint16_t conn_handle)

{

// Λάβετε την αναφορά στην τρέχουσα σύνδεση

BLEConnection* σύνδεση = Bluefruit. Connection (conn_handle);

char κεντρικό όνομα [32] = {0};

σύνδεση-> getPeerName (κεντρικό_ όνομα, μέγεθος (κεντρικό_ όνομα)).

Serial.print ("Συνδέθηκε με");

Serial.println (κεντρικό_ όνομα);

Serial.println ("Επιλέξτε την καρτέλα" Neopixels ", κάντε κλικ στο" Connect "και διασκεδάστε");

}

κενός βρόχος ()

{

// Η Ηχώ έλαβε δεδομένα

εάν (Bluefruit.connected () && bleuart.notifyEnabled ())

{

εντολή int = bleuart.read ();

διακόπτης (εντολή) {

περίπτωση 'V': {// Λήψη έκδοσης

commandVersion ();

Διακοπή;

}

υπόθεση 'S': {// Διαμόρφωση διαστάσεων, εξαρτημάτων, βήματος…

commandSetup ();

Διακοπή;

}

περίπτωση 'C': {// Διαγραφή με χρώμα

commandClearColor ();

Διακοπή;

}

υπόθεση 'B': {// Set Brightness

commandSetBrightness ();

Διακοπή;

}

υπόθεση 'P': {// Set Pixel

commandSetPixel ();

Διακοπή;

}

περίπτωση 'I': {// Λήψη νέας εικόνας

commandImage ();

Διακοπή;

}

}

}

}

void swapBuffers ()

{

uint8_t *base_addr = pixelBuffer;

int pixelIndex = 0;

για (int j = 0; j <ύψος; j ++)

{

για (int i = 0; i <πλάτος; i ++) {

εάν (στοιχεία == 3) {

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

}

αλλιώς {

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

}

base_addr+= συστατικά.

pixelIndex ++;

}

pixelIndex += διασκελισμός - πλάτος; // Μετακίνηση pixelIndex στην επόμενη σειρά (λάβετε υπόψη το βήμα)

}

neopixel.show ();

}

void commandVersion () {

Serial.println (F ("Command: Version check"));

sendResponse (NEOPIXEL_VERSION_STRING);

}

void commandSetup () {

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

πλάτος = bleuart.read ();

ύψος = bleuart.read ();

stride = bleuart.read ();

συστατικάValue = bleuart.read ();

is400Hz = bleuart.read ();

neoPixelType pixelType;

pixelType = συστατικάValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);

συστατικά = (συστατικάValue == NEO_RGB || στοιχείαValue == NEO_RBG || στοιχείαValue == NEO_GRB || στοιχείαValue == NEO_GBR || στοιχείαValue == NEO_BRG || στοιχείαValue == NEO_BGR); 3: 4;

Serial.printf ("\ tsize: %dx %d / n", πλάτος, ύψος);

Serial.printf ("\ tstride: %d / n", βήμα);

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

Serial.printf ("\ tστοιχεία: %d / n", στοιχεία);

αν (pixelBuffer! = NULL) {

διαγραφή pixelBuffer;

}

uint32_t μέγεθος = πλάτος*ύψος;

pixelBuffer = νέο uint8_t [μέγεθος*στοιχεία];

neopixel.updateLength (μέγεθος);

neopixel.updateType (pixelType);

neopixel.setPin (PIN);

// Εγινε

sendResponse ("ΟΚ");

}

void commandSetBrightness () {

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

// Τιμή ανάγνωσης

uint8_t brightness = bleuart.read ();

// Ρυθμίστε τη φωτεινότητα

neopixel.setBrightness (φωτεινότητα);

// Ανανέωση εικονοστοιχείων

swapBuffers ();

// Εγινε

sendResponse ("ΟΚ");

}

void commandClearColor () {

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

// Διαβάστε χρώμα

uint8_t χρώμα [MAXCOMPONENTS];

για (int j = 0; j <συστατικά;) {

εάν (bleuart.available ()) {

χρώμα [j] = bleuart.read ();

j ++;

}

}

// Ορίστε όλα τα led σε χρώμα

int μέγεθος = πλάτος * ύψος;

uint8_t *base_addr = pixelBuffer;

για (int i = 0; i <μέγεθος; i ++) {

για (int j = 0; j <συστατικά; j ++) {

*base_addr = χρώμα [j];

base_addr ++;

}

}

// Ανταλλαγή buffer

Serial.println (F ("ClearColor ολοκληρώθηκε"));

swapBuffers ();

εάν (στοιχεία == 3) {

Serial.printf ("\ tκάθαρο (%d, %d, %d) n", χρώμα [0], χρώμα [1], χρώμα [2]);

}

αλλιώς {

Serial.printf ("\ tκάθαρο (%d, %d, %d, %d) n", χρώμα [0], χρώμα [1], χρώμα [2], χρώμα [3]);

}

// Εγινε

sendResponse ("ΟΚ");

}

void commandSetPixel () {

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

// Θέση ανάγνωσης

uint8_t x = bleuart.read ();

uint8_t y = bleuart.read ();

// Διαβάστε χρώματα

uint32_t pixelOffset = y*πλάτος+x;

uint32_t pixelDataOffset = pixelOffset*στοιχεία;

uint8_t *base_addr = pixelBuffer+pixelDataOffset;

για (int j = 0; j <συστατικά;) {

εάν (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

// Ορίστε χρώματα

uint32_t neopixelIndex = y*βήμα+x;

uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;

uint32_t χρώμα;

εάν (στοιχεία == 3) {

χρώμα = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));

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

}

αλλιώς {

χρώμα = 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, χρώμα);

neopixel.show ();

// Εγινε

sendResponse ("ΟΚ");

}

void commandImage () {

Serial.printf ("Εντολή: Εικόνα %dx %d, %d, %d / n", πλάτος, ύψος, στοιχεία, βήμα);

// Λήψη νέου buffer pixel

int μέγεθος = πλάτος * ύψος;

uint8_t *base_addr = pixelBuffer;

για (int i = 0; i <μέγεθος; i ++) {

για (int j = 0; j <συστατικά;) {

εάν (bleuart.available ()) {

*base_addr = bleuart.read ();

base_addr ++;

j ++;

}

}

/*

εάν (στοιχεία == 3) {

uint32_t index = i*συστατικά;

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

}

*/

}

// Ανταλλαγή buffer

Serial.println (F ("Η εικόνα ελήφθη"));

swapBuffers ();

// Εγινε

sendResponse ("ΟΚ");

}

void sendResponse (char const *response) {

Serial.printf ("Αποστολή απάντησης: %s / n", απάντηση);

bleuart.write (απάντηση, strlen (απάντηση)*sizeof (char));

}

Βήμα 3: Βήμα 3: Αγορά αμπαζούρ

Βήμα 3: Αγορά αμπαζούρ
Βήμα 3: Αγορά αμπαζούρ
Βήμα 3: Αγορά αμπαζούρ
Βήμα 3: Αγορά αμπαζούρ

Βήμα 4: Βήμα 4: Τραβήξτε τα όλα μαζί

Συνιστάται: