Оглавление:
- Шаг 1. Подключение
- Шаг 2: ровный шум
- Шаг 3: Эффекты с использованием плавного шума
- Шаг 4: Эффекты случайного градиента
- Шаг 5: окончательный результат
Видео: Отображение шума радуги Arduino TFT: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Мы создали этот радужный проект, используя различные методы «шума», которые создают контролируемые случайные эффекты. Добавив немного цвета, можно получить эффект радуги. Он использует Arduino Nano и OLED-дисплей 128x128. Мы отображали эффекты с помощью библиотеки TFT. Мы также использовали разные компоненты, такие как макет и несколько проводов.
Шаг 1. Подключение
Самой простой задачей было подключение OLED к Arduino. Мы подключили GND и VCC к соответствующим шинам на макетной плате; SCL к цифровому выводу 13; SDA к цифровому выводу 11; RES на цифровой вывод 8; DC к цифровому выводу 9; CS к цифровому выводу 10 и, наконец, BL к 3,3 В на Arduino. Используя контакты 5v и GND от Arduino, мы смогли запитать всю макетную плату.
Шаг 2: ровный шум
После инициализации требований к TFT-дисплею. Чтобы создать эффект плавного шума, нам сначала нужна базовая функция шума. Это возвращает относительно случайное значение от 0 до 1 на основе переданных значений x и y. Важно отметить, что компьютер никогда не может выдать действительно случайный результат, и эта случайность просто достигается путем изменения числа в максимально возможной степени., отсюда и очень большие числа в уравнении.
шум с плавающей точкой (int x, int y) {int n; п = х + у * 57; п + = (п << 13) ^ п; return (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Затем мы «сглаживаем» шум с помощью другой функции. Это достигается путем создания значения, основанного не только на результате координаты, переданной в функцию, но и на окружающих координатах. В результате близкие друг к другу координаты дают одинаковое значение.
float smoothNoise (float x, float y) {float фрактX = x - (int) x; floatractY = y - (int) y; int x1 = ((int) (x) + noiseWidth)% noiseWidth; int y1 = ((int) (y) + noiseHeight)% noiseHeight; int x2 = (x1 + noiseWidth - 1)% noiseWidth; int y2 = (y1 + noiseHeight - 1)% noiseHeight; значение с плавающей запятой = 0,0f; значение + = фрактX * фракY * шум (x1, y1); значение + = (1 - фрактX) * фракция * шум (x2, y1); значение + = фрактX * (1 - фрактY) * шум (x1, y2); значение + = (1 - фрактX) * (1 - фрактY) * шум (x2, y2); возвращаемое значение; }
Шаг 3: Эффекты с использованием плавного шума
Таким образом мы создали два эффекта. Для этого мы пропустили каждый пиксель на OLED-экране и взяли случайное значение шума на основе координат x и y этих пикселей. Первый из этих эффектов мы создали, используя сгенерированное значение для выбора цвета и раскрасив этот пиксель вышеупомянутым цветом. Второй эффект был произведен аналогичным образом, но мы также умножили цвет на значение сгенерированного шума. Это придало узору более растушеванный эффект. Используемый код показан ниже:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (colors [absNoise], noise); еще setBlockColour (цвета [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Color color, float noise) {TFTscreen.stroke (colour.red * noise, colour.green * noise, colour.blue * noise); } void setBlockColour (Color color) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }
Шаг 4: Эффекты случайного градиента
Есть два эффекта, которые создают случайный градиент. Первый эффект размещает пиксели по отношению к их цвету rgb, медленно отображая узор градиента на экране. Второй использует пиксели того же цвета, что и первый, но размещает их в фиксированном порядке, создавая диагональный градиент вдоль экрана.
Вот первый (по цветам):
void Noise1 () {для (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {для (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); если (R_Lower = 255) {R_Higher = 254; } int R_Offset = случайный (R_Lower, R_Higher); int G_Lower = G - ((х + у) / 4); если (G_Lower = 255) {G_Higher = 254; } int G_Offset = случайный (G_Lower, G_Higher); int B_Lower = B - ((х + у) / 4); если (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); если (B_Higher> = 255) {B_Higher = 254; } int B_Offset = случайный (B_Lower, B_Higher); int mult = 2; если (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point ((R_Offset * (B_Offset / 32)), (G_Offset * (B_Offset / 32))); TFTscreen.point ((G_Offset * (B_Offset / 32)), (R_Offset * (B_Offset / 32))); TFTscreen.point ((B_Offset * (G_Offset / 32)), (R_Offset * (G_Offset / 32))); }}}}
И второй (более упорядоченный эффект):
void Noise4 () {для (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {для (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); если (R_Lower = 255) {R_Higher = 254; } int R_Offset = случайный (R_Lower, R_Higher); int G_Lower = G - ((х + у) / 4); если (G_Lower = 255) {G_Higher = 254; } int G_Offset = случайный (G_Lower, G_Higher); int B_Lower = B - ((х + у) / 4); если (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); если (B_Higher> = 255) {B_Higher = 254; } int B_Offset = случайный (B_Lower, B_Higher); int mult = 2; если (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Шаг 5: окончательный результат
В конце концов, мы объединили эти эффекты в своего рода «слайд-шоу» из радуг. Для этого мы просто вызывали каждую функцию за другой в цикле while:
while (истина) {Noise2n3 (ложь); Noise2n3 (правда); TFTscreen.background (0, 0, 0); Шум1 (); Шум4 (); }
Рекомендуемые:
С Днем Рождения Подарок с освещением радуги RGB: 11 шагов
С Днем Рождения Подарок с радужным освещением RGB: Здравствуйте, друзья, в этой инструкции мы сделаем другой подарок на день рождения, используя неопиксель RGB. Этот проект очень круто смотрится в темноте ночью. Я предоставил всю информацию в этом руководстве со всеми частями и кодами. И я надеюсь, вам всем это понравится
Часы со словами с эффектом радуги и фоновой подсветкой: 6 шагов
Часы со словами с эффектом радуги и фоновой подсветкой: начало есть. Передняя пластина 40 на 40 см готова
Декор дома из радуги своими руками: 5 шагов
DIY Rainbow House Decor: Добро пожаловать в мою новую статью … Как сделать украшение дома из радуги своими руками! Arduino можно использовать для создания практически любого проекта в области электроники. Здесь я использовала его, чтобы сделать красивое украшение для вашего дома. "Радуга" часть этого проекта
Радужные часы со словами с полным эффектом радуги и многое другое: 13 шагов (с изображениями)
Радужные часы со словами с полным эффектом радуги и многое другое: цели1) Простые2) Недорогие3) Максимально энергоэффективные часы со словами радуги с полным эффектом радуги. Смайлик на часах со словами. Простой ИК-пульт дистанционного управления Обновление 03-ноя-18 LDR для Управление яркостью NeopixelsUpdate 01-янв
CountClock в цветах радуги: 7 шагов (с изображениями)
CountClock в цветах радуги: это руководство было вдохновлено конкурсом Rainbow Contest от Instructables: указывайте время с помощью концепции CountClock, используя все цвета радуги. Представлены все файлы производственного дизайна и программный код Arduino для создания собственного Rainbow Cou