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!