Πίνακας περιεχομένων:
- Βήμα 1: Βήμα 1: Κολλήστε το κύκλωμα
- Βήμα 2: Βήμα 2: Γράψτε τον Κώδικα
- Βήμα 3: Βήμα 3: Αγορά αμπαζούρ
- Βήμα 4: Βήμα 4: Τραβήξτε τα όλα μαζί
- Βήμα 5: Βήμα 5: Κατασκευή καρτών παιχνιδιού
Βίντεο: Πραγματικά πρόκληση: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Ο σύγχρονος κόσμος απαιτεί από τους ανθρώπους να βγουν από το φυσικό και να ζήσουν μέσα στο ψηφιακό.
Με την εμφάνιση του 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: Αγορά αμπαζούρ
Βήμα 4: Βήμα 4: Τραβήξτε τα όλα μαζί
Συνιστάται:
Ακρυλική βάση tablet για πτήση Sim με πραγματικά κουμπιά: 4 βήματα
Acrylic Tablet Stand for Flight Sim With Real Knobs: Πρόκειται για βάση για tablet (π.χ. iPad) για χρήση με λογισμικό προσομοιωτή πτήσης. Χρησιμοποιώντας περιστροφικές μονάδες κωδικοποιητή και ένα Arduino Mega, δημιούργησα μια λύση όπου τα φυσικά κουμπιά μπορούν να χαρτογραφηθούν για τον έλεγχο συγκεκριμένων λειτουργιών οργάνων στην κάρτα sim. Καθώς
Πραγματικά κινούμενα πορτρέτα από τον Χάρι Πότερ στην πραγματική ζωή!: 11 βήματα (με εικόνες)
Πραγματικά κινούμενα πορτρέτα της πραγματικής ζωής από τον Χάρι Πότερ !: " Καταπληκτικά! Φοβερο! Αυτό είναι ακριβώς σαν μαγεία! &Quot; - Είμαι μεγάλος θαυμαστής του Χάρι Πότερ και ένα από τα πράγματα που πάντα αγαπούσα από τον κόσμο των μάγων είναι τα συγκινητικά πορτρέτα. Έπεσα πάνω στην κινούμενη εικόνα του Κάιλ Στιούαρτ-Φραντς
Πώς να κάνετε πραγματικά φθηνούς αισθητήρες πίεσης: 6 βήματα (με εικόνες)
Πώς να φτιάξετε πραγματικά φθηνούς αισθητήρες πίεσης: Έχω κολλήσει να φτιάχνω διακόπτες από κοινά οικιακά αντικείμενα πρόσφατα και αποφάσισα να φτιάξω τον δικό μου αισθητήρα πίεσης σε έναν προϋπολογισμό από μερικά σφουγγάρια που είχα γύρω. Ο λόγος που αυτό διαφέρει από άλλες εκδόσεις αισθητήρων πίεσης προϋπολογισμού είναι ο
Πραγματικά, ΠΡΑΓΜΑΤΙΚΑ Εύκολο μοτέρ USB!: 3 βήματα
Πραγματικά, ΠΡΑΓΜΑΤΙΚΑ Εύκολο μοτέρ USB !: Επιτέλους, το 2ο εκπαιδευτικό μου !!! Αυτό είναι ανεμιστήρα για εσάς ή τον υπολογιστή σας που τρέχει από οποιαδήποτε διαθέσιμη θύρα USB. Το συνιστώ για αρχάριους στα ηλεκτρονικά, μέχρι τους επαγγελματίες. Είναι εύκολο και διασκεδαστικό, μπορείτε να φτιάξετε κυριολεκτικά σε πέντε λεπτά !!! ΠΡΑΓΜΑΤΙΚΟΣ
Ένας πραγματικά απλός/εύκολος/μη περίπλοκος τρόπος για να κάνετε τους ανθρώπους/ανθρώπους/ζώα/ρομπότ να μοιάζουν σαν να έχουν πραγματικά δροσερό/φωτεινό όραμα θερμότητας (χρώμα της επιλογής σας) χρησιμοποιώντας το GIMP: 4 βήματα
Ένας πραγματικά απλός/εύκολος/μη περίπλοκος τρόπος για να κάνετε τους ανθρώπους/ανθρώπους/ζώα/ρομπότ να μοιάζουν σαν να έχουν πραγματικά δροσερό/φωτεινό όραμα θερμότητας (χρώμα της επιλογής σας) Χρησιμοποιώντας το GIMP: Διαβάστε … τον … τίτλο