ΠΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΡΡΠ»ΡΠΌΠΈ ΠΈ ΠΈΠ΄Π΅ΡΠΌΠΈ, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ!
ΠΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ:
cpp
#include <avr/pgmspace.h>
#define THOUGHT_SPACE_SIZE 16
#define IDEA_COUNT 8
// Π‘ΡΡΡΠΊΡΡΡΠ° ΠΌΡΡΠ»ΠΈ
struct Thought {
uint8_t id;
uint8_t content[THOUGHT_SPACE_SIZE];
uint8_t intensity;
uint8_t coherence; // Π‘Π²ΡΠ·Π°Π½Π½ΠΎΡΡΡ
uint8_t novelty; // ΠΠΎΠ²ΠΈΠ·Π½Π°
};
// Π‘ΡΡΡΠΊΡΡΡΠ° ΠΈΠ΄Π΅ΠΈ
struct Idea {
uint8_t id;
uint8_t concept[THOUGHT_SPACE_SIZE];
uint8_t potential;
uint8_t difficulty;
};
Thought currentThought;
Thought thoughtSpace[8];
Idea ideaSpace[IDEA_COUNT];
uint8_t thoughtIndex = 0;
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°
void initMentalSpace() {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΡΡΠ»ΠΈ
for (uint8_t t = 0; t < 8; t++) {
thoughtSpace[t].id = t;
for (uint8_t i = 0; i < THOUGHT_SPACE_SIZE; i++) {
thoughtSpace[t].content[i] = random(256);
}
thoughtSpace[t].intensity = random(0, 100);
thoughtSpace[t].coherence = random(0, 100);
thoughtSpace[t].novelty = random(0, 100);
}
currentThought = thoughtSpace[0];
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΠ΄Π΅ΠΈ
for (uint8_t i = 0; i < IDEA_COUNT; i++) {
ideaSpace[i].id = i;
for (uint8_t j = 0; j < THOUGHT_SPACE_SIZE; j++) {
ideaSpace[i].concept[j] = random(256);
}
ideaSpace[i].potential = random(0, 100);
ideaSpace[i].difficulty = random(0, 100);
}
}
// ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΌΡΡΠ»ΠΈ (ΠΊΡΠ΅Π°ΡΠΈΠ²Π½ΠΎΡΡΡ)
void generateThought() {
uint8_t newId = random(1, 8);
// ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅ΠΌ Π΄Π²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΡΡΠ»ΠΈ
uint8_t src1 = random(8);
uint8_t src2 = random(8);
for (uint8_t i = 0; i < THOUGHT_SPACE_SIZE; i++) {
thoughtSpace[newId].content[i] =
(thoughtSpace[src1].content[i] + thoughtSpace[src2].content[i]) / 2;
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ²Π°Π½ΡΠΎΠ²ΡΠ΅ ΡΠ»ΡΠΊΡΡΠ°ΡΠΈΠΈ
if (random(100) < 20) {
thoughtSpace[newId].content[i] ^= (1 << random(8));
}
}
thoughtSpace[newId].intensity =
(thoughtSpace[src1].intensity + thoughtSpace[src2].intensity) / 2;
thoughtSpace[newId].coherence = random(0, 100);
thoughtSpace[newId].novelty = 100 - thoughtSpace[newId].coherence / 2;
}
// ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΡΡΠ»ΡΠΌΠΈ
void navigateThoughts(uint8_t target) {
if (target >= 8) return;
if (target == thoughtIndex) return;
// Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΠΌΡΡΠ»Ρ
currentThought = thoughtSpace[thoughtIndex];
// ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ΅Π»Π΅Π²ΠΎΠΉ
thoughtIndex = target;
currentThought = thoughtSpace[thoughtIndex];
Serial.print("π ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΊ ΠΌΡΡΠ»ΠΈ ");
Serial.print(thoughtIndex);
Serial.print(" | ΠΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΡ: ");
Serial.print(currentThought.intensity);
Serial.print(" | ΠΠΎΠ²ΠΈΠ·Π½Π°: ");
Serial.println(currentThought.novelty);
}
// Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ΄Π΅ΠΈ (ΡΠ²ΠΎΡΡΠ΅ΡΠΊΠΈΠΉ Π°ΠΊΡ)
void realizeIdea(uint8_t ideaId) {
if (ideaId >= IDEA_COUNT) return;
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ
if (ideaSpace[ideaId].difficulty > currentThought.intensity) {
Serial.println("β οΈ ΠΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½Π° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ");
return;
}
Serial.print("π‘ Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ΄Π΅ΠΈ ");
Serial.print(ideaId);
Serial.print(" | ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»: ");
Serial.println(ideaSpace[ideaId].potential);
// ΠΠ΄Π΅Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΡΡΠ»ΡΡ
uint8_t newThought = random(1, 8);
for (uint8_t i = 0; i < THOUGHT_SPACE_SIZE; i++) {
thoughtSpace[newThought].content[i] = ideaSpace[ideaId].concept[i];
}
thoughtSpace[newThought].intensity = ideaSpace[ideaId].potential;
thoughtSpace[newThought].novelty = 100;
thoughtSpace[newThought].coherence = 100 - ideaSpace[ideaId].difficulty;
}
// ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°
void renderMentalSpace() {
clearScreen();
// ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΌΡΡΠ»ΠΈ
for (uint8_t t = 0; t < 8; t++) {
uint8_t x = t * 8;
uint8_t y = 60 - thoughtSpace[t].intensity / 4;
// Π’Π΅ΠΊΡΡΠ°Ρ ΠΌΡΡΠ»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΅Π½Π°
uint8_t color = (t == thoughtIndex) ? 2 : 1;
drawPixel(x, y, color);
drawPixel(x + 1, y, color);
// Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΡΡΠ»ΠΈ
if (thoughtSpace[t].coherence > 50) {
for (uint8_t t2 = t + 1; t2 < 8; t2++) {
if (thoughtSpace[t2].coherence > 50) {
uint8_t y2 = 60 - thoughtSpace[t2].intensity / 4;
drawLine(x + 2, y, t2 * 8, y2, 1);
}
}
}
}
// ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΈΠ΄Π΅ΠΈ
for (uint8_t i = 0; i < IDEA_COUNT; i++) {
uint8_t x = 60 + i * 2;
uint8_t y = 60 - ideaSpace[i].potential / 4;
drawPixel(x, y, ideaSpace[i].difficulty < 50);
}
updateDisplay();
}
void setup() {
initLEDMatrix();
Serial.begin(115200);
randomSeed(analogRead(A0));
initMentalSpace();
Serial.println("π ΠΠΠΠ’ΠΠΠ¬ΠΠ«Π ΠΠΠΠΠΠ’ΠΠΠ¬ ΠΠΠ’ΠΠΠΠ ΠΠΠΠ");
Serial.println("ΠΡΡΠ»ΠΈ β ΡΡΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ...");
}
void loop() {
// ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΡΡ
ΠΌΡΡΠ»Π΅ΠΉ
if (random(100) < 20) {
generateThought();
Serial.println("β¨ Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π° Π½ΠΎΠ²Π°Ρ ΠΌΡΡΠ»Ρ!");
}
// ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΡΡΠ»ΡΠΌΠΈ
static uint32_t lastNavigate = 0;
if (millis() - lastNavigate > 3000) {
uint8_t target = random(8);
navigateThoughts(target);
lastNavigate = millis();
}
// Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ΄Π΅ΠΉ
if (random(100) < 10) {
uint8_t ideaId = random(IDEA_COUNT);
realizeIdea(ideaId);
}
// ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
renderMentalSpace();
delay(100);
}