Ez a példaprogram semmi értelmeset nem csinál. Csupán azt demonstrálja, hogy hat különböző kivezetésen hogyan lehet különböző kitöltési tényezőt (LED esetén fényerőt) beállítani. Az is látható, hogy mennyivel egyszerűbb az Arduino C program. A BASCOM-ban ismerni kell a PWM használatához a beépített időzítő áramkörök működését, míg az Arduino C-ben ezekről nem is kell tudni, hogy vannak.
Az áramkört nem rajzoltam meg, mert még mindig nem tanultam meg egyetlen áramkör rajzoló program használatát sem. Bocs! Azonban a digitális ki és bemenet példaprogramjában található kapcsolási rajznak és instrukcióknak elegendőnek kell lenni, hogy magadtól is megcsináld. Kell 6 db led, 6 db ellenállás és vezetékek. Akár használhatod az ott található kapcsolást is, csak a programot kell átalakítani, és egyetlen kivezetésen állítgatni a fényerőt.
Arduino C pédaprogram:
byte f=0; //dekleráltunk egy F nevű változót (fényerő „F”el)
byte l=0; //deklaráltunk egy L nevű változót (fényerő „L”e)
void setup()
{
pinMode(6,OUTPUT); //Arduino Uno R3 6-os kivezetés kimenet
pinMode(5,OUTPUT); //Arduino Uno R3 5-os kivezetés kimenet
pinMode(9,OUTPUT); //Arduino Uno R3 9-os kivezetés kimenet
pinMode(10,OUTPUT); //Arduino Uno R3 10-os kivezetés kimenet
pinMode(11,OUTPUT); //Arduino Uno R3 11-os kivezetés kimenet
pinMode(3,OUTPUT); //Arduino Uno R3 3-os kivezetés kimenet
}
void loop()
{
analogWrite(6,255); //max fényerő
analogWrite(5,255); //max fényerő
analogWrite(9,0); //0 fényerő
analogWrite(10,0); //0 fényerő
analogWrite(11,f); //folyamatosan nő a fémyerő
analogWrite(3,l); //folyamatosan csökken a fényerő
f=f+8; //’F értékét növeljük 5-el. Mivel byte típusú ciklikusan
//növekszik és nulláról újraindul
l=l-8; //’L értékét csökkentjük 5-el. Mivel byte típusú folyamatosan
//csökken, és átfordul
delay(100); //100msec-et várakozunk
analogWrite(6,128); //fél fényerő
analogWrite(5,55); //55/256 fényerővel világít
analogWrite(9,5); // nagyon halványan világít
analogWrite(10,255); // teljes fényerővel világít
delay(100); //100msec-et várakozunk
}
BASCOM példaprogram:
$regfile = "m328pdef.dat"
$crystal = 16000000
Dim F As Byte ’dekleráltunk egy F nevű változót (fényerő „F”el)
Dim L As Byte ’deklaráltunk egy L nevű változót (fényerő „L”e)
F = 0 ’kezdőérték beállítás
L = 0 ’kezdőérték beállítás
Config Portd.6 = Output 'timer0 a comparátorhoz tartozó kimenet
’(Arduino Uno R3 6-os kivezetés)
Config Portd.5 = Output 'timer0 b comparátorhoz tartozó kimenet
’(Arduino Uno R3 5-ös kivezetés)
Config Portb.1 = Output 'timer1 a comparátorhoz tartozó kimenet
’(Arduino Uno R3 9-es kivezetés)
Config Portb.2 = Output 'timer1 b comparátorhoz tartozó kimenet
’(Arduino Uno R3 10-es kivezetés)
Config Portb.3 = Output 'timer2 a comparátorhoz tartozó kimenet
’(Arduino Uno R3 11-es kivezetés)
Config Portd.3 = Output 'timer2 b comparátorhoz tartozó kimenet
’(Arduino Uno R3 3-as kivezetés)
Config Timer0=Pwm , Compare_a_pwm=Clear_down , Compare_b_pwm=Clear_down , Prescale=64
Config Timer1=Pwm , Compare_a_pwm=Clear_up , Compare_b_pwm=Clear_up , Prescale=64
Config Timer2=Pwm , Compare_a_pwm=Clear_up , Compare_b_pwm=Clear_up , Prescale=64
Reset Portb.4
Do
Pwm0a = 0 'mivel clear_down, teljes fényerővel világit
Pwm0b = 0 'mivel clear_down, teljes fényerővel világit
Pwm1a = 0 'mivel clear_up, nulla fényerővel világit
Pwm1b = 0 'mivel clear_up, nulla fényerővel világit
Pwm2a = F 'mivel clear_up, folyamatosan nő a fényerő
Pwm2b = L 'mivel clear_up, folyamatosan csökken a fényerő
F = F + 8 ’F értékét növeljük 5-el. Mivel byte típusú
’ciklikusan növekszik és nulláról újraindul
L = L – 8 ’L értékét csökkentjük 5-el. Mivel byte típusú
’folyamatosan csökken, és átfordul
Waitms 100 ’100msec-et várakozunk
Pwm0a = 128 'mivel clear down,fél fényerővel világít
Pwm0b = 200 'mivel clear down,(255-200)/255 fényerővel világít
Pwm1a = 5 'mivel clear_up, nagyon halványan világít
Pwm1b = 255 'mivel clear_up, teljes fényerővel világít
Waitms 100 '100msec-et várakozunk
Loop
End
Ha sorban haladsz a tudnivalókkal, akkor most az analóg bemenet használata következik!