Du teilst die höchst mögliche Spannung durch 6 Teile, je nachdem in welchem Bereich die tatsächliche Spannung ist, lässt du die LEDs leuchten.
Fertig!
Die Funktionen zum auslesen der Spannung und zum ansteuern der LEDs stehen in der Dokumentation!
Ist sicher ein alter hut und wurde von vielen schon vorgemacht...
Ich möchte die 6 LED des RP6 als Ladungsanzeige der Akkus nutzen -soweit so gut... doch wie programmieren? Da ich noch nocht sonderlich viel erfahrung mit C habe ist das immer noch leichter gesagt als getan *grins*
find auch im handbuch leider noch nichts über das genauere auslesen des batteriespannung (abgesehen von der kurzen umschreibung "Sensorik" S.17) um diese dann einer LED zu zuordnen...
wär nett wenn mir da jemand weiterhelfen könnte, ev auch mit einem beispiel
Danke vorab !
MfG carlitoco
Du teilst die höchst mögliche Spannung durch 6 Teile, je nachdem in welchem Bereich die tatsächliche Spannung ist, lässt du die LEDs leuchten.
Fertig!
Die Funktionen zum auslesen der Spannung und zum ansteuern der LEDs stehen in der Dokumentation!
hast ja recht ich wollts mal mit n bischen Faulhiet versuchen *grins*
Super Einstellung! Weiter so...
Wie involviere ich das jetzt in einem Programm?
habe da nun schon ne weile dran rumgebastelt... komme aber nicht zur lösung...
wäre um nen kleinen hinweis froh!
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); startStopwatch1(); while(true) { if(getStopwatch1() > 300) { writeString_P("\nADC Akku: "); writeInteger(adcBat, DEC); writeChar('\n'); if(adcBat < 1000) setLEDs(0b011111); if(adcBat < 900) setLEDs(0b001111); if(adcBat < 800) setLEDs(0b000111); if(adcBat < 700) setLEDs(0b000011); if(adcBat < 600) setLEDs(0b000001); if(adcBat < 550) setLEDs(0b000000); setStopwatch1(0); } task_ADC(); } return 0; }
Naja, finde die Abfrage nicht so gut, da unter umständen mehrere Bedingungen erfüllt sein können!
Dann besser eindeutig festlegen, wann was leuchten soll:
Code:if(adcBat < 1001 && adcBat > 900) setLEDs(0b011111); if(adcBat < 901 && adcBat > 800) setLEDs(0b001111); if(adcBat < 801 && adcBat > 700) setLEDs(0b000111); if(adcBat < 701 && adcBat > 600) setLEDs(0b000011); if(adcBat < 601) setLEDs(0b000001);
ok soweit erstmal einleuchtend, das die Berreiche als Ganzes festgelegt werden sollten...
Binde ich das dann in einem Programm in die "main" ein oder lege ich da auch so nen "(void)Batterystatus(void) an?
Das ist mir alles noch nicht ganz klar.
Danke vorab !
MfG carlitoco
Hallo
Na, ihr macht's euch ja echt einfach. Ich würde erstmal den Wert für volle Akkus (=alle LEDs) ermitteln, dann den Wert für's unterste Limit (steht in der Doku). Dann sollten bei viel Power alle, bei weniger Power weniger grüne und bei fast leer nur noch die roten LEDs leuchten. Bei minimum (oder kleiner) sollten dann die roten blinken (stromsparend).
Zu eurer aktuellen Version: Es wird immer das Ergebniss der letzten Abfrage angezeigt. Wenn also erst auf < 1000 erkannt wird, es aber 500 sind, wird die Ausgabe am Ende vom < 550 überschrieben. Das geht so schnell dass man es nicht bemerkt.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich würde eine Funktion schreiben in der Dein Code zur überprüfung der Spannung und setzen der LEDs steht.
Diese Funktion kannst du dann in der while Schleife aufrufen.
Kannst es auch per Timer machen.
@radbruch
Hab ich doch schon am Anfang geschrieben...
Und was meinst du mit aktuelle Version? Bei meiner Version passiert das mit dem überschreiben nicht.
Lesezeichen