Tüm projeler
01Hazır
RGB Işık Şöleni
Kart üzerindeki tek LED'den yazılımsal PWM ile milyonlarca renk.
GPIOPWM
01
Ne öğrenirsin
GPIO çıkışı, sistem clock ayarı ve yazılımsal PWM ile parlaklık kontrolü. Hiç harici parça gerekmez.
02
Gereken parçalar
03
Kod
main.c
1#include <stdint.h>2#include "inc/hw_memmap.h"3#include "driverlib/sysctl.h"4#include "driverlib/gpio.h"5 6#define LED_ALL (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)7#define PWM_STEPS 2568 9static void showColor(uint8_t r, uint8_t g, uint8_t b, uint32_t periods) {10 volatile uint32_t p, i;11 for (p = 0; p < periods; p++)12 for (i = 0; i < PWM_STEPS; i++) {13 uint8_t out = 0;14 if (i < r) out |= GPIO_PIN_1;15 if (i < g) out |= GPIO_PIN_3;16 if (i < b) out |= GPIO_PIN_2;17 GPIOPinWrite(GPIO_PORTF_BASE, LED_ALL, out);18 SysCtlDelay(2);19 }20}21 22// Color wheel: 0..255 -> a rainbow color23static void wheel(uint8_t pos, uint8_t *r, uint8_t *g, uint8_t *b) {24 if (pos < 85) { *r = 255 - pos * 3; *g = pos * 3; *b = 0; }25 else if (pos < 170) { pos -= 85; *r = 0; *g = 255 - pos * 3; *b = pos * 3; }26 else { pos -= 170; *r = pos * 3; *g = 0; *b = 255 - pos * 3; }27}28 29int main(void) {30 SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL |31 SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);32 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);33 while (!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)) {}34 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_ALL);35 36 uint8_t r, g, b; uint16_t pos;37 while (1)38 for (pos = 0; pos < 256; pos++) {39 wheel((uint8_t)pos, &r, &g, &b);40 showColor(r, g, b, 3); // smooth transition41 }42}04
Çıktı
Aşağıdaki simülasyon tarayıcında çalışır — gerçek kartın davranışını taklit eder.
- wheel
- 0/255
- RGB
- 255,0,0