Ich brauche nur das erste Element des Arrays mit Ziffer zu verbinden und das dann als text senden I2CTWI_transmitByte(pcf2, Hier soll dann "Ziffer1" stehen).
Ich brauche nur das erste Element des Arrays mit Ziffer zu verbinden und das dann als text senden I2CTWI_transmitByte(pcf2, Hier soll dann "Ziffer1" stehen).
Mit I2CTWI_transmitByte überträgst Du genau ein Byte auf dem Bus an die Adresse pf2c. Wenn Du mehrere Bytes (so wie die Zeichenkette line) übertragen willst, dann musst Du eine andere Funktion aufrufen. So aus dem Gedächtnis (also schau da lieber nochmal in die Doku):
Schau genau hin: das sind zwei unterschiedliche Funktionen!Code:I2CTWI_transmitBytes(pf2c, line, strlen (line));
ACHTUNG: evtl. musst Du noch strings.h includen (für strlen). Schau auch hier bitte sicherheitshalber nach - ich habe gerade keine Möglichkeit das zu tun.
viele Grüße
Andreas
#define true ('/'/'/')
#define false ('-'-'-')
Also eigentlich übertrage ich jaweil ichs ja oben definiert habCode:0b01111101.Code:#define Ziffer1 0b01111101
diese info hast du uns vorenthalten! dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Mir war nicht bewusst, dass das wichtig ist.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.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
Geändert von Ceos (07.09.2011 um 11:58 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
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 0b00010100klappt nicht. So aktualisiere ich die Temp:Code:#define 2 0b10100100
Code:uint16_t adc3 = readADC(ADC_3); uint16_t sTemp = (adc3 - 316+28) / 11;
Lesezeichen