diese info hast du uns vorenthalten! dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Druckbare Version
diese info hast du uns vorenthalten! dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Mir war nicht bewusst, dass das wichtig ist.Zitat:
diese info hast du uns vorenthalten!
Okay, ich habe einen Temperatursensor, der mir die aktuelle Temperatur in °C gibt. Dies wird in der Variable sTemp gespeichert und ändert sich, wenn die Temperatur sich ändert. Dieses sTemp hab ich getrennt, sodass wenns z.b. 23° währe, in array[0] die 2 stehen wird und in array[1] die 3 (die Werte Aktualisieren sich auch). So jetzt wollte ich die Temperatur auf der Siebensegmentanzeige anzeigen.Zitat:
dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Der Code funktioniert! Nur möchte ich, dass sich die ersten beiden zahlen, halt die richtige Temperatur anzeigt und sich auch ständig aktualisiert.
Code:I2CTWI_transmitByte(pcf, Anzeige1);
I2CTWI_transmitByte(pcf2, Ziffer2); //zeige 2 auf erstem Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige2);
I2CTWI_transmitByte(pcf2, Ziffer3); //zeige 3 auf zweiten Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige3);
I2CTWI_transmitByte(pcf2, ZifferGr); //zeige ° auf dritten Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige4);
I2CTWI_transmitByte(pcf2, ZifferC); //zeige 4 auf vierten Display
I2CTWI_transmitByte(pcf2, Aus);
So ich hoffe das waren genug infos.
mfG
Philip ;)
ich geh mal davon aus, dass das Auswerten des Sensor irgendwo ständig wiederholt wird, nun brauchst du die oberen beiden transmit-Blöcke nur ein eine Funktion packen, die wir z.B. "updateDisplay(char temperatur)" nennen, in welcher du die Zerlegung bewerkstelligst und anschließend mit deinen beiden transmit-tripeln auf die Segmente legst
diese Funktion rufst du nach dem auslesen der Temperatur einfach mit auf.
Oder brauchst du Hilfe beim zerlegen ?
ausgehend davon dass die temperatur IMMER 2stellig ist würd ich quick n dirty folgendes vorschlagen:
wenn deine definition von Anzeige1 - 4 nun auch noch der zahl 1-4 entspricht, kannst du auch getrost das ganze in eine Schleife packen ums schöner zu machenCode:
char toDisplay[] = {'0','0','°','C'};
char temp;
while(messen)
{
temp = getTemp();
updateDisplay(temp);
}
updateDisplay(char some_temp)
{
toDisplay[0] = some_temp/10; //nachkommastellen werden abgetrennt
toDisplay[1] = some_temp- (toDisplay[0] * 10);
I2CTWI_transmitByte(pcf, Anzeige1);
I2CTWI_transmitByte(pcf2, toDisplay[0]); //zeige 2 auf erstem Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige2);
I2CTWI_transmitByte(pcf2, toDisplay[1]); //zeige 3 auf zweiten Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige3);
I2CTWI_transmitByte(pcf2, toDisplay[2]); //zeige ° auf dritten Display
I2CTWI_transmitByte(pcf2, Aus);
I2CTWI_transmitByte(pcf, Anzeige4);
I2CTWI_transmitByte(pcf2, toDisplay[3]); //zeige 4 auf vierten Display
I2CTWI_transmitByte(pcf2, Aus);
}
PS: irgendwie mag das Forum (oder der Editor des Forum) es nicht wenn ich Text aus einem Code-Block kopiere um es in meiner Antwort zu verwenden
Kann das funktionieren? Ich muss doch "0b01111101" übertragen, und nicht "2"?
undCode:#define Ziffer0 0b01000100
#define Ziffer1 0b01111101
#define Ziffer2 0b10100100
#define Ziffer3 0b00110100
#define Ziffer4 0b00011101
#define Ziffer5 0b00010110
#define Ziffer6 0b00000110
#define Ziffer7 0b01111100
#define Ziffer8 0b00000100
#define Ziffer9 0b00010100
klappt nicht. So aktualisiere ich die Temp:Code:#define 2 0b10100100
Code:uint16_t adc3 = readADC(ADC_3);
uint16_t sTemp = (adc3 - 316+28) / 11;
achsoooooooooooo ^_^
jetzt ist alles klar
das geht am einfachsten mit einem const char[] array
Code:const char[] Bitcodes = {
0b01000100,
0b01111101,
0b10100100,
0b00110100,
0b00011101,
0b00010110,
0b00000110,
0b01111100,
0b00000100,
0b00010100}
...
Bitcodes[2] liefert den wert 0b10100100 zurück!
damit kannst du einfach über den index des array auf das entsprechende bitmuster zugreifen!
THEORETISCH kannst du Bitmuster für alle ASCII Zeichen anlegen, aber lückenlos!!! damit z.b. das kleine 'a' auch an der 97ten stelle steht! Du brauchst halt mind. 265 Bytes Programmcode mehr!
Mist - zu spät - gerade hatte ich fast genau das fertig getippt ;)
Fehlermeldung: SiebenSegment.c:39: error: expected identifier or '(' before '[' token
Code Z.39:
Leider klappts noch nicht so richtig ;-<Code:const char[] Bitcodes = {
0b01000100,
0b01111101,
0b10100100,
0b00110100,
0b00011101,
0b00010110,
0b00000110,
0b01111100,
0b00000100,
0b00010100
}
mfG
Philip
Wo ist denn da die Zeile 39? Und was kommt danach? Hast Du das ";" bei copy&paste vergessen? Oder im Quelltext?
viele Grüße
Andreas
Zeile 39 hört sich so an als hätte er versucht es innerhalb einer Methode zu definieren, versuchs mal ganz oben bei den Variablen-Deklarationen
EDIT: ahja und semikolon dahinter .... ich schussel gern wenn ich nur nachdenke und nicht direkt programmiere, normalerweise sagt es mir mein eclipse wenn ich was vergessen hab ^^
Okay, habs schon....
Code:const char Zahl[] = {
0b01000100,
0b01111101,
0b10100100,
0b00110100,
0b00011101,
0b00010110,
0b00000110,
0b01111100,
0b00000100,
0b00010100
};
danke nochmal an alles
mfG
Philip