Tüm projeler
03Hazır
Joystick ile Kısık Işık
Joystick'i ittikçe LED parlaklık değiştirir — ilk harici sensör.
ADCGPIO
01
Ne öğrenirsin
Harici bir analog sinyali ADC ile okumak. Joystick'in bir ekseni tam bir potansiyometre gibi davranır.
02
Gereken parçalar
03
Bağlantı
| Modül | Kart | Not |
|---|---|---|
| GND | GND | — |
| +5V | 3.3V | 5V değil! Kart 5V'a dayanmaz. |
| VRx | PE3 | Analog giriş (AIN0) |
04
Kod
main.c
1#include <stdint.h>2#include <stdbool.h>3#include "inc/hw_memmap.h"4#include "driverlib/sysctl.h"5#include "driverlib/gpio.h"6#include "driverlib/adc.h"7 8#define LED_ALL (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)9#define PWM_STEPS 25610 11// Software PWM: show the color for 'periods' cycles12static void showColor(uint8_t r, uint8_t g, uint8_t b, uint32_t periods) {13 volatile uint32_t p, i;14 for (p = 0; p < periods; p++)15 for (i = 0; i < PWM_STEPS; i++) {16 uint8_t out = 0;17 if (i < r) out |= GPIO_PIN_1;18 if (i < g) out |= GPIO_PIN_3;19 if (i < b) out |= GPIO_PIN_2;20 GPIOPinWrite(GPIO_PORTF_BASE, LED_ALL, out);21 SysCtlDelay(2);22 }23}24 25// Read joystick X axis (PE3 / AIN0) -> 0..409526static uint32_t readAxis(void) {27 uint32_t buf[1];28 ADCProcessorTrigger(ADC0_BASE, 1);29 while (!ADCIntStatus(ADC0_BASE, 1, false)) {}30 ADCIntClear(ADC0_BASE, 1);31 ADCSequenceDataGet(ADC0_BASE, 1, buf);32 return buf[0];33}34 35int main(void) {36 SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL |37 SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);38 39 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);40 while (!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)) {}41 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_ALL);42 43 SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);44 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);45 while (!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)) {}46 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3); // PE3 = AIN047 48 ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0);49 ADCSequenceStepConfigure(ADC0_BASE, 1, 0,50 ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);51 ADCSequenceEnable(ADC0_BASE, 1);52 ADCIntClear(ADC0_BASE, 1);53 54 while (1) {55 uint8_t bri = (uint8_t)(readAxis() / 16); // 0..25556 showColor(bri, bri, bri, 20); // white at that brightness57 }58}05
Çıktı
Aşağıdaki simülasyon tarayıcında çalışır — gerçek kartın davranışını taklit eder.
- ADC
- 2048
- parlaklik
- 128/255
- PE3
- 1.65 V