Sadržaj:
- Korak 1: Korak 1: Lemite krug
- Korak 2: Korak 2: Napišite kôd
- Korak 3: Korak 3: Kupovina sjenila
- Korak 4: Korak 4: Povucite sve zajedno
- Korak 5: Korak 5: Izrada karata za igru
Video: Zaista izazov: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Suvremeni svijet zahtijeva od ljudi da izađu iz fizičkog i žive unutar digitalnog.
Pojavom Al i širenjem tehnologije ljudi previše vjeruju mašini i vjeruju da je uvijek ispravna.
"Stvarno" ima namjeru poljuljati ovo lažno povjerenje stvaranjem lažnog testa detektora laži. Ljudi će lako povjerovati da Stvarno funkcionira, ali ako se dobiju lažni odgovori, to će poljuljati njihovo slijepo povjerenje u tehnologiju.
Korak 1: Korak 1: Lemite krug
Budući da moji radovi imaju samo jedno svjetlo, pa je vrlo lako lemiti. Glavni problem je na početku, lemio sam dva svjetla, ali nisam odmah pokrio dio ekspozicije. Dakle, kada se dvije žice spoje. Kratko je.
Korak 2: Korak 2: Napišite kôd
p.p1 {margina: 0.0px 0.0px 0.0px 0.0px; linija-visina: 15.0px; font: 12.0px Times; boja: #000000; boja pozadine: #ffffff}
p.p2 {margina: 0.0px 0.0px 0.0px 0.0px; linija-visina: 15.0px; font: 12.0px Times; boja: #000000; background-color: #ffffff; min-visina: 14.0px} span.s1 {font-kerning: none}
Korak 2: Napišite kôd
/*********************************************************************
Ovo je primjer za naše module Bluefruit LE zasnovane na nRF52
Odaberite jednu danas u adafruit shopu!
Adafruit ulaže vrijeme i resurse pružajući ovaj otvoreni kod, molimo vas da podržite Adafruit i hardver otvorenog koda kupovinom
proizvodi iz Adafruit -a!
MIT licencu, provjerite LICENCE za više informacija
Sav gornji tekst i donji ekran ispod moraju biti uključeni u
svaku preraspodjelu
*********************************************************************
/ Ova skica je namijenjena za upotrebu sa NeoPixel kontrolom
// površina u Adafruit -ovoj mobilnoj aplikaciji Bluefruit LE Connect.
/
/ - Sastavite i fleširajte ovu skicu na nRF52 pero
// - Otvorite aplikaciju Bluefruit LE Connect
// - Prebacite se na uslužni program NeoPixel
// - Pritisnite dugme za povezivanje da biste uspostavili vezu i
// šalje metapodatke o rasporedu piksela
// - Pomoću uslužnog programa NeoPixel ažurirajte piksele na svom uređaju
/* NAPOMENA: Ova skica je zahtijevala najmanje verziju 1.1.0 Adafruit_Neopixel !!! */
#include
#include
#include
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin koji se koristi za pogon NeoPixela * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t width = 0;
uint8_t visina = 0;
uint8_t korak;
uint8_t componentsValue;
bool je 400Hz;
uint8_t komponente = 3; // samo 3 i 4 su važeće vrijednosti
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE usluga
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
void setup ()
{
Serial.begin (115200);
while (! Serijsko) kašnjenje (10); // za nrf52840 s izvornim USB -om
Serial.println ("Neopixel test Adafruit Bluefruit");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Molimo vas da se povežete koristeći aplikaciju Bluefruit Connect LE");
// Konfiguracija neopiksela
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Provjerite bluefruit.h za podržane vrijednosti
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// OTA DFU treba dodati ako postoji ako postoji
bledfu.begin ();
// Konfiguriranje i pokretanje informacijske usluge uređaja
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Perje plavog voća52");
bledis.begin ();
// Konfigurirajte i pokrenite BLE UART uslugu
bleuart.begin ();
// Postavljanje i početak oglašavanja
startAdv ();
}
void startAdv (void)
{
// Reklamni paket
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Uključuje bleuart 128-bitni uuid
Bluefruit. Advertising.addService (bleuart);
// Sekundarni paket odgovora na skeniranje (opcionalno)
// Budući da u reklamnom paketu nema mjesta za 'Ime'
Bluefruit. ScanResponse.addName ();
/* Započni oglašavanje
* - Omogućite automatsko oglašavanje ako je isključeno
* - Interval: brzi režim = 20 ms, spori režim = 152,5 ms
* - Vremensko ograničenje za brzi način rada je 30 sekundi
* - Start (timeout) sa timeout = 0 će se oglasiti zauvijek (dok se ne povežete)
*
* Za preporučeni interval oglašavanja
*
*/
Bluefruit. Advertising.restartOnDisconnect (true);
Bluefruit. Advertising.setInterval (32, 244); // u jedinici od 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // broj sekundi u brzom načinu rada
Bluefruit. Advertising.start (0); // 0 = Ne prekidajte oglašavanje nakon n sekundi
}
void connect_callback (uint16_t conn_handle)
{
// Dobivanje reference na trenutnu vezu
BLEConnection* connection = Bluefruit. Connection (conn_handle);
char centralno_ime [32] = {0};
veza-> getPeerName (centralno_ime, veličina (centralno_ime));
Serial.print ("Povezano sa");
Serial.println (centralno_ime);
Serial.println ("Odaberite karticu 'Neopikseli', kliknite 'Poveži se' i zabavite se");
}
void loop ()
{
// Eho primljeni podaci
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int naredba = bleuart.read ();
switch (naredba) {
case 'V': {// Preuzmi verziju
commandVersion ();
break;
}
case 'S': {// Postavke dimenzija, komponente, korak…
commandSetup ();
break;
}
case 'C': {// Očisti bojom
commandClearColor ();
break;
}
case 'B': {// Postavi svjetlinu
commandSetBrightness ();
break;
}
case 'P': {// Postavi Pixel
commandSetPixel ();
break;
}
case 'I': {// Primite novu sliku
commandImage ();
break;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <visina; j ++)
{
for (int i = 0; i <širina; i ++) {
if (komponente == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
else {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponente;
pixelIndex ++;
}
pixelIndex += stride - width; // Premjestite pixelIndex u sljedeći red (uzmite u obzir korak)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Naredba: provjera verzije"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Naredba: Postavljanje"));
width = bleuart.read ();
height = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
components = (componentsValue == NEO_RGB || componentsValue == NEO_RBG || componentsValue == NEO_GRB || componentsValue == NEO_GBR || componentsValue == NEO_BRG || componentsValue == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", širina, visina);
Serial.printf ("\ tstride: %d / n", stride);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponente: %d / n", komponente);
if (pixelBuffer! = NULL) {
delete pixelBuffer;
}
uint32_t veličina = širina*visina;
pixelBuffer = novi uint8_t [veličina*komponente];
neopixel.updateLength (veličina);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Gotovo
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Naredba: SetBrightness"));
// Očitana vrijednost
uint8_t svjetlina = bleuart.read ();
// Postavljanje svjetline
neopixel.setBrightness (svjetlina);
// Osvježavanje piksela
swapBuffers ();
// Gotovo
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Naredba: ClearColor"));
// Očitavanje boje
uint8_t boja [MAXCOMPONENTS];
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
boja [j] = bleuart.read ();
j ++;
}
}
// Postavi sve LED diode u boju
int veličina = širina * visina;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <veličina; i ++) {
for (int j = 0; j <komponente; j ++) {
*base_addr = boja [j];
base_addr ++;
}
}
// Zamijenite međuspremnike
Serial.println (F ("ClearColor dovršen"));
swapBuffers ();
if (komponente == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", boja [0], boja [1], boja [2]);
}
else {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", boja [0], boja [1], boja [2], boja [3]);
}
// Gotovo
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Naredba: SetPixel"));
// Pozicija čitanja
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Čitanje boja
uint32_t pixelOffset = y*širina+x;
uint32_t pixelDataOffset = pixelOffset*komponente;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Postavljanje boja
uint32_t neopixelIndex = y*stride+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t boja;
if (komponente == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
else {
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, boja);
neopixel.show ();
// Gotovo
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Naredba: Slika %dx %d, %d, %d / n", širina, visina, komponente, korak);
// Primanje novog međuspremnika piksela
int veličina = širina * visina;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <veličina; i ++) {
for (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (komponente == 3) {
uint32_t index = i*komponente;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeks], pixelBuffer [indeks+1], pixelBuffer [indeks+2]);
}
*/
}
// Zamijenite međuspremnike
Serial.println (F ("Slika je primljena"));
swapBuffers ();
// Gotovo
sendResponse ("OK");
}
void sendResponse (char const *odgovor) {
Serial.printf ("Pošalji odgovor: %s / n", odgovor);
bleuart.write (response, strlen (response)*sizeof (char));
}
Korak 3: Korak 3: Kupovina sjenila
Korak 4: Korak 4: Povucite sve zajedno
Preporučuje se:
Kako napraviti zaista jeftine senzore pritiska: 6 koraka (sa slikama)
Kako napraviti zaista jeftine senzore pritiska: U posljednje vrijeme sam se navukao na promjenu uobičajenih kućanskih potrepština i odlučio sam napraviti svoj vlastiti senzor pritiska u proračunu od nekoliko spužvi koje sam ležao. Razlog zašto se ovo razlikuje od ostalih verzija proračunskih senzora tlaka je taj
Izazov Mummybot Circuits: 6 koraka (sa slikama)
Izazov Mummybot Circuits: Na mom času Uvod u robotiku, učili smo o električnoj energiji i krugovima. Da bih predstavio aktivnost, napravio sam vrlo kratku prezentaciju (u prilogu) koja uzima JessyRatFinkov Mummybot i dodaje osnovna kola. Učenicima sam dao izazov
3D KEVA izazov 2: Krevet: 3 koraka
3D KEVA izazov 2: Krevet: Dobrodošli u 3D KEVA izazov! Jeste li spremni za to? Svaki 3D KEVA izazov predstavit će polazniku skup od 3 prikaza (gore, sprijeda i desno). Korištenje samo ovih pogleda izazov je postaviti vaše KEVA daske na način koji odgovara pogledima
Zaista, zaista jednostavan USB motor!: 3 koraka
Zaista, zaista lagan USB motor!: Najzad, moj drugi instruktor !!! Ovo je ventilator za vas ili vaš računar koji se napaja sa bilo kojeg slobodnog USB priključka. Preporučujem ga početnicima u elektronici, sve do profesionalaca. Lako je i zabavno, možete napraviti doslovno u pet minita !!! REAL
Zaista jednostavan/lak/nekompliciran način da učinite da ljudi/ljudi/životinje/roboti izgledaju kao da imaju zaista hladnu/svijetlu toplinu (boja po vašem izboru) pomoću GIMP -a: 4 koraka
Zaista jednostavan/lak/nekompliciran način da učinite da ljudi/ljudi/životinje/roboti izgledaju kao da imaju zaista hladnu/svijetlu toplotnu viziju (boja po vašem izboru) pomoću GIMP -a: Pročitajte … naslov