Turinys:
- 1 veiksmas: 1 žingsnis: lituokite grandinę
- 2 veiksmas: 2 žingsnis: parašykite kodą
- 3 veiksmas: 3 žingsnis: lempos pirkimas
- 4 žingsnis: 4 žingsnis: ištraukite viską kartu
- 5 veiksmas: 5 žingsnis: žaidimo kortų kūrimas
Video: Tikras iššūkis: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Šiuolaikinis pasaulis reikalauja, kad žmonės pasitrauktų iš fizinio gyvenimo ir gyventų skaitmeninėje erdvėje.
Atsiradus „Al“ir plintant technologijoms, žmonės per daug pasitiki mašina ir mano, kad ji visada teisinga.
„Tikrai“skirtas suklaidinti šį klaidingą pasitikėjimą sukuriant suklastotą melo detektoriaus testą. Žmonės lengvai patikės, kad „Tikrai veikia“, tačiau kai bus pateikti klaidingi atsakymai, tai sukrės jų aklą pasitikėjimą technologijomis.
1 veiksmas: 1 žingsnis: lituokite grandinę
Kadangi mano kūriniuose yra tik viena šviesa, todėl labai lengva lituoti. Pagrindinė problema yra pradžioje, lituoju dvi šviesas, bet ne iš karto uždengiau ekspozicijos dalį. Taigi, kai abi laidų dalys liečiasi. Tai sutrumpėja.
2 veiksmas: 2 žingsnis: parašykite kodą
p.p1 {paraštė: 0.0px 0.0px 0.0px 0.0px; linijos aukštis: 15,0 taškų; šriftas: 12.0px Times; spalva: #000000; fono spalva: #ffffff}
p.p2 {paraštė: 0.0px 0.0px 0.0px 0.0px; linijos aukštis: 15,0 taškų; šriftas: 12.0px Times; spalva: #000000; fono spalva: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
2 žingsnis: parašykite kodą
/*********************************************************************
Tai yra mūsų „nRF52“pagrįstų „Bluefruit LE“modulių pavyzdys
Išsirinkite vieną šiandien „adafruit“parduotuvėje!
„Adafruit“investuoja laiką ir išteklius teikdama šį atvirojo kodo kodą, pirkdami palaikykite „Adafruit“ir atvirojo kodo aparatinę įrangą
produktai iš „Adafruit“!
MIT licencija, daugiau informacijos rasite LICENCIJOJE
Turi būti įtrauktas visas aukščiau esantis tekstas ir žemiau esantis ekranas
bet koks perskirstymas
*********************************************************************
/ Šis eskizas skirtas naudoti su „NeoPixel“valdikliu
// paviršius „Adafruit“mobiliojoje programoje „Bluefruit LE Connect“.
/
/ - Sudarykite ir nubraukite šį eskizą prie nRF52 plunksnos
// - Atidarykite „Bluefruit LE Connect“programą
// - Perjunkite į „NeoPixel“įrankį
// - Norėdami užmegzti ryšį, spustelėkite mygtuką „prisijungti“ir
// siųsti metaduomenis apie pikselių išdėstymą
// - Naudokite „NeoPixel“įrankį, kad atnaujintumėte savo įrenginio taškus
/* PASTABA: šiam eskizui reikalinga bent 1.1.0 versija „Adafruit_Neopixel“!!! */
#įtraukti
#įtraukti
#įtraukti
#define NEOPIXEL_VERSION_STRING „Neopixel v2.0“
#define PIN 16 / * Smeigtukas, naudojamas „NeoPixels“įrenginiams vairuoti * /
#define MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL;
uint8_t plotis = 0;
uint8_t aukštis = 0;
uint8_t stride;
uint8_t componentsValue;
bool yra 400 Hz;
uint8_t komponentai = 3; // tik 3 ir 4 yra tinkamos reikšmės
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE paslauga
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
negaliojanti sąranka ()
{
Serial.begin (115200);
o (! Serijinis) uždelsimas (10); // skirtas nrf52840 su vietine USB
Serial.println („Adafruit Bluefruit Neopixel Test“);
Serial.println ("--------------------------------");
Serial.println ();
Serial.println („Prašome prisijungti naudojant„ Bluefruit Connect LE “programą“);
// Konfigūruoti neopikselius
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Patikrinkite bluefruit.h, ar yra palaikomų verčių
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Siekiant nuoseklumo, pirmiausia reikia pridėti OTA DFU, jei jis yra
bledfu.begin ();
// Įrenginio informacijos paslaugos konfigūravimas ir paleidimas
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Mėlynųjų vaisių plunksna52");
bledis.begin ();
// Konfigūruokite ir paleiskite „BLE UART“paslaugą
bleuart.begin ();
// Nustatykite ir pradėkite reklamuoti
startAdv ();
}
void startAdv (negalioja)
{
// Reklamos paketas
„Bluefruit. Advertising.addFlags“(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Įtraukti 128 bitų bleuart uuid
Bluefruit. Advertising.addService (bleuart);
// Antrinis nuskaitymo atsako paketas (neprivaloma)
// Kadangi reklamos pakete nėra vietos „Vardui“
Bluefruit. ScanResponse.addName ();
/* Pradėti reklamą
* - Įjunkite automatinę reklamą, jei ji atjungta
* - Intervalas: greitas režimas = 20 ms, lėtas režimas = 152,5 ms
* - Greitojo režimo laikas baigėsi 30 sekundžių
* - Pradėti (skirtasis laikas) su skirtuoju laiku = 0 reklamuos amžinai (kol neprisijungs)
*
* Rekomenduojamas reklamos intervalas
*
*/
Bluefruit. Advertising.restartOnDisconnect (tiesa);
Bluefruit. Advertising.setInterval (32, 244); // 0,625 ms vienetu
Bluefruit. Advertising.setFastTimeout (30); // sekundžių skaičius greitu režimu
Bluefruit. Advertising.start (0); // 0 = Nenutraukite reklamos po n sekundės
}
void connect_callback (uint16_t conn_handle)
{
// Gaukite nuorodą į dabartinį ryšį
BLEConnection* connection = Bluefruit. Connection (conn_handle);
char centrinis_pavadinimas [32] = {0};
ryšys-> getPeerName (centrinis_pavadinimas, dydis (centrinis_pavadinimas));
Serial.print ("Prisijungta");
Serial.println (centrinis_pavadinimas);
Serial.println („Prašome pasirinkti skirtuką„ Neopikseliai “, spustelėkite„ Prisijungti “ir linksminkitės“);
}
tuštumos kilpa ()
{
// Aidas gavo duomenis
jei [Bluefruit.connected () && bleuart.notifyEnabled ()]
{
int komanda = bleuart.read ();
jungiklis (komanda) {
atvejis „V“: {// Gauti versiją
commandVersion ();
pertrauka;
}
atvejis „S“: {// Sąrankos matmenys, komponentai, žingsnis…
commandSetup ();
pertrauka;
}
atvejis „C“: {// Skaidrus naudojant spalvą
commandClearColor ();
pertrauka;
}
atvejis „B“: {// Nustatykite ryškumą
commandSetBrightness ();
pertrauka;
}
atvejis „P“: {// „Set Pixel“
commandSetPixel ();
pertrauka;
}
atvejis „aš“: {// Gauti naują vaizdą
commandImage ();
pertrauka;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
(int j = 0; j <aukštis; j ++)
{
(int i = 0; i <plotis; i ++) {
if (komponentai == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
Kitas {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponentai;
pixelIndex ++;
}
pixelIndex += žingsnis - plotis; // Perkelkite „pixelIndex“į kitą eilutę (atsižvelkite į žingsnį)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Komanda: versijos patikrinimas"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Komanda: sąranka"));
plotis = bleuart.read ();
aukštis = bleuart.read ();
žingsnis = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponentai = (komponentaiVertė == NEO_RGB || komponentaiVertė == NEO_RBG || komponentaiVertė == NEO_GRB || komponentaiVertė == NEO_GBR || komponentaiVertė == NEO_BRG || komponentaiVertė == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", plotis, aukštis);
Serial.printf ("\ tstride: %d / n", žingsnis);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponentai: %d / n", komponentai);
if (pixelBuffer! = NULL) {
ištrinti pixelBuffer;
}
uint32_t dydis = plotis*aukštis;
pixelBuffer = naujas uint8_t [dydis*komponentai];
neopixel.updateLength (dydis);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Padaryta
sendResponse („Gerai“);
}
void commandSetBrightness () {
Serial.println (F ("Komanda: SetBrightness"));
// Skaityti reikšmę
uint8_t ryškumas = bleuart.read ();
// Nustatykite ryškumą
neopixel.setBrightness (ryškumas);
// Atnaujinti pikselius
swapBuffers ();
// Padaryta
sendResponse („Gerai“);
}
void commandClearColor () {
Serial.println (F ("Komanda: ClearColor"));
// Skaityti spalvą
uint8_t color [MAXCOMPONENTS];
už (int j = 0; j <komponentai;) {
jei (bleuart.available ()) {
spalva [j] = bleuart.read ();
j ++;
}
}
// Nustatykite visas lemputes į spalvas
int dydis = plotis * aukštis;
uint8_t *base_addr = pixelBuffer;
(int i = 0; i <dydis; i ++) {
(int j = 0; j <komponentai; j ++) {
*base_addr = spalva [j];
base_addr ++;
}
}
// Sukeisti buferius
Serial.println (F („ClearColor baigta“));
swapBuffers ();
if (komponentai == 3) {
Serial.printf ("\ taiškus (%d, %d, %d) n", spalva [0], spalva [1], spalva [2]);
}
Kitas {
Serial.printf ("\ t aiškus (%d, %d, %d, %d) n", spalva [0], spalva [1], spalva [2], spalva [3]);
}
// Padaryta
sendResponse („Gerai“);
}
void commandSetPixel () {
Serial.println (F ("Komanda: SetPixel"));
// Skaityti poziciją
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Skaityti spalvas
uint32_t pixelOffset = y*plotis+x;
uint32_t pixelDataOffset = pixelOffset*komponentai;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
už (int j = 0; j <komponentai;) {
jei (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Nustatykite spalvas
uint32_t neopixelIndex = y*žingsnis+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t spalva;
if (komponentai == 3) {
spalva = neopikselis. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
Kitas {
spalva = neopikselis. 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, spalva);
neopixel.show ();
// Padaryta
sendResponse („Gerai“);
}
void commandImage () {
Serial.printf ("Komanda: vaizdas %dx %d, %d, %d / n", plotis, aukštis, komponentai, žingsnis);
// Gauti naują pikselių buferį
int dydis = plotis * aukštis;
uint8_t *base_addr = pixelBuffer;
(int i = 0; i <dydis; i ++) {
už (int j = 0; j <komponentai;) {
jei (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (komponentai == 3) {
uint32_t indeksas = i*komponentai;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeksas], pixelBuffer [indeksas+1], pixelBuffer [indeksas+2]);
}
*/
}
// Sukeisti buferius
Serial.println (F („Vaizdas gautas“));
swapBuffers ();
// Padaryta
sendResponse („Gerai“);
}
void sendResponse (char const *response) {
Serial.printf ("Siųsti atsakymą: %s / n", atsakymas);
bleuart.write (atsakymas, strlen (atsakymas)*sizeof (char));
}
3 veiksmas: 3 žingsnis: lempos pirkimas
4 žingsnis: 4 žingsnis: ištraukite viską kartu
Rekomenduojamas:
Tikras dvejetainis laikrodis su NTP sinchronizavimu: 4 žingsniai
Tikras dvejetainis laikrodis su NTP sinchronizavimu: tikras dvejetainis laikrodis rodo dienos laiką kaip visos dienos dvejetainių trupmenų sumą, priešingai nei tradicinis „dvejetainis laikrodis“; kuris rodo laiką kaip dvejetainius koduotus dešimtainius skaitmenis, atitinkančius valandas/minutes/sekundes. Tradicija
„Renegade-i“(programuojamas IC testeris, kuris atrodo kaip tikras dalykas): 3 žingsniai (su nuotraukomis)
„Renegade-i“(programuojamas IC testeris, kuris atrodo kaip tikras dalykas): MILIJONAS DOLLARINIO SAPNO. Ar kada svajojote turėti savo IC testerį namuose? Tai ne tik įtaisas, galintis išbandyti IC, bet ir „programuojama“mašina, kuri jaučiasi kaip vienas iš didžiausių semikonų bandymų pramonės žaidėjų pavyzdinių produktų
Biometrinis automobilio įvažiavimas - tikras automobilis be raktų: 4 žingsniai
Biometrinis automobilio įvedimas - tikras automobilis be raktų: Prieš keletą mėnesių mano dukra manęs paklausė, kodėl šiuolaikiniai automobiliai nėra aprūpinti bio -metrine įvažiavimo sistema, kai ją turi net mobilusis telefonas. Nuo tada stengiausi įgyvendinti tą patį ir pagaliau pavyko ką nors įdiegti ir išbandyti „T“
„Mummybot“grandinių iššūkis: 6 žingsniai (su nuotraukomis)
„Mummybot Circuits Challenge“: „Robotikos įvado“pamokoje mes mokėmės apie elektrą ir grandines. Norėdami pristatyti veiklą, aš padariau labai trumpą skaidrių demonstraciją (pridedama), kurioje yra JessyRatFink „Mummybot“ir pridedamos pagrindinės grandinės. Aš uždaviau studentams iššūkį
3D KEVA 2 iššūkis: lova: 3 žingsniai
3D KEVA iššūkis 2: Lova: Sveiki atvykę į 3D KEVA iššūkį! Ar esate pasiruošęs? Kiekvienas 3D KEVA iššūkis mokiniui pateiks 3 vaizdų rinkinį (viršuje, priekyje ir dešinėje). Naudojant vien šias nuomones, iššūkis yra išdėstyti savo KEVA lentas taip, kad atitiktų požiūrį. Si