Projeto 1: “Olá Mundo!”
#include
#include
int main()
{
wiringPiSetup();
// printf("Hello World!\n");
for(;;)
{
printf("Hello World!\n");
delay(1000);
}
}
Projeto 2: LED intermitente
#include
int main()
{
wiringPiSetup();
{
pinMode(1,OUTPUT);
}
while(1)
{
digitalWrite(1,HIGH);
delay(500);
digitalWrite(1,LOW);
delay(500);
}
}
Projeto 3: LED de respiração
#include
#include
#include
#include
#define LED 1
int main(void)
{
int bright;
printf("Raspberry Pi wiringPi PWM test program\n");
if (wiringPiSetup() == -1)
{
printf("GPIO setup error!\n");
exit(1);
}
pinMode(LED,PWM_OUTPUT);
while(1)
{
for (bright = 0; bright < 1024; ++bright) { pwmWrite(LED,bright); printf("bright:%d\n",bright); delay(3); } for (bright = 1023; bright >= 0; --bright)
{
pwmWrite(LED,bright);
printf("bright:%d\n",bright);
delay(3);
}
}
return 0;
}
Projeto 4: Luzes de semáforo
#include
int main()
{
wiringPiSetup();
char i;
char j;
for(i=1;i<4;i++)
{
pinMode(i,OUTPUT);
}
while(1)
{
digitalWrite(1, HIGH);//// turn on blue LED
delay(5000);// wait 5 seconds
digitalWrite(1, LOW); // turn off blue LED
for(j=0;j<3;j++) // blinks for 3 times
{
delay(500);// wait 0.5 second
digitalWrite(2, HIGH);// turn on yellow LED
delay(500);// wait 0.5 second
digitalWrite(2, LOW);// turn off yellow LED
}
delay(500);// wait 0.5 second
digitalWrite(3, HIGH);// turn on red LED
delay(5000);// wait 5 second
digitalWrite(3, LOW);// turn off red LED
}
}
Projeto 5: Efeito perseguição de leds
#include
int main()
{
wiringPiSetup();
char i;
for(i=1;i<4;i++)
{
pinMode(i,OUTPUT);
}
while(1)
{
for (i=1;i<4;i ++)
{
digitalWrite(i, LOW);// set I/O pins as “low”
delay(200); // delay
}
for (i=1;i<4;i ++)
{
digitalWrite(i, HIGH);// set I/O pins as “high”
delay(200); // delay
}
}
}
Projeto 6: LED controlado por botão
#include
int main()
{
wiringPiSetup();
char val;
{
pinMode(1,INPUT);
pinMode(2,OUTPUT);
}
while(1)
{
val=digitalRead(1);
if(val==1)//check if the button is pressed, if yes, turn on the LED
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
}
}
Projeto 7: Buzzer passivo
#include
int main()
{
wiringPiSetup();
char i;
char j;
{
pinMode(1,OUTPUT);
}
while(1)
{
for(i=0;i<80;i++)// output a frequency sound
{ digitalWrite(1,HIGH);// sound
delay(1);//delay1ms
digitalWrite(1,LOW);//not sound
delay(1);//ms delay
}
for(j=0;j<100;j++)// output a frequency sound
{ digitalWrite(1,HIGH);// sound
delay(2);
digitalWrite(1,LOW);//not sound
delay(2);//2ms delay
}
}
}
Projeto 8: Buzzer ativo
#include
int main()
{
wiringPiSetup();
{
pinMode(1,OUTPUT);
}
while(1)
{
digitalWrite(1,HIGH);
delay(1000);
digitalWrite(1,LOW);
delay(1000);
}
}
Projeto 9: Respondente
#include
int redled=25; // set red LED as “output”
int yellowled=24; // set yellow LED as “output”
int blueled=23; // set blue LED as “output”
int redpin=4; // initialize pin for red button
int yellowpin=5; // initialize pin for yellow button
int bluepin=6; // initialize pin for blue button
int restpin=1; // initialize pin for reset button
int red;
int yellow;
int blue;
void clear_led()// all LED off
{
digitalWrite(redled,LOW);
digitalWrite(blueled,LOW);
digitalWrite(yellowled,LOW);
}
void RED_YES()// execute the code until red light is on; end cycle when reset button is pressed
{
while(digitalRead(restpin)==1)
{
digitalWrite(redled,HIGH);
digitalWrite(blueled,LOW);
digitalWrite(yellowled,LOW);
}
clear_led();
}
void YELLOW_YES()// execute the code until yellow light is on; end cycle when reset button is pressed
{
while(digitalRead(restpin)==1)
{
digitalWrite(redled,LOW);
digitalWrite(blueled,LOW);
digitalWrite(yellowled,HIGH);
}
clear_led();
}
void BLUE_YES()// execute the code until green light is on; end cycle when reset button is pressed
{
while(digitalRead(restpin)==1)
{
digitalWrite(redled,LOW);
digitalWrite(blueled,HIGH);
digitalWrite(yellowled,LOW);
}
clear_led();
}
int main()
{
wiringPiSetup();
{
pinMode(redled,OUTPUT);
pinMode(yellowled,OUTPUT);
pinMode(blueled,OUTPUT);
pinMode(redpin,INPUT);
pinMode(yellowpin,INPUT);
pinMode(bluepin,INPUT);
}
while(1)
{
red=digitalRead(redpin);
yellow=digitalRead(yellowpin);
blue=digitalRead(bluepin);
if(red==LOW)RED_YES();
if(yellow==LOW)YELLOW_YES();
if(blue==LOW)BLUE_YES();
}
}
Projeto 10: Sensor de chama
#include
int main()
{
wiringPiSetup();
char val;
{
pinMode(1,INPUT);
pinMode(2,OUTPUT);
}
while(1)
{
val=digitalRead(1);
if(val==1)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
}
}
Projeto 11: Sensor de inclinação de bola
#include
int main()
{
wiringPiSetup();
char val;
{
pinMode(1,INPUT);
pinMode(2,OUTPUT);
}
while(1)
{
val=digitalRead(1);
if(val==1)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
}
}
Projeto 12: Controlo Remoto Infravermelho
#include
#include
#define PIN 1
#define IO digitalRead(PIN)
unsigned char i,idx,cnt;
unsigned char count;
unsigned char data[4];
int main()
{
if (wiringPiSetup() < 0)return 1;
pinMode(PIN, INPUT);
pullUpDnControl(PIN, PUD_UP);
printf("IRM Test Program ... \n");
while (1)
{
if(IO == 0)
{
count = 0;
while(IO == 0 && count++ < 200) //9ms
delayMicroseconds(60);
count = 0;
while(IO == 1 && count++ < 80) //4.5ms
delayMicroseconds(60);
idx = 0;
cnt = 0;
data[0]=0;
data[1]=0;
data[2]=0;
data[3]=0;
for(i =0;i<32;i++)
{
count = 0;
while(IO == 0 && count++ < 15) //0.56ms
delayMicroseconds(60);
count = 0;
while(IO == 1 && count++ < 40) //0: 0.56ms; 1: 1.69ms delayMicroseconds(60); if (count > 25)data[idx] |= (1<<cnt);
if(cnt == 7)
{
cnt = 0;
idx++;
}
else cnt++;
}
if(data[0]+data[1] == 0xFF && data[2]+data[3]==0xFF) //check
printf("Get the key: 0x%02x\n",data[2]);
}
}
}
Projeto 13: Display de segmentos de LED de 1 dígito
#include
int a=27;//GPIO16
int b=26;//GPIO12
int c=23;//GPIO13
int int e=25;//GPIO26
int f=28;// GPIO20
int g=29;//GPIO21
int dp=22;//GPIO6
int i;
void digital_0()//0
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(dp,LOW);
}
void digital_1()//1
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,LOW);
}
void digital_2()//2
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
void digital_3()//3
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
void digital_4()//4
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
void digital_5()//5
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
digitalWrite(e,LOW);
}
void digital_6()//6
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
void digital_7()//7
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,LOW);
}
void digital_8()//8
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
void digital_9()//9
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
}
int main()
{
wiringPiSetup();
{
for(i=22;i<=29;i++)
pinMode(i,OUTPUT);
}
while(1)
{
digital_0();//0
delay(1000);
digital_1();//1
delay(1000);
digital_2();//2
delay(1000);
digital_3();//3
delay(1000);
digital_4();//4
delay(1000);
digital_5();//5
delay(1000);
digital_6();//6
delay(1000);
digital_7();//7
delay(1000);
digital_8();//8
delay(1000);
digital_9();//9
delay(1000);
}
}
Projeto 14: 74HC595N
#include
#include
int dataPin = 23; //define three pins
int latchPin = 24;
int clockPin = 25;
int a[10]={
252,96,218,242,102,182,190,224,254,246};
int x;
int main()
{
wiringPiSetup();
{
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT); //three pins as output
}
while(1)
{
for(x=0; x<10 ;x++ ) //calculate counting function
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,a[x]); //display array a[x]
digitalWrite(latchPin,HIGH);
delay(1000);
}
}
}
Projeto 15: Display de segmentos de LED de 4 dígitos
#include
int a = 28;// GPIO20
int b = 5; // GPIO24
int c = 22;// GPIO6
int d = 24;// GPIO19
int e = 25;// GPIO26
int f = 27;// GPIO16
int g = 21;// GPIO5
int dp = 23;// GPIO13
int d4 = 3;// GPIO22
int d3 = 6;// GPIO25
int d2 = 26;// GPIO12
int d1 = 29;// GPIO21
// set variable
long n = 1230;
int x = 100;
int del = 55; // fine adjustment for clock
void WeiXuan(unsigned char n)//
{
switch (n)
{
case 1:
digitalWrite(d1, LOW);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
break;
case 2:
digitalWrite(d1, HIGH);
digitalWrite(d2, LOW);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
break;
case 3:
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, LOW);
digitalWrite(d4, HIGH);
break;
case 4:
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, LOW);
break;
default :
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
break;
}
}
void Num_0()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
digitalWrite(dp, LOW);
}
void Num_1()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp, LOW);
}
void Num_2()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_3()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_4()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_5()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_6()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_7()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp, LOW);
}
void Num_8()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Num_9()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp, LOW);
}
void Clear() // clear the screen
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp, LOW);
}
void pickNumber(unsigned char n)// select number
{
switch (n)
{
case 0: Num_0();
break;
case 1: Num_1();
break;
case 2: Num_2();
break;
case 3: Num_3();
break;
case 4: Num_4();
break;
case 5: Num_5();
break;
case 6: Num_6();
break;
case 7: Num_7();
break;
case 8: Num_8();
break;
case 9: Num_9();
break;
default: Clear();
break;
}
}
void Display(unsigned char x, unsigned char Number)// take x as coordinate and display number
{
WeiXuan(x);
pickNumber(Number);
delay(1);
Clear() ; // clear the screen
}
int i;
int main()
{
wiringPiSetup();
{
{
pinMode(3,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
for(i=21;i<=29;i++) { pinMode(i,OUTPUT); } } while(1) { int w=0; int s=0; int y=0; int z=0; unsigned long currentMillis = millis(); while(z>=0)
{
while(millis()-currentMillis<100) { Display(1,w); Display(2,s); Display(3,y); Display(4,z); } currentMillis = millis(); z++; if (z>9)
{
y++;
z=0;
}
if (y>9)
{
s++;
y=0;
}
if (s>9)
{
w++;
s=0;
}
if (w>9)
{
w=0;
s=0;
y=0;
z=0;
}
}
}
}
Projeto 16: Matriz de LED 8×8
#include
int main()
{
wiringPiSetup();
char i;
char j;
for(i=0;i<8;i++)
{
pinMode(i,OUTPUT);
}
for(j=21;j<29;j++)
{
pinMode(j,OUTPUT);
}
while(1)
{
for(i=0;i<8;i++)
{
digitalWrite(i, HIGH);// set I/O pins as “high”
delay(200); // delay
}
for(j=21;j<29;j++)
{
digitalWrite(j, LOW);// set I/O pins as “low”
}
for(i=0;i<8;i++)
{
digitalWrite(i, LOW);// set I/O pins as “high”
delay(200); // delay
}
for(i=0;i<8;i++)
{
digitalWrite(i, HIGH);// set I/O pins as “high”
delay(200); // delay
}
for(j=21;j<29;j++)
{
digitalWrite(j,HIGH);// set I/O pins as “high”
delay(200); // delay
}
for(j=21;j<29;j++)
{
digitalWrite(j, LOW);// set I/O pins as “low”
delay(200); // delay
}
for(i=0;i<8;i++)
{
digitalWrite(i, LOW);// set I/O pins as “low”
delay(200); // delay
}
}
}
Projeto 17: Display LCD 16×2
#include
int main()
{
//int RS=21,RW=22,EN=23;
//int DB0=3,DB1=4,DB2=5,DB3=6,DB4=7,DB5=8,DB6=9,DB7=10;
int DB0=0,DB1=1,DB2=2,DB3=3,DB4=4,DB5=5,DB6=6,DB7=7;
int RS=21,RW=22,EN=23;
//int i;
int i;
wiringPiSetup();
//Serial.begin(9600);
pinMode(RS,OUTPUT);
pinMode(RW,OUTPUT);
pinMode(EN,OUTPUT);
pinMode(DB0,OUTPUT);
pinMode(DB1,OUTPUT);
pinMode(DB2,OUTPUT);
pinMode(DB3,OUTPUT);
pinMode(DB4,OUTPUT);
pinMode(DB5,OUTPUT);
pinMode(DB6,OUTPUT);
pinMode(DB7,OUTPUT);
digitalWrite(RS,HIGH);
digitalWrite(RW,LOW);
digitalWrite(RS,LOW);
digitalWrite(EN,LOW);
delay(1);
//digitalWrite(DB0,0);
//digitalWrite(DB1,0);
digitalWrite(DB2,0);
digitalWrite(DB3,1);
digitalWrite(DB4,1);
digitalWrite(DB5,1);
digitalWrite(DB6,0);
digitalWrite(DB7,0);
digitalWrite(EN,HIGH);
//Serial.println("zzl");
delay(1);
digitalWrite(EN,LOW);
digitalWrite(RS,HIGH);
delay(5);
/************************************/
digitalWrite(RS,HIGH);
digitalWrite(RW,LOW);
digitalWrite(RS,LOW);
digitalWrite(EN,LOW);
delay(1);
digitalWrite(DB0,LOW);
digitalWrite(DB1,LOW);
digitalWrite(DB2,HIGH);
digitalWrite(DB3,HIGH);
for(i=4;i<8;i++)
{ digitalWrite(i,LOW); }
digitalWrite(EN,HIGH);
delay(1);
digitalWrite(EN,LOW);
digitalWrite(RS,HIGH);
delay(5);
/**************************************/
digitalWrite(RS,HIGH);
digitalWrite(RW,LOW);
digitalWrite(RS,LOW);
digitalWrite(EN,LOW);
delay(1);
digitalWrite(DB0,LOW);
digitalWrite(DB1,HIGH);
digitalWrite(DB2,HIGH);
digitalWrite(DB3,LOW);
for(i=4;i<8;i++)
{ digitalWrite(i,LOW); }
digitalWrite(EN,HIGH);
delay(1);
digitalWrite(EN,LOW);
digitalWrite(RS,HIGH);
delay(5);
/*******************************************/
digitalWrite(RS,HIGH);
digitalWrite(RW,LOW);
digitalWrite(RS,LOW);
digitalWrite(EN,LOW);
delay(1);
digitalWrite(DB0,HIGH);
for(i=1;i<8;i++)
{ digitalWrite(i,LOW); }
digitalWrite(EN,HIGH);
delay(1);
digitalWrite(EN,LOW);
digitalWrite(RS,HIGH);
delay(5);
/*************************************************/
// put your setup code here, to run once:
for (;;)
{
digitalWrite(RS,LOW);
digitalWrite(RW,LOW);
digitalWrite(RS,HIGH);
digitalWrite(EN,LOW);
delay(1);
for(i=0;i<4;i++)
{digitalWrite(i,LOW);}
digitalWrite(DB4,HIGH);
digitalWrite(DB5,HIGH);
digitalWrite(DB6,LOW);
digitalWrite(DB7,LOW);
digitalWrite(EN,HIGH);
delay(1);
digitalWrite(EN,LOW);
digitalWrite(RS,LOW);
delay(100);
//while(1);
//delay(5000);
// put your main code here, to run repeatedly:
}
return 0;
}
Projeto 18: LED RGB
#include
#include
#include
#define LedPinRed 0
#define LedPinGreen 1
#define LedPinBlue 2
int colors[] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x9400D3};
/******************************************************************************************
*A number is linear mapped from a range to another one, for example, a number from 0 to 100 is mapped to 0 ~ 255.
******************************************************************************************/
int map(int x, int in_min, int in_max, int out_min, int out_max)
{
return (x -in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void ledInit(void)
{
softPwmCreate(LedPinRed, 0, 100); //create a soft pwm, original duty cycle is 0Hz, range is 0~100
softPwmCreate(LedPinGreen,0, 100);
softPwmCreate(LedPinBlue, 0, 100);
}
void ledColorSet(int color) //set color, for example: 0xde3f47
{
int r_val, g_val, b_val;
r_val = (color & 0xFF0000) >> 16; //get red value
g_val = (color & 0x00FF00) >> 8; //get green value
b_val = (color & 0x0000FF) >> 0; //get blue value
r_val = map(r_val, 0, 255, 0, 100); //change a num(0~255) to 0~100
g_val = map(g_val, 0, 255, 0, 100);
b_val = map(b_val, 0, 255, 0, 100);
softPwmWrite(LedPinRed, 100 - r_val); //change duty cycle
softPwmWrite(LedPinGreen, 100 - g_val);
softPwmWrite(LedPinBlue, 100 - b_val);
}
int main(void)
{
int i;
if(wiringPiSetup() == -1){ //when initialize wiringPi failed, print message to screen
printf("setup wiringPi failed !\n");
return 1;
}
ledInit();
while(1){
for(i = 0; i < sizeof(colors)/sizeof(int); i++){
ledColorSet(colors[i]);
delay(500);
}
}
return 0;
}
Projeto 19: Servomotor
#include
int main()
{
wiringPiSetup();
pinMode(1,OUTPUT);
int i;
for(;;)
{
for(i=0;i<50;i++)
{
digitalWrite(1,HIGH);
delayMicroseconds(1000);
digitalWrite(1,LOW);
delay(19);
}
delay(1000);
for(i=0;i<50;i++)
{
digitalWrite(1,HIGH);
delayMicroseconds(2000);
digitalWrite(1,LOW);
delay(18);
}
delay(1000);
}
return 0;
}
Projeto 20: Stepper Driver
/* moto.c
* A program to control a stepper motor through the GPIO on Raspberry Pi.
* Author: Darran Zhang (http://www.codelast.com)
*/
#include
#include
#include
#include
#define CLOCKWISE 1
#define COUNTER_CLOCKWISE 2
void delayMS(int x);
void rotate(int* pins, int direction);
int main(int argc,char* argv[]) {
if (argc < 4) {
printf("Usage example: ./motor 0 1 2 3 \n");
return 1;
}
/* number of the pins which connected to the stepper motor driver board */
int pinA = atoi(argv[1]);
int pinB = atoi(argv[2]);
int pinC = atoi(argv[3]);
int pinD = atoi(argv[4]);
int pins[4] = {pinA, pinB, pinC, pinD};
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
return 1;
}
/* set mode to output */
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
delayMS(50); // wait for a stable status
for (int i = 0; i < 500; i++) {
rotate(pins, CLOCKWISE);
}
return 0;
}
/* Suspend execution for x milliseconds intervals.
* @param ms Milliseconds to sleep.
*/
void delayMS(int x) {
usleep(x * 1000);
}
/* Rotate the motor.
* @param pins A pointer which points to the pins number array.
* @param direction CLOCKWISE for clockwise rotation, COUNTER_CLOCKWISE for counter clockwise rotation.
*/
void rotate(int* pins, int direction) {
for (int i = 0; i < 4; i++) {
if (CLOCKWISE == direction) {
for (int j = 0; j < 4; j++) {
if (j == i) {
digitalWrite(pins[3 - j], 1); // output a high level
} else {
digitalWrite(pins[3 - j], 0); // output a low level
}
}
} else if (COUNTER_CLOCKWISE == direction) {
for (int j = 0; j < 4; j++) {
if (j == i) {
digitalWrite(pins[j], 1); // output a high level
} else {
digitalWrite(pins[j], 0); // output a low level
}
}
}
delayMS(4);
}
}
Projeto 21: Fotoresistência
#include
#include
#include
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
int main(void)
{
unsigned char value;
wiringPiSetup();
pinMode(1,OUTPUT);
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
printf("A0:%d\n",value);
delay(100);
if(value>150)
{
digitalWrite(1,HIGH);
delay(100);
}
else
{
digitalWrite(1,LOW);
}
}
}
Projeto 22: Sensor de temperatura LM35
#include
#include
#include
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
int main(void)
{
unsigned char value;
wiringPiSetup();
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
value=(500 * value) /256;
printf("Temp:%d C\n",value);
delay(50);
}
}
Projeto 23: Shield RPI GPIO-PCF8591
#include
#include
#include
#define Address 0x48 //pcf8591 Address
#define BASE 64
#define A0 BASE+0 //input address of A0
#define A1 BASE+1 //input address of A1
#define A2 BASE+2 //input address of A2
#define A3 BASE+3 //input address of A3
int main(void)
{
unsigned char value;
wiringPiSetup();
pcf8591Setup(BASE,Address); //configure pcf8591
while(1)
{
value=analogRead(A0); // read the value of A0 port
printf("A0:%d\n",value); // print the value of A0 on the terminal
delay(100);
}
}
Projeto 24: Sensor de movimento PIR
#include
#include
int main()
{
wiringPiSetup();
char val;
{
pinMode(1,INPUT);
pinMode(2,OUTPUT);
}
while(1)
{
val=digitalRead(1);
if(val==1)
{
printf("Somebody is in this area!\n");
digitalWrite(2,HIGH);
delay(100);
}
else
{
printf("No one!\n");
digitalWrite(2,LOW);
delay(100);
}
}
}
Projeto 25: Módulo de gás analógico
#include
#include
#include
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
int main(void)
{
unsigned char value;
wiringPiSetup();
pinMode(1,OUTPUT);
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
printf("A0:%d\n",value);
delay(100);
}
}
Projeto 26: Módulo de aceleração de três eixos ADXL345
#include
#include
#include
#include
#define DevAddr 0x53 //device address
struct acc_dat{
int x;
int y;
int z;
};
void adxl345_init(int fd)
{
wiringPiI2CWriteReg8(fd, 0x31, 0x0b);
wiringPiI2CWriteReg8(fd, 0x2d, 0x08);
// wiringPiI2CWriteReg8(fd, 0x2e, 0x00);
wiringPiI2CWriteReg8(fd, 0x1e, 0x00);
wiringPiI2CWriteReg8(fd, 0x1f, 0x00);
wiringPiI2CWriteReg8(fd, 0x20, 0x00);
wiringPiI2CWriteReg8(fd, 0x21, 0x00);
wiringPiI2CWriteReg8(fd, 0x22, 0x00);
wiringPiI2CWriteReg8(fd, 0x23, 0x00);
wiringPiI2CWriteReg8(fd, 0x24, 0x01);
wiringPiI2CWriteReg8(fd, 0x25, 0x0f);
wiringPiI2CWriteReg8(fd, 0x26, 0x2b);
wiringPiI2CWriteReg8(fd, 0x27, 0x00);
wiringPiI2CWriteReg8(fd, 0x28, 0x09);
wiringPiI2CWriteReg8(fd, 0x29, 0xff);
wiringPiI2CWriteReg8(fd, 0x2a, 0x80);
wiringPiI2CWriteReg8(fd, 0x2c, 0x0a);
wiringPiI2CWriteReg8(fd, 0x2f, 0x00);
wiringPiI2CWriteReg8(fd, 0x38, 0x9f);
}
struct acc_dat adxl345_read_xyz(int fd)
{
char x0, y0, z0, x1, y1, z1;
struct acc_dat acc_xyz;
x0 = 0xff - wiringPiI2CReadReg8(fd, 0x32);
x1 = 0xff - wiringPiI2CReadReg8(fd, 0x33);
y0 = 0xff - wiringPiI2CReadReg8(fd, 0x34);
y1 = 0xff - wiringPiI2CReadReg8(fd, 0x35);
z0 = 0xff - wiringPiI2CReadReg8(fd, 0x36);
z1 = 0xff - wiringPiI2CReadReg8(fd, 0x37);
acc_xyz.x = (int)(x1 << 8) + (int)x0;
acc_xyz.y = (int)(y1 << 8) + (int)y0;
acc_xyz.z = (int)(z1 << 8) + (int)z0;
return acc_xyz;
}
int main(void)
{
int fd;
struct acc_dat acc_xyz;
fd = wiringPiI2CSetup(DevAddr);
if(-1 == fd){
perror("I2C device setup error");
}
adxl345_init(fd);
while(1){
acc_xyz = adxl345_read_xyz(fd);
printf("x: %05d y: %05d z: %05d\n", acc_xyz.x, acc_xyz.y, acc_xyz.z);
delay(100);
}
return 0;
}
Projeto 27: Sensor ultrassónico HC-SR04
#include
#include
#include <sys/time.h>
#define Trig 5
#define Echo 4
void ultraInit(void)
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
float disMeasure(void)
{
struct timeval tv1;
struct timeval tv2;
long start, stop;
float dis;
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
while(!(digitalRead(Echo) == 1));
gettimeofday(&tv1, NULL);
while(!(digitalRead(Echo) == 0));
gettimeofday(&tv2, NULL);
start = tv1.tv_sec * 1000000 + tv1.tv_usec;
stop = tv2.tv_sec * 1000000 + tv2.tv_usec;
dis = (float)(stop - start) / 1000000 * 34000 / 2;
return dis;
}
int main(void)
{
float dis;
if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
printf("setup wiringPi failed !");
return 1;
}
ultraInit();
while(1){
dis = disMeasure();
printf("distance = %0.2f cm\n",dis);
delay(500);
}
return 0;
}
Projeto 28: Módulo Joystick
#include
#include
#include
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
char dat;
int main(void)
{
unsigned char value;
wiringPiSetup();
pinMode(1,INPUT);
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
printf("X:%d ",value);
value=analogRead(A1);
printf("Y:%d ",value);
dat=digitalRead(1);
if(dat==HIGH)
printf("DO:%d\n",dat);
if(dat==LOW)
printf("DO:%d\n",dat);
delay(100);
// analogWrite(BASE,value++);
// printf("AOUT:%d\n",value++);
// delay(50);
}
}
Projeto 29: Módulo Relé
#include
int main()
{
wiringPiSetup();
{
pinMode(1,OUTPUT);
}
while(1)
{
digitalWrite(1,HIGH);
delay(500);
digitalWrite(1,LOW);
delay(500);
}
}
Projeto 30: Sensor de temperatura e humidade DHT11
#include
#include
#include
#include
#define MAX_TIME 85
#define DHT11PIN 1
#define ATTEMPTS 5 //retry 5 times when no response
int dht11_val[5]={0,0,0,0,0};
int dht11_read_val(){
uint8_t lststate=HIGH; //last state
uint8_t counter=0;
uint8_t j=0,i;
for(i=0;i<5;i++)
dht11_val[i]=0;
//host send start signal
pinMode(DHT11PIN,OUTPUT); //set pin to output
digitalWrite(DHT11PIN,LOW); //set to low at least 18ms
delay(18);
digitalWrite(DHT11PIN,HIGH); //set to high 20-40us
delayMicroseconds(40);
//start recieve dht response
pinMode(DHT11PIN,INPUT); //set pin to input
for(i=0;i<MAX_TIME;i++) { counter=0; while(digitalRead(DHT11PIN)==lststate){ //read pin state to see if dht responsed. if dht always high for 255 + 1 times, break this while circle counter++; delayMicroseconds(1); if(counter==255) break; } lststate=digitalRead(DHT11PIN); //read current state and store as last state. if(counter==255) //if dht always high for 255 + 1 times, break this for circle break; // top 3 transistions are ignored, maybe aim to wait for dht finish response signal if((i>=4)&&(i%2==0)){
dht11_val[j/8]<<=1; //write 1 bit to 0 by moving left (auto add 0) if(counter>16) //long mean 1
dht11_val[j/8]|=1; //write 1 bit to 1
j++;
}
}
// verify checksum and print the verified data
if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF))){
printf("RH:%d,TEMP:%d\n",dht11_val[0],dht11_val[2]);
return 1;
}
else
return 0;
}
int main(void){
int attempts=ATTEMPTS;
if(wiringPiSetup()==-1)
exit(1);
while(attempts){ //you have 5 times to retry
int success = dht11_read_val(); //get result including printing out
if (success) { //if get result, quit program; if not, retry 5 times then quit
break;
}
attempts--;
delay(2500);
}
return 0;
}
Projeto 31: Sensor de humidade do solo
#include
#include
#include
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
int main(void)
{
unsigned char value;
wiringPiSetup();
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
printf("S:%d\n",value);
delay(50);
}
}
Projeto 32: Módulo de relógio DS3231
#include
#include
#include
//regaddr,seconds,minutes,hours,weekdays,days,months,yeas
char buf[]={0x00,0x00,0x00,0x18,0x04,0x12,0x08,0x15};
char *str[] ={"SUN","Mon","Tues","Wed","Thur","Fri","Sat"};
void pcf8563SetTime()
{
bcm2835_i2c_write(buf,8);
}
void pcf8563ReadTime()
{
buf[0] = 0x00;
bcm2835_i2c_write_read_rs(buf ,1, buf,7);
}
int main(int argc, char **argv)
{
if (!bcm2835_init())return 1;
bcm2835_i2c_begin();
bcm2835_i2c_setSlaveAddress(0x68);
bcm2835_i2c_set_baudrate(10000);
printf("start..........\n");
pcf8563SetTime();
while(1)
{
pcf8563ReadTime();
buf[0] = buf[0]&0x7F; //sec
buf[1] = buf[1]&0x7F; //min
buf[2] = buf[2]&0x3F; //hour
buf[3] = buf[3]&0x07; //week
buf[4] = buf[4]&0x3F; //day
buf[5] = buf[5]&0x1F; //mouth
//year/month/day
printf("20%02x/%02x/%02x ",buf[6],buf[5],buf[4]);
//hour:minute/second
printf("%02x:%02x:%02x ",buf[2],buf[1],buf[0]);
//weekday
printf("%s\n",str[(unsigned char)buf[3]-1]);
bcm2835_delay(1000);
}
bcm2835_i2c_end();
bcm2835_close();
return 0;
}