Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DmTftLibrary mbed
Fork of LCD_Proj by
Revision 4:0d4286278f41, committed 2016-02-01
- Comitter:
- TFuchsbichler
- Date:
- Mon Feb 01 13:08:54 2016 +0000
- Parent:
- 3:03c08a612220
- Commit message:
- dshshd
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/as5047p.h Mon Feb 01 13:08:54 2016 +0000
@@ -0,0 +1,164 @@
+#include "mbed.h"
+extern Serial pc;
+
+//0x3FFD = CORDIC magnitude
+//0x3FFE = Measured angle without dynamic angle error compensation
+//0x3FFF = Measured angle with dynamic angle error compensation
+
+//Chipselect = activ Low
+//Vor jedem einzelnem Data muss steigende Flanke erzeugt werden
+
+SPI spi(p11, p12, p13); // mosi, miso, sclk
+DigitalOut cs1(p23);
+DigitalOut cs2(p24);
+//Adresse ANGLECOM = 0x3FFF
+
+
+class _as50
+{
+int Index;
+unsigned int Sarray1[24];
+unsigned int Sarray2[24];
+unsigned int Laenge,Breite; //Länge und breite des rechteckigen Kanals in dem gemessen wird
+Timer timer;
+
+public: _as50() //Konstruktor
+ {
+ Index=24;//Arraygröße für schleifen
+ spi.format(16,1); // heißt 16 Bit und //mode 1 -->CPOL=0, CPHA=1 heißt steigende Flanke
+ spi.frequency(1000000); //10Mhz clock
+ cs1 = 1; cs2= 1; //steigende Flanke --> anfangs (0 benötigt)
+ InitFeld();
+ Laenge=1;Breite=1; //Länge und Breite des Kanals in Meter
+ }
+ public: unsigned int Durchfluss(int welcher)
+ {
+ int durchfluss=0;
+ if(welcher==1)
+ {
+ timer.start();
+ while(timer.read()<=1) // 1 Sekunde lang Daten sammeln und dann mittelwert zurückgeben
+ {
+ durchfluss=Sensormittelwert(1);
+ }
+ timer.stop();timer.reset();
+ }
+ if(welcher==2)
+ {
+ timer.start();timer.reset();
+ while(timer.read()<=1)
+ {
+ durchfluss=Sensormittelwert(2);
+ }
+ timer.stop();timer.reset();
+ }
+ return durchfluss*Laenge*Breite; //*Länge*Breite des Kanals pro sekunde --> physikalischer Durchfluss
+ }
+ unsigned int Sensormittelwert(int welcher)
+ {
+ if(welcher==1)
+ {
+ unsigned int Sensor1=Sensor(1); //pc.printf("Sensor1: %u ",Sensor1);
+ unsigned int size1= Arraysize(Sarray1); //pc.printf("size1: %u ",size1);
+ AddField(1,Sensor1,size1);
+ unsigned int Mittelwert1=Mittelwert(Sarray1); //pc.printf("Mittelwert1: %u \r\n",Mittelwert1);
+ return Mittelwert1; //*Lange*Breite pro sekunde --> Durchfluss
+ }
+ if(welcher==2)
+ {
+ unsigned int Sensor2=Sensor(2); //pc.printf("Sensor2: %u",Sensor2);
+ unsigned int size2= Arraysize(Sarray2); //pc.printf("size2: %u",size2);
+ AddField(2,Sensor2,size2);
+ unsigned int Mittelwert2=Mittelwert(Sarray2); //pc.printf("Mittelwert2: %u \r\n",Mittelwert2);
+ return Mittelwert2; //*Lange*Breite pro sekunde --> Durchfluss
+ }
+ return 0; //Default
+ }
+
+ unsigned int Sensor(unsigned int welcher) //Sensorwerte auslesen
+ {
+ unsigned int whoami;
+
+ if(welcher==1)
+ {
+ cs1 = 0; //select Sensor 1 setzen
+
+ // Send 0x8f, the command to read the WHOAMI register
+ whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen 1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
+ whoami &= ~(0xC000);
+ wait(0.001); //mindestens 5ns delay vor Flanke
+ cs1 = 1; //deselect Sensor (0 setzen)
+ }
+ if (welcher==2)
+ {
+ cs2 = 0; //select Sensor 1 setzen
+
+ // Send 0x8f, the command to read the WHOAMI register
+ whoami = spi.write(0x3FFE | (1<<14)); //Register auslesen 1<<um 14 //rüberschieben (1 heißt lesen 0 heißt schreiben)
+ whoami &= ~(0xC000);
+ wait(0.001); //mindestens 5ns delay vor Flanke
+ cs2 = 1; //deselect Sensor (0 setzen)
+ }
+ whoami/=360;
+ return whoami;
+
+ }
+ void InitFeld() //Alle Felder in Array auf 0 setzen
+ {
+ for(int i=0;i<Index;i++)
+ {
+ Sarray1[i]=0;
+ Sarray2[i]=0;
+ }
+ }
+ unsigned int Arraysize(unsigned int Sarray[]) //Felder mit Werten sind ungleich 0...liefert Anzahl der Felder mit Werten
+ {
+ int counter=0;
+ for(int i=0;i<Index;i++)
+ {
+ if(Sarray[i]!=0)
+ {
+ counter++;
+ }
+ }
+ return counter;
+ }
+
+ void AddField(unsigned int welcher,unsigned int wert,unsigned int gross)
+ {
+ if(gross==(Index-1)) //Bevor Feld "out of index geht" --> alles 0 setzen
+ {
+ InitFeld();
+ if(welcher==1)
+ Sarray1[0]=wert;
+ if(welcher==2)
+ Sarray2[0]=wert;
+ }
+ else //Fügt Sensordaten in Array ein
+ {
+ if (welcher==1)
+ {
+ Sarray1[gross]=wert;
+ }
+ if (welcher==2)
+ {
+ Sarray2[gross]=wert;
+ }
+ }
+
+ }
+ unsigned int Mittelwert(unsigned int Array[]) //Errechnet den Mittelwert der Arraydaten
+ {
+ unsigned int groesse=Arraysize(Array);
+ if((groesse)==0)
+ groesse=1;
+ unsigned int value=0;
+ for(int i=0;i<groesse;i++)
+ {
+ value+=Array[i]; //alle addieren
+ }
+ value/=groesse; //durch Anzahl
+
+ return value;
+ }
+};
--- a/bild.h Mon Jan 25 12:42:52 2016 +0000
+++ b/bild.h Mon Feb 01 13:08:54 2016 +0000
@@ -202,4 +202,40 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 20998, 23013, 18853, 18852, 16772, 18885, 20965, 20965, 23045, 23045, 23013, 23013, 23013, 23013, 22981, 25093, 16805, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4258, 18918, 16804, 16805, 18885, 20933, 22981, 23013, 23013, 23013, 23013, 23013, 22981, 25061, 25126, 20998, 4193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10532, 23078, 18852, 18853, 20933, 23013, 23013, 23013, 25061, 23013, 25061, 27142, 27175, 16806, 4226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+uint16_t fuellstand[]={
+0, 0, 0, 0, 0, 0, 2145, 33808, 31727, 31695, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31727, 31695, 31695, 33808, 6339, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 12710, 42292, 48599, 54938, 54970, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54938, 54970, 54970, 50712, 44373, 27469, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 4226, 42292, 52825, 63422, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 54970, 46518, 19049, 0, 0, 0, 0,
+0, 0, 0, 0, 25388, 50712, 65535, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63422, 65535, 52857, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 31727, 57051, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 57051, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 57051, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54970, 65535, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 63390, 65535, 54970, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54971, 65535, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 63391, 65535, 54972, 38033, 0, 0, 0, 0,
+0, 0, 0, 0, 29614, 54969, 65534, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 63388, 65534, 54969, 38034, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 30005, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 13264, 63455, 13264, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 34166, 65535, 34166, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 55100, 65535, 55100, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 29618, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 65535, 9071, 9071, 9071, 9071, 9071, 9071, 38035, 0, 0, 0, 0,
+0, 0, 0, 0, 31731, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 55100, 65535, 55100, 9071, 9071, 9071, 9071, 9071, 38068, 0, 0, 0, 0,
+0, 0, 0, 0, 27505, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 34166, 65535, 34166, 9071, 9071, 9071, 9071, 9071, 38039, 0, 0, 0, 0,
+0, 0, 0, 0, 4291, 42328, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 13264, 63455, 15312, 9071, 9071, 9071, 9071, 46518, 21164, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 16937, 42295, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 9071, 32053, 9071, 9071, 9071, 9071, 46454, 27504, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 0, 4259, 35925, 33878, 33877, 33877, 33877, 33877, 33877, 33877, 33877, 33877, 33877, 33845, 35957, 35957, 33845, 33877, 33877, 33878, 31697, 0, 0, 0, 0, 0, 0
};
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fuellstand.h Mon Feb 01 13:08:54 2016 +0000
@@ -0,0 +1,64 @@
+#include "mbed.h"
+
+class Fuellstand{
+ int grenze; //Wert unter welchem die Pumpe ON oder OFF sein soll
+ int now; //Aktueller Messwert
+ public:
+ //constructers
+ Fuellstand(int,PinName, PinName, PinName, PinName,PinName); //Konstruktor mit Schwellenwerteingabe bei fehler defaultwert
+ //p25p p50p p75p p100p pboden
+ //methodes
+ int wert(); //gibt den aktuelle 1wert zurück in 25er Schritten
+
+ bool activate(); //gibt an ob die Pumpe aus sein soll
+ void setgrenze(int); //um die grenze zu setzten
+
+ void setboden(bool); //Messungaktivieren
+ private:
+ void getnow(); //misst den Wert
+ PinName pp25p;
+ PinName pp50p;
+ PinName pp75p;
+ PinName pp100p;
+ PinName ppboden;
+};
+ //constructers
+Fuellstand::Fuellstand(int ober, PinName new25p, PinName new50p, PinName new75p, PinName new100p ,PinName newboden){ //Konstruktor mit Schwellenwerteingabe bei fehler defaultwert
+ if(ober>0&&ober<100) grenze=ober;
+ else grenze=80;
+ pp25p=new25p; //25%
+ pp50p=new50p;
+ pp75p=new75p;
+ pp100p=new100p;
+ ppboden=newboden;
+}
+ //methodes
+void Fuellstand::getnow(){ //misst den Wert
+ DigitalIn DI25(pp25p);
+ DigitalIn DI50(pp50p);
+ DigitalIn DI75(pp75p);
+ DigitalIn DI100(pp100p);
+ if(DI25==1) now=25;
+ else now=0;
+ if(DI50==1) now=50;
+ if(DI75==1) now=75;
+ if(DI100==1) now=100;
+}
+int Fuellstand::wert(){ //gibt den aktuelle wert zurück in 25er Schritten
+ getnow();
+ return now;
+}
+bool Fuellstand::activate(){ //gibt an ob die Pumpe aus sein soll
+ getnow();
+ if(now<=grenze)
+ return true;
+ else
+ return false;
+}
+void Fuellstand::setgrenze(int newgrenze){ //um die grenze zu setzten
+ grenze=newgrenze;
+}
+void Fuellstand::setboden(bool newbodenstate){ //um die 1 aktivieren zu setzten
+ DigitalOut DOboden(ppboden);
+ DOboden=newbodenstate;
+}
\ No newline at end of file
--- a/main.cpp Mon Jan 25 12:42:52 2016 +0000
+++ b/main.cpp Mon Feb 01 13:08:54 2016 +0000
@@ -16,6 +16,9 @@
#include "mbed.h"
#include "bild.h" //Bilder mit einbinden
+#include "as5047p.h"
+#include "fuellstand.h"
+
#include "DmTftHX8353C.h"
#include "DmTftS6D0164.h"
@@ -61,6 +64,8 @@
* Local variables
*****************************************************************************/
+/********* Fuellstand *********/
+Fuellstand fst(75,p25, p26, p27, p28, p30);
/********* TFT DISPLAY INIT *********/
DmTftIli9341 tft(p21, p22, p5, p6, p7); /* DmTftIli9341(PinName cs, PinName dc, PinName mosi, PinName miso, PinName clk) DM_TFT28_105 and DM_TFT28_116*/
@@ -216,6 +221,7 @@
touch.init();
tft.drawImage(208,0,32,32,zahnrad);
+ tft.drawImage(0,0,32,32,fuellstand);
}
@@ -343,13 +349,82 @@
}
+
+
+void FReckt(int width, int x, int y, int percent)
+{
+ tft.drawRectangle(x,y,x+width,y+100,WHITE);
+ tft.fillRectangle(x+1,y+1,x+width-2,y+98,BLACK);
+
+
+
+ if(percent>=1&&percent<=25)
+ {
+ tft.fillRectangle(x+1,y+76,x+width-2,y+98,BLUE);
+
+ }
+
+ if(percent>=26&&percent<=50)
+ {
+ tft.fillRectangle(x+1,y+51,x+width-2,y+98,BLUE);
+ }
+
+ if(percent>=51&&percent<=75)
+ {
+ tft.fillRectangle(x+1,y+26,x+width-2,y+98,BLUE);
+ }
+
+ if(percent == 100)
+ {
+ tft.fillRectangle(x+1,y+1,x+width-2,y+98,BLUE);
+ }
+
+}
+
+void Fstand()
+{
+
+ tft.clearScreen(BLACK);
+
+
+ while(1)
+ {
+ FReckt(60, 30, 30, fst.wert());
+ wait(0.5);
+ }
+ /*
+ while(1)
+ {
+ a=a+5;
+ wait(0.5);
+ FReckt(120,80,10,10,a);
+ if(a>=100)
+ {
+ a=100;
+ break;
+ }
+
+ }
+ while(1)
+ {
+ a=a-5;
+ wait(0.5);
+ FReckt(120,80,10,10,a);
+ if(a<=0)
+ {
+ break;
+ }
+ }
+ */
+}
+
/******************************************************************************
* Main
*****************************************************************************/
int main()
{
-
+ fst.setboden(true);
struct tm t;
t.tm_sec = 00; // 0-59
@@ -406,6 +481,10 @@
//Reset Stoppuhr
if(down==true&&x>=165&&x<=214&&y>=285&&y<=310)
reset();
+ //Füllstand
+ if(down==true&&x>=0&&x<=32&&y>=0&&y<=32)
+ Fstand();
+
tft.drawNumber(78,230,stund,2,1);
tft.drawString(94, 230, ":");
