RaspberryPi puls bredd modulering Demonstration (3 / 9 steg)
Steg 3: Programkoden
/***************************************************************************
* PWMdemo.c:
*
* Avhängighet påen wiringPi måste installeras.
* Instruktioner för nedladdning, installera och använda
* är beläget på wiringpi.com
*
* Kompilera med: gcc -o PWMdemo PWMdemo.c - lwiringPi
*
* Alla pin nummer är wiringPi tal om inte annat anges.
*
* Stift 1 är den enda hårdvara PWM stiftet RaspberryPi modeller.
* Det är fysiska pin nummer 12 på rubriken GPIO.
*
* Pin 24 är det andra hårdvara PWM stiftet på modell B + bara.
* Det är fysiska pin nummer 35 GPIO i inköpshuvudet.
*
* Det finns en LED (med serien motstånd) ansluten till PWMpin och marken.
* Ett oscilloskop kan anslutas till PWMpin och marken.
*
* Du kan höra tonerna om högtalarna ansluts till uttaget audio.
* Ändra olika inställningar kan göra tonerna väldigt högt.
*
* Menyval:
*
* 1 tona In-ut - löper genom en för slinga en gång.
* Det går från 0 till 100% till 0 av intermittensen i den
* antalet steg som anges i intervallet.
*
* 2 växla PWM läge mellan balanserade och mark: utrymme.
*
* 3 ange intervallet, antalet duty cycle steg mellan 0 och 100%.
*
* 4 ändra PWM klockan.
*
* 5 Ange intermittensen. Intermittensen bör inte vara större än utbudet.
* Duty cycle är 100% om månadskapaciteten är lika utbud.
*
* 6 lugn uppsättningar månadskapacitet på noll.
*
***************************************************************************/
#include < wiringPi.h >
#include < stdio.h >
#define clrscr() printf("\e[1;1H\e[2J") / / rensa skärmen.
int PWMpin = 1; 1 rätt (eller 24 kvar om modell B +).
/***************************************************************************
* menu() funktion - Visa-menyn och kör val.
***************************************************************************/
void menu(void)
{
int utbud = 1024; värdet som skickas till pwmSetRange.
int clock = 32. värdet som skickas till pwmSetClock.
int läge = 0; 0 = balanserad, 1 = mark: utrymme
int tull = 0; Intermittens
int val = 0;
int i; Index för fade for-loop.
int x; Tona in/ut switch.
While(1) / / Visa-menyn.
{
clrscr();
printf ("\n\n Pulse Width Modulation Demonstration\n\n\n");
printf ("1 - tona In - Out\n");
printf ("2 - växla PWM läge:");
IF(mode==0) printf("Balanced\n");
annat printf("Mark:Space\n");
printf ("3 - Set Range: %d\n", intervall);
printf ("4 - ställa klockan: %d\n", klocka);
printf ("5 - Ange Duty Cycle: %d\n",duty);
printf ("6 - QUIET\n\n\n").
printf ("Press urval:");
scanf ("%d", och val);
Switch(Choice) / / Execute valet.
{
fall 1: / / Fade intermittens inom 0 - räckvidd - 0.
clrscr();
x = 1;
för (jag = 0; jag > -1; i += x)
{
pwmWrite(PWMpin, i);
printf ("%d\n", i);
fördröjning (7).
IF(i > Range) x = -1;
}
pwmWrite (PWMpin, 0);
skyldighet = 0;
bryta;
fall 2: / / växla PWM mode Mark: utrymme / balanserad.
läge =! läge;
IF(mode==0) pwmSetMode(PWM_MODE_BAL);
annat pwmSetMode(PWM_MODE_MS);
pwmWrite (PWMpin, tull);
bryta;
fall 3: / / ändra intervallet. (antalet steg för intermittens)
printf ("\n\n\n retur rad:");
scanf ("%d", & intervall);
pwmSetRange(range); Standard 1024 (unsigned int)
pwmWrite (PWMpin, tull);
bryta;
fall 4: / / ändra klockan.
printf ("\n\n\n retur klocka:");
scanf ("%d", & klocka);
pwmSetClock(clock); Standard 32 (int)
pwmWrite (PWMpin, tull);
bryta;
fall 5: / / Set intermittensen.
printf ("\n\n\n retur Duty Cycle:");
scanf ("%d", och tull);
pwmWrite (PWMpin, tull);
bryta;
mål 6: / / tyst, intermittens inställd på noll.
skyldighet = 0;
pwmWrite (PWMpin, tull);
bryta;
}
}
}
/*********************************************************************
* Main () funktion
*********************************************************************/
int main(void)
{
wiringPiSetup();
pinMode (PWMpin, PWM_OUTPUT);
Menu();
Return 0;
}