=>[[helvepic32:|HelvePic32]]
==== Digitaler oder Analoger Zugriff ====
===== Der Taster =====
{{ :helvepic32:bspringcoder:switch.png?400|}}
Als erstes wollen wir mit dem Taster anfangen. Dieser ist auf der Platine mit einem Pull-down Widerstand von 10 kOhm an Masse gelegt. Das bedeutet, dass dieser Pin ohne den gedrückten Schalter den Zustand LOW hat und bei gedrücktem Schalter den Zustand HIGH.
Damit das funktioniert, müssen wir noch GND und VCC mit Masse und +5V verbinden. Den Pin SW legen wir an den dritten Pin auf der rechten Seite des HelvePic32 (nP[RIGHT][3])
Um den Status des Tasters auszulesen gehen wir wie beim Arduino vor:
digitalRead(nP[RIGHT][3])
Das bedeutet, dass auch der ganze Code zu Debouncing vom Arduino hier genauso verwendet werden kann.
Den Pin 3 habe ich mit Absicht gewählt, dazu mehr bei der Verwendung von Interrupts.
===== Die RGB Led =====
{{ :helvepic32:bspringcoder:ringled.png?400|}}
Identisch zum Arduino kann man den Zustand eines Pins durch
digitalWrite(nP[RIGHT][3],HIGH)
bzw.
digitalWrite(nP[RIGHT][3],LOW)
setzen, was aber an dem Pin für den Taster wenig Sinn ergibt. Also verbinden wir die drei RGB Pins mit den ersten drei Pins auf der rechten Seite des HelvePic32 und setzen den Zustand der Pins auf HIGH. Als Folge dessen wird der Schaft des Encoders weiß erleuchtet.
Will man aber den gesamten Regenbogen durch stimmen, so muss man das Signal über PWM variieren. Beim Arduino geht das über Pins, welkche PWM fähig sind. Beim HelvePic32 ist jeder Pin PWM fähig und wird über eine entsprechende Bibliothek angesprochen. der Code is ähnlich zu dem bei Arduino:
#include
#include
int rpin = nP[RIGHT][2];
int gpin = nP[RIGHT][1];
int bpin = nP[RIGHT][0];
int rval;
int gval;
int bval;
void setup(){
pinMode(rpin, OUTPUT);
pinMode(gpin, OUTPUT);
pinMode(bpin, OUTPUT);
}
void loop(){
for (int i=0; i<256; i++){
Wheel(i);
SoftPWMServoPWMWrite(rpin, rval);
SoftPWMServoPWMWrite(gpin, gval);
SoftPWMServoPWMWrite(bpin, bval);
delay(30);
}
}
void Wheel(byte WheelPos) {
if(WheelPos < 85) {
rval = WheelPos * 3;
gval = 255 - WheelPos * 3;
bval = 0;
}
else if(WheelPos < 170) {
WheelPos -= 85;
rval = 255 - WheelPos * 3;
gval = 0;
bval = WheelPos * 3;
}
else {
WheelPos -= 170;
rval = 0;
gval = WheelPos * 3;
bval = 255 - WheelPos * 3;
}
}
Die Funktion Wheel() ist dem Democode von adafruit entnommen. Die Syntax des Aufrufs SoftPWMServoPWMWrite() ist die gleiche wie von analogWrite().
=>[[helvepic32:|HelvePic32]]