# 结果展示
# 接线图
# 代码
# C
#include <wiringPi.h> | |
#include <softPwm.h> | |
#include <stdio.h> | |
#define uchar unsigned char | |
#define LedPinRed 0 | |
#define LedPinGreen 1 | |
#define LedPinBlue 3 | |
void ledInit(void) | |
{ | |
softPwmCreate(LedPinRed, 0, 100); | |
softPwmCreate(LedPinGreen, 0, 100); | |
softPwmCreate(LedPinBlue, 0, 100); | |
} | |
void ledColorSet(uchar r_val, uchar g_val, uchar b_val) | |
{ | |
softPwmWrite(LedPinRed, r_val); | |
softPwmWrite(LedPinGreen, g_val); | |
softPwmWrite(LedPinBlue, b_val); | |
} | |
int main(void) | |
{ | |
int i = 0; | |
if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen | |
printf("setup wiringPi failed !"); | |
return 1; | |
} | |
//printf("linker LedPin : GPIO %d(wiringPi pin)\n",LedPin); //when initialize wiring successfully,print message to screen | |
ledInit(); | |
while(i < 10){ | |
ledColorSet(0xff, 0x00, 0x00); //red | |
delay(1000); | |
ledColorSet(0x00, 0xff, 0x00); //green | |
delay(1000); | |
ledColorSet(0x00, 0x00, 0xff); //blue | |
delay(1000); | |
i++; | |
} | |
return 0; | |
} |
# Python
pi:#!/usr/bin/env python | |
import RPi.GPIO as GPIO | |
import time | |
colors = [0xFF0000, 0x00FF00, 0x0000FF] | |
pins = {'pin_R':11, 'pin_G':12, 'pin_B':15} # pins is a dict | |
GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location | |
for i in pins: | |
GPIO.setup(pins[i], GPIO.OUT) # Set pins' mode is output | |
GPIO.output(pins[i], GPIO.HIGH) # Set pins to high(+3.3V) to off led | |
p_R = GPIO.PWM(pins['pin_R'], 2000) # set Frequece to 2KHz | |
p_G = GPIO.PWM(pins['pin_G'], 2000) | |
p_B = GPIO.PWM(pins['pin_B'], 2000) | |
p_R.start(0) # Initial duty Cycle = 0(leds off) | |
p_G.start(0) | |
p_B.start(0) | |
def map(x, in_min, in_max, out_min, out_max): | |
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min | |
def setColor(col): # For example : col = 0x112233 | |
R_val = (col & 0xff0000) >> 16 | |
G_val = (col & 0x00ff00) >> 8 | |
B_val = (col & 0x0000ff) >> 0 | |
R_val = map(R_val, 0, 255, 0, 100) | |
G_val = map(G_val, 0, 255, 0, 100) | |
B_val = map(B_val, 0, 255, 0, 100) | |
p_R.ChangeDutyCycle(R_val) # Change duty cycle | |
p_G.ChangeDutyCycle(G_val) | |
p_B.ChangeDutyCycle(B_val) | |
def loop(): | |
while True: | |
for col in colors: | |
setColor(col) | |
time.sleep(1) | |
def destroy(): | |
p_R.stop() | |
p_G.stop() | |
p_B.stop() | |
for i in pins: | |
GPIO.output(pins[i], GPIO.HIGH) # Turn off all leds | |
GPIO.cleanup() | |
if __name__ == "__main__": | |
try: | |
loop() | |
except KeyboardInterrupt: | |
destroy() |