Taula de continguts:
- Pas 1: cablejat
- Pas 2: soroll suau
- Pas 3: efectes amb un soroll suau
- Pas 4: Efectes de gradient aleatori
- Pas 5: el resultat final
Vídeo: Pantalla Arduino TFT Rainbow Noise: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Hem creat aquest projecte arc de Sant Martí utilitzant diverses tècniques de "soroll", que creen efectes aleatoris controlats. Afegint una mica de color, es podria produir un efecte arc de Sant Martí. Utilitza un Arduino Nano i una pantalla OLED de 128x128. Vam mostrar els efectes mitjançant la biblioteca TFT. També hem utilitzat alguns components diversos, com ara una placa de pa i uns quants cables.
Pas 1: cablejat
La tasca més bàsica era el cablejat de l'OLED a l'Arduino. Hem connectat el GND i el VCC als respectius autobusos de la taula de pa; SCL al pin 13 digital; SDA al pin digital 11; RES al pin digital 8; CC al pin 9 digital; CS al pin digital 10 i finalment BL a 3,3V a l'Arduino. Mitjançant els pins de 5v i GND de l’Arduino vam poder alimentar tota la placa de pa.
Pas 2: soroll suau
Després d'inicialitzar els requisits per a la pantalla TFT. Per crear un efecte de soroll suau, primer necessitàvem una funció de soroll bàsica. Això retorna un valor relativament aleatori entre 0 i 1 basat en els valors x i y passats. És important tenir en compte que un ordinador mai no pot produir un resultat realment aleatori, i que aquesta aleatorietat només s’aconsegueix canviant el nombre tant com sigui possible., d'aquí els nombres molt grans de l'equació.
soroll flotant (int x, int y) {int n; n = x + y * 57; n + = (n << 13) ^ n; return (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Després "suavitzem" el soroll amb una altra funció. Això s’aconsegueix produint un valor basat no només en el resultat de la coordenada passada a la funció, sinó també en les coordenades circumdants. Com a resultat d'això, les coordenades properes entre si produeixen un valor similar.
float smoothNoise (float x, float y) {float fractX = x - (int) x; fractura flotant Y = 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; valor flotant = 0,0f; valor + = fractX * fractY * noise (x1, y1); valor + = (1 - fractX) * fractY * soroll (x2, y1); valor + = fractX * (1 - fractY) * soroll (x1, y2); valor + = (1 - fractX) * (1 - fractY) * soroll (x2, y2); valor de retorn; }
Pas 3: efectes amb un soroll suau
Amb això vam crear dos efectes. Per fer-ho, hem recorregut cada píxel de l'OLED i hem pres un valor de soroll aleatori basat en les coordenades x i y d'aquests píxels. El primer d'aquests efectes el vam produir mitjançant l'ús del valor generat per escollir un color i vam acolorir aquest píxel amb el color esmentat. El segon efecte es va produir de manera similar, però també vam multiplicar el color pel valor de soroll generat. Això va donar al patró un efecte més ombrejat. El codi utilitzat es mostra a continuació:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (colors [absNoise], soroll); else setBlockColour (colors [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Color de color, soroll flotant) {TFTscreen.stroke (color.red * noise, colour.green * noise, colour.blue * noise); } void setBlockColour (Color de color) {TFTscreen.stroke (color.red, color.green, color.blue); }
Pas 4: Efectes de gradient aleatori
Hi ha dos efectes que produeixen un gradient aleatori. El primer efecte situa els píxels en relació amb el seu color rgb, fent lentament un patró de degradat a la pantalla. El segon utilitza els mateixos píxels de colors que el primer, però els situa en un ordre fix, creant un degradat diagonal al llarg de la pantalla.
Aquí teniu el primer (basat en els colors):
void Noise1 () {for (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 = Color actual [z] [0]; G = Color actual [z] [1]; B = Color actual [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); if (R_Mai baix = 255) {R_Major = 254; } int R_Offset = random (R_Lower, R_Higher); int G_Inferior = G - ((x + y) / 4); if (G_Mai baix = 255) {G_Major = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Inferior = B - ((x + y) / 4); if (B_Inferior <1) {B_Inferior = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (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))); }}}}
I el segon (l’efecte més ordenat):
void Noise4 () {for (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 = Color actual [z] [0]; G = Color actual [z] [1]; B = Color actual [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); if (R_Mai baix = 255) {R_Major = 254; } int R_Offset = random (R_Lower, R_Higher); int G_Inferior = G - ((x + y) / 4); if (G_Mai baix = 255) {G_Major = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Inferior = B - ((x + y) / 4); if (B_Inferior <1) {B_Inferior = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Pas 5: el resultat final
Al final, hem combinat aquests efectes en una mena de "presentació de diapositives" d'arcs de Sant Martí. Per aconseguir-ho, simplement anomenem cada funció després de l’altra en un bucle while:
mentre que (cert) {Soroll2n3 (fals); Noise2n3 (cert); TFTscreen.background (0, 0, 0); Soroll1 (); Soroll4 (); }
Recomanat:
Pantalla LCD I2C / IIC - Utilitzeu un LCD SPI a la pantalla LCD I2C mitjançant el mòdul SPI a IIC amb Arduino: 5 passos
Pantalla LCD I2C / IIC | Utilitzeu un LCD SPI a la pantalla LCD I2C Utilitzant el mòdul SPI a IIC amb Arduino: Hola, ja que un SPI LCD 1602 normal té massa cables per connectar-se, de manera que és molt difícil connectar-lo amb arduino, però hi ha un mòdul disponible al mercat. converteix la pantalla SPI en pantalla IIC, de manera que només heu de connectar 4 cables
Neopixel Ws2812 Rainbow LED Glow amb M5stick-C - Funcionament de Rainbow a Neopixel Ws2812 amb M5stack M5stick C amb Arduino IDE: 5 passos
Neopixel Ws2812 Rainbow LED Glow amb M5stick-C | Execució de Rainbow a Neopixel Ws2812 Utilització de M5stack M5stick C Usant Arduino IDE: Hola, nois en aquest instructable, aprendrem a utilitzar LEDs neopixel ws2812 o led strip o led matrix o anell led amb placa de desenvolupament m5stack m5stick-C amb Arduino IDE i farem un patró d'arc de Sant Martí amb ell
Rellotge Word Rainbow amb un efecte Rainbow complet i molt més: 13 passos (amb imatges)
Rainbow Word Clock amb un efecte Rainbow complet i molt més: objectius 1) Simple2) No és car3) El més eficient energèticament possible Rainbow Word Clock amb un efecte rainbow complet. el control de la brillantor del NeopixelsUpdate 01-gen
Com fer un rellotge en temps real amb la pantalla Arduino i TFT - Arduino Mega RTC amb pantalla TFT de 3,5 polzades: 4 passos
Com fer un rellotge en temps real amb pantalla Arduino i TFT | Arduino Mega RTC amb pantalla TFT de 3,5 polzades: visiteu el meu canal de Youtube. Introducció: - En aquest post vaig a fer "Rellotge en temps real" amb LCD TFT tàctil de 3,5 polzades, Arduino Mega Mòdul RTC 2560 i DS3231 … Abans de començar … comproveu el vídeo del meu canal de YouTube … Nota: - Si utilitzeu Arduin
Arduino Uno: Animació de mapa de bits en pantalla de pantalla tàctil ILI9341 TFT amb visuino: 12 passos (amb imatges)
Arduino Uno: Animació de mapa de bits a la pantalla tàctil ILI9341 amb pantalla tàctil TFT amb Visuino: els pantalles tàctils TFT basats en ILI9341 són pantalles de pantalla molt populars per a Arduino. Visuino els ha donat suport des de fa força temps, però mai no vaig tenir l'oportunitat d'escriure un tutorial sobre com utilitzar-los. Recentment, però, poca gent va preguntar