Sisällysluettelo:
- Vaihe 1: Vaihe 1: Juotospiiri
- Vaihe 2: Vaihe 2: Kirjoita koodi
- Vaihe 3: Vaihe 3: Lampunvarjostimen ostaminen
- Vaihe 4: Vaihe 4: Vedä kaikki yhteen
- Vaihe 5: Vaihe 5: Pelikorttien tekeminen
Video: Todella haaste: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Nykymaailma vaatii ihmisiä poistumaan fyysisestä ja elämään digitaalisessa maailmassa.
Alin ulkonäön ja teknologian lisääntymisen myötä ihmiset luottavat liikaa koneeseen ja uskovat sen olevan aina oikein.
"Todella" on tarkoitettu horjuttamaan tätä väärää luottamusta luomalla väärennetty valheenilmaisin. Ihmiset uskovat helposti, että todella toimii, mutta väärien vastausten antaminen horjuttaa heidän sokean luottamuksensa tekniikkaan.
Vaihe 1: Vaihe 1: Juotospiiri
Koska teoksissani on vain yksi valo, se on erittäin helppo juottaa. Suurin ongelma on alussa, juotin kaksi valoa, mutta en peittänyt valotusosaa heti. Joten kun kaksi johtoa osuvat yhteen. Se lyhenee.
Vaihe 2: Vaihe 2: Kirjoita koodi
p.p1 {marginaali: 0.0px 0.0px 0.0px 0.0px; linjan korkeus: 15,0 pikseliä; kirjasin: 12.0px Times; väri: #000000; taustaväri: #ffffff}
p.p2 {marginaali: 0.0px 0.0px 0.0px 0.0px; linjan korkeus: 15,0 pikseliä; kirjasin: 12.0px Times; väri: #000000; taustaväri: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Vaihe 2: Kirjoita koodi
/*********************************************************************
Tämä on esimerkki nRF52 -pohjaisista Bluefruit LE -moduuleistamme
Hae yksi tänään adafruit -kaupasta!
Adafruit investoi aikaa ja resursseja tämän avoimen lähdekoodin tarjoamiseen, tue Adafruitia ja avoimen lähdekoodin laitteistoa ostamalla
Adafruutin tuotteita!
MIT -lisenssi, tarkista LISENSSI saadaksesi lisätietoja
Kaikki yllä oleva teksti ja alla oleva aloitusnäyttö on sisällytettävä
mikä tahansa uudelleenjako
*********************************************************************
/ Tämä luonnos on tarkoitettu käytettäväksi NeoPixel -ohjaimen kanssa
// pinta Adafruitin Bluefruit LE Connect -mobiilisovelluksessa.
/
/ - Kokoa ja väläytä tämä luonnos nRF52 Featheriin
// - Avaa Bluefruit LE Connect -sovellus
// - Vaihda NeoPixel -apuohjelmaan
// - Napsauta 'connect' -painiketta muodostaaksesi yhteyden ja
// lähettää metatietoja pikseliasettelusta
// - Päivitä laitteen pikselit NeoPixel -apuohjelman avulla
/* HUOMAUTUS: Tämä luonnos vaati vähintään Adafruit_Neopixel -version 1.1.0 !!! */
#sisältää
#sisältää
#sisältää
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * NeoPixels -ajokortti * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t width = 0;
uint8_t korkeus = 0;
uint8_t stride;
uint8_t componentsValue;
bool on 400 Hz;
uint8_t komponentit = 3; // vain 3 ja 4 ovat kelvollisia arvoja
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE -palvelu
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
mitätön asennus ()
{
Sarja.alku (115200);
kun (! sarja) viive (10); // numerolle nrf52840 natiivin USB: n kanssa
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Sarja.println ();
Serial.println ("Muodosta yhteys Bluefruit Connect LE -sovelluksella");
// Määritä neopikselit
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Tarkista bluefruit.h: sta tuetut arvot
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Johdonmukaisuuden vuoksi OTA DFU on lisättävä ensin, jos sellainen on
bledfu.begin ();
// Laitetietopalvelun määrittäminen ja käynnistäminen
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Määritä ja käynnistä BLE UART -palvelu
bleuart.begin ();
// Määritä ja aloita mainonta
startAdv ();
}
void startAdv (mitätön)
{
// Mainospaketti
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Sisällytä 128-bittinen bleuart uuid
Bluefruit. Advertising.addService (bleuart);
// Toissijaisen skannauksen vastauspaketti (valinnainen)
// Koska mainospaketissa ei ole tilaa nimelle
Bluefruit. ScanResponse.addName ();
/* Aloita mainonta
* - Ota automaattinen mainonta käyttöön, jos yhteys on katkaistu
* - Väli: nopea tila = 20 ms, hidas tila = 152,5 ms
* - Nopean tilan aikakatkaisu on 30 sekuntia
* - Aloita (aikakatkaisu) ja aikakatkaisu = 0 mainostaa ikuisesti (kunnes yhteys)
*
* Suositeltu mainosväli
*
*/
Bluefruit. Advertising.restartOnDisconnect (tosi);
Bluefruit. Advertising.setInterval (32, 244); // 0,625 ms: n yksikössä
Bluefruit. Advertising.setFastTimeout (30); // sekuntien määrä nopeassa tilassa
Bluefruit. Advertising.start (0); // 0 = Älä lopeta mainostamista n sekunnin kuluttua
}
void connect_callback (uint16_t conn_handle)
{
// Hae viittaus nykyiseen yhteyteen
BLEConnection* yhteys = Bluefruit. Connection (conn_handle);
char -keskusnimi [32] = {0};
yhteys-> getPeerName (keskimmäinen_nimi, koko (keski_nimi));
Serial.print ("Yhdistetty");
Sarja.println (keskusnimi);
Serial.println ("Valitse" Neopikselit "-välilehti, napsauta" Yhdistä "ja pidä hauskaa");
}
tyhjä silmukka ()
{
// Echo vastaanotti tietoja
jos (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int -komento = bleuart.read ();
kytkin (komento) {
tapaus 'V': {// Hae versio
commandVersion ();
tauko;
}
tapaus 'S': {// Asennusmitat, komponentit, askel…
commandSetup ();
tauko;
}
tapaus 'C': {// Kirkas väreillä
commandClearColor ();
tauko;
}
tapaus 'B': {// Aseta kirkkaus
commandSetBrightness ();
tauko;
}
tapaus 'P': {// Aseta Pixel
commandSetPixel ();
tauko;
}
tapaus 'I': {// Vastaanota uusi kuva
commandImage ();
tauko;
}
}
}
}
void swapPuskurit ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
(int j = 0; j <korkeus; j ++)
{
for (int i = 0; i <leveys; i ++) {
jos (komponentit == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
muu {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponentit;
pixelIndex ++;
}
pixelIndex += askel - leveys; // Siirrä pixelIndex seuraavalle riville (ota askel huomioon)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Komento: Version tarkistus"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Komento: asennus"));
leveys = bleuart.read ();
korkeus = bleuart.read ();
askel = bleuart.read ();
komponentitArvo = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponentit = (komponentitArvo == NEO_RGB || komponentitArvo == NEO_RBG || komponentitArvo == NEO_GRB || komponentitArvo == NEO_GBR || komponentitArvo == NEO_BRG || komponentitArvo == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", leveys, korkeus);
Serial.printf ("\ tstride: %d / n", askel);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponentit: %d / n", komponentit);
jos (pixelBuffer! = NULL) {
poista pixelBuffer;
}
uint32_t koko = leveys*korkeus;
pixelBuffer = uusi uint8_t [koko*komponentit];
neopixel.updateLength (koko);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Valmis
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Komento: SetBrightness"));
// Lue arvo
uint8_t kirkkaus = bleuart.read ();
// Aseta kirkkaus
neopixel.setBrightness (kirkkaus);
// Päivitä pikselit
swapPuskurit ();
// Valmis
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Komento: ClearColor"));
// Lue väri
uint8_t color [MAXCOMPONENTS];
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
väri [j] = bleuart.read ();
j ++;
}
}
// Aseta kaikki ledit väreiksi
int koko = leveys * korkeus;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <koko; i ++) {
for (int j = 0; j <komponentit; j ++) {
*base_addr = väri [j];
base_addr ++;
}
}
// Vaihda puskurit
Serial.println (F ("ClearColor valmis"));
swapPuskurit ();
jos (komponentit == 3) {
Serial.printf ("\ t selkeä (%d, %d, %d) n", väri [0], väri [1], väri [2]);
}
muu {
Serial.printf ("\ t selkeä (%d, %d, %d, %d) n", väri [0], väri [1], väri [2], väri [3]);
}
// Valmis
sendResponse ("OK");
}
void commandSetPixel () {
Serial.println (F ("Komento: SetPixel"));
// Lue sijainti
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Lue värit
uint32_t pixelOffset = y*leveys+x;
uint32_t pixelDataOffset = pixelOffset*komponentit;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Aseta värit
uint32_t neopixelIndex = y*askel+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t väri;
jos (komponentit == 3) {
väri = neopikseli. Väri (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tväri (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
muu {
väri = neopikseli. Väri (*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, väri);
neopixel.show ();
// Valmis
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Komento: Kuva %dx %d, %d, %d / n", leveys, korkeus, komponentit, askel);
// Vastaanota uusi pikselipuskuri
int koko = leveys * korkeus;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <koko; i ++) {
for (int j = 0; j <komponentit;) {
jos (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
jos (komponentit == 3) {
uint32_t index = i*komponentit;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Vaihda puskurit
Serial.println (F ("Kuva vastaanotettu"));
swapPuskurit ();
// Valmis
sendResponse ("OK");
}
void sendResponse (char const *response) {
Serial.printf ("Lähetä vastaus: %s / n", vastaus);
bleuart.write (vastaus, strlen (vastaus)*sizeof (char));
}
Vaihe 3: Vaihe 3: Lampunvarjostimen ostaminen
Vaihe 4: Vaihe 4: Vedä kaikki yhteen
Suositeltava:
Kuinka tehdä todella halpoja paineantureita: 6 vaihetta (kuvilla)
Kuinka tehdä todella halpoja paineantureita: Olen viime aikoina ollut koukussa kytkimien tekemiseen tavallisista kotitalousesineistä, ja päätin valmistaa oman paineanturin budjetilla muutamasta sienestä, jotka minulla oli. Syy siihen, että tämä eroaa muista budjettipaineanturiversioista, on
Todella WiFi -laajennin: 5 vaihetta
Todella WiFi-laajennin: Johdanto Todellinen WiFi-laajennin on Raspberry Pi Zero W -pohjainen WiFi-toistin. Se on mukava vaihtoehto kaupalliselle WiFi-toistimelle, jossa yhdistyvät edulliset (alle 10 USD) ja erittäin muokattavat ohjelmistot. Se voi myös käyttää joitakin mainosten estoratkaisuja
Raspberry Pi NAS, joka todella näyttää NAS: lta: 13 vaihetta (kuvilla)
Raspberry Pi NAS, joka todella näyttää NAS: Miksi Raspberry Pi NAS? No, olen etsinyt kaunista mutta tilaa säästävää Raspberry Pi NAS: ta Internetistä, enkä löytänyt mitään. Löysin jonkin NAS -suunnittelun, jossa Raspberry Pi liimattiin puupohjaiseen, mutta se ei ole mitä haluan. Haluan
Todella, todella helppo USB -moottori!: 3 vaihetta
Todella, todella helppo USB -moottori !: Vihdoin, toinen opettavainen !!! Tämä on tuuletin sinulle tai tietokoneellesi, joka toimii kaikilla käytettävissä olevilla USB -porteilla. Suosittelen sitä aloittelijoille elektroniikan parissa, aina ammattilaisille asti. Se on helppoa ja hauskaa, voit tehdä kirjaimellisesti viidessä minites !!! TODELLINEN
Todella yksinkertainen/helppo/mutkaton tapa saada ihmiset/ihmiset/eläimet/robotit näyttämään siltä, että heillä on todella viileä/kirkas lämmönäkö (valitsemasi väri) GIMP: n avulla: 4 vaihetta
Todella yksinkertainen/helppo/ei monimutkainen tapa saada ihmiset/ihmiset/eläimet/robotit näyttämään siltä, että heillä on todella viileä/kirkas lämmönäkö (valitsemasi väri) GIMP: n avulla: Lue … otsikko