Indholdsfortegnelse:
- Trin 1: Trin 1: Loddet kredsløb
- Trin 2: Trin 2: Skriv koden
- Trin 3: Trin 3: Køb lampeskærm
- Trin 4: Trin4: Træk det hele sammen
- Trin 5: Trin 5: Fremstilling af spillekort
Video: Virkelig udfordring: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Den moderne verden kræver, at mennesker træder ud af det fysiske og lever inden for det digitale.
Med udseendet af Al og spredning af teknologi sætter folk for stor tillid til maskinen og tror, at den altid er korrekt.
"Virkelig" er beregnet til at ryste denne falske tillid gennem oprettelsen af en falsk løgnedetektortest. Folk vil let tro, at Really virker, men når der gives falske svar, vil det ryste deres blinde tillid til teknologi.
Trin 1: Trin 1: Loddet kredsløb
Fordi mine værker kun har et enkelt lys, så det er meget let at lodde. Hovedproblemet er i begyndelsen, jeg lodder to lys, men jeg dækkede ikke eksponeringsdelen med det samme. Så når de to ledninger deles sammen. Det kortslutter.
Trin 2: Trin 2: Skriv koden
p.p1 {margin: 0,0px 0,0px 0,0px 0,0px; linjehøjde: 15,0px; skrifttype: 12.0px Times; farve: #000000; baggrundsfarve: #ffffff}
p.p2 {margin: 0,0px 0,0px 0,0px 0,0px; linjehøjde: 15,0px; skrifttype: 12.0px Times; farve: #000000; baggrundsfarve: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Trin 2: Skriv koden
/*********************************************************************
Dette er et eksempel på vores nRF52 -baserede Bluefruit LE -moduler
Hent en i dag i adafruit -shoppen!
Adafruit investerer tid og ressourcer ved at levere denne open source -kode, support venligst Adafruit og open-source hardware ved at købe
produkter fra Adafruit!
MIT -licens, tjek LICENS for flere oplysninger
Al tekst ovenfor og stænkskærmen herunder skal inkluderes i
enhver omfordeling
*********************************************************************
/ Denne skitse er beregnet til at blive brugt med NeoPixel -kontrollen
// overflade i Adafruit's Bluefruit LE Connect mobilapplikation.
/
/ - Kompilér og flash denne skitse til nRF52 Feather
// - Åbn Bluefruit LE Connect -appen
// - Skift til værktøjet NeoPixel
// - Klik på knappen 'tilslut' for at oprette en forbindelse og
// send metadataene om pixellayoutet
// - Brug værktøjet NeoPixel til at opdatere pixels på din enhed
/* BEMÆRK: Denne skitse krævede mindst version 1.1.0 af Adafruit_Neopixel !!! */
#omfatte
#omfatte
#omfatte
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin bruges til at køre NeoPixels * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t bredde = 0;
uint8_t højde = 0;
uint8_t skridt;
uint8_t componentsValue;
bool er 400Hz;
uint8_t komponenter = 3; // kun 3 og 4 er gyldige værdier
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE Service
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
ugyldig opsætning ()
{
Serial.begin (115200);
mens (! Seriel) forsinkelse (10); // til nrf52840 med native usb
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Opret forbindelse via Bluefruit Connect LE -applikationen");
// Config Neopixels
neopixel.begin ();
// Init Bluefrugt
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Tjek bluefruit.h for understøttede værdier
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// For at være konsekvent skal OTA DFU tilføjes først, hvis den findes
bledfu.begin ();
// Konfigurer og start Device Information Service
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Konfigurer og start BLE UART -service
bleuart.begin ();
// Opsæt og start annoncering
startAdv ();
}
void startAdv (void)
{
// Annoncepakke
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Inkluder bleuart 128-bit uuid
Bluefruit. Advertising.addService (bleuart);
// Sekundær scanningsresponspakke (valgfri)
// Da der ikke er plads til 'Navn' i Annoncepakke
Bluefruit. ScanResponse.addName ();
/* Start annoncering
* - Aktiver automatisk annoncering, hvis den er afbrudt
* - Interval: hurtig tilstand = 20 ms, langsom tilstand = 152,5 ms
* - Timeout for hurtig tilstand er 30 sekunder
* - Start (timeout) med timeout = 0 annoncerer for evigt (indtil tilsluttet)
*
* For anbefalet reklameinterval
*
*/
Bluefruit. Advertising.restartOnDisconnect (true);
Bluefruit. Advertising.setInterval (32, 244); // i enheden på 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // antal sekunder i hurtig tilstand
Bluefruit. Advertising.start (0); // 0 = Stop ikke annoncering efter n sekunder
}
ugyldig connect_callback (uint16_t conn_handle)
{
// Få referencen til den aktuelle forbindelse
BLEConnection* forbindelse = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
forbindelse-> getPeerName (centralnavn, størrelse (centralnavn));
Serial.print ("Tilsluttet");
Serial.println (centralnavn);
Serial.println ("Vælg venligst fanen 'Neopixels', klik på 'Opret forbindelse' og hav det sjovt");
}
hulrum ()
{
// Ekko modtaget data
hvis (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int kommando = bleuart.read ();
switch (kommando) {
case 'V': {// Hent version
commandVersion ();
pause;
}
case 'S': {// Opsætning af dimensioner, komponenter, skridt …
commandSetup ();
pause;
}
case 'C': {// Klar med farve
commandClearColor ();
pause;
}
case 'B': {// Indstil lysstyrke
commandSetBrightness ();
pause;
}
case 'P': {// Set Pixel
commandSetPixel ();
pause;
}
case 'I': {// Modtag nyt billede
commandImage ();
pause;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <højde; j ++)
{
for (int i = 0; i <bredde; i ++) {
hvis (komponenter == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
andet {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponenter;
pixelIndex ++;
}
pixelIndex += stride - bredde; // Flyt pixelIndex til den næste række (tag hensyn til skridtet)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Kommando: Versionskontrol"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Kommando: Opsætning"));
bredde = bleuart.read ();
højde = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponenter = (komponenterVærdi == NEO_RGB || komponenterVærdi == NEO_RBG || komponenterVærdi == NEO_GRB || komponenterVærdi == NEO_GBR || komponenterVærdi == NEO_BRG || komponenterVærdi == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", bredde, højde);
Serial.printf ("\ tstride: %d / n", skridt);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponenter: %d / n", komponenter);
hvis (pixelBuffer! = NULL) {
slet pixelBuffer;
}
uint32_t størrelse = bredde*højde;
pixelBuffer = ny uint8_t [størrelse*komponenter];
neopixel.updateLength (størrelse);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Færdig
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Kommando: SetBrightness"));
// Læs værdi
uint8_t lysstyrke = bleuart.read ();
// Indstil lysstyrke
neopixel.setBrightness (lysstyrke);
// Opdater pixels
swapBuffers ();
// Færdig
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Kommando: ClearColor"));
// Læs farve
uint8_t farve [MAXCOMPONENTS];
for (int j = 0; j <komponenter;) {
hvis (bleuart.available ()) {
farve [j] = bleuart.read ();
j ++;
}
}
// Indstil alle lysdioder til farve
int størrelse = bredde * højde;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (int j = 0; j <komponenter; j ++) {
*base_addr = farve [j];
base_addr ++;
}
}
// Skift buffere
Serial.println (F ("ClearColor udført"));
swapBuffers ();
hvis (komponenter == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", farve [0], farve [1], farve [2]);
}
andet {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", farve [0], farve [1], farve [2], farve [3]);
}
// Færdig
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Kommando: SetPixel"));
// Læs position
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Læs farver
uint32_t pixelOffset = y*bredde+x;
uint32_t pixelDataOffset = pixelOffset*komponenter;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponenter;) {
hvis (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Indstil farver
uint32_t neopixelIndex = y*skridt+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t farve;
hvis (komponenter == 3) {
farve = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
andet {
farve = 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, farve);
neopixel.show ();
// Færdig
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Kommando: Billede %dx %d, %d, %d / n", bredde, højde, komponenter, skridt);
// Modtag ny pixelbuffer
int størrelse = bredde * højde;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (int j = 0; j <komponenter;) {
hvis (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
hvis (komponenter == 3) {
uint32_t index = i*komponenter;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Skift buffere
Serial.println (F ("Billede modtaget"));
swapBuffers ();
// Færdig
sendResponse ("OK");
}
void sendResponse (char const *response) {
Serial.printf ("Send svar: %s / n", svar);
bleuart.write (svar, strlen (svar)*sizeof (char));
}
Trin 3: Trin 3: Køb lampeskærm
Trin 4: Trin4: Træk det hele sammen
Anbefalede:
Sådan laver du virkelig billige trykfølere: 6 trin (med billeder)
Sådan laver du virkelig billige trykfølere: Jeg har været hooked på at lave switches fra almindelige husholdningsartikler på det sidste, og jeg besluttede at lave min egen tryksensor på et budget fra et par svampe, jeg havde liggende. Grunden til at dette er anderledes end andre versioner af budgettrykssensorer er den
Virkelig WiFi Extender: 5 trin
Virkelig WiFi Extender: Introduktion Truly WiFi Extender er en WiFi-repeater baseret på Raspberry Pi Zero W. Det er et godt alternativ til en kommerciel WiFi-repeater, der kombinerer billige (under 10USD) og meget tilpasselig software. Det kan også køre nogle annonceblokerende løsninger
En Raspberry Pi NAS, der virkelig ligner en NAS: 13 trin (med billeder)
En Raspberry Pi NAS, der virkelig ligner en NAS: Hvorfor en Raspberry Pi NASJeg har søgt efter en smuk, men pladsbesparende Raspberry Pi NAS fra internettet, og jeg fandt ingenting. Jeg fandt noget NAS -design med en Raspberry Pi blive limet til en træbaseret, men det er ikke det, jeg vil. Jeg vil have
Virkelig, VIRKELIG let USB -motor !: 3 trin
Virkelig, VIRKELIG let USB -motor !: Endelig min 2. instruerbare !!! Dette er ventilator til dig eller din computer, der kører fra enhver tilgængelig USB -port. Jeg anbefaler det til begyndere inden for elektronik, helt op til profferne. Det er let og sjovt, du kan lave i bogstaveligt talt fem minitter !!! ÆGTE
En virkelig enkel/let/ikke kompliceret måde at få mennesker/mennesker/dyr/robotter til at se ud som om de har en virkelig cool/lys varmesyn (farve efter eget valg) ved hjælp af GIMP: 4 trin
En virkelig enkel/let/ikke kompliceret måde at få mennesker/mennesker/dyr/robotter til at se ud til at have en virkelig cool/lys varmesyn (farve efter eget valg) Brug af GIMP: Læs … titlen