Schon, aber noch viel komplizierter kann man das wirklich nicht mehr
schreiben. Wozu brauchst du die Hilfsvariable c? DIe verwirrt doch mehr
als notwendig
warum nicht einfach
buf[0] = 100;
buf[3] = 120;
buf[6] = 150;
buf[9] = 170;
oder wenn das schon ab einem bestimmten Index anfangen soll, der in i
steht
buf[i+0] = 100;
buf[i+3] = 120;
buf[i+6] = 150;
buf[i+9] = 170;
Es kommt vielleicht nicht so gut, eine int Variable mit mindestens 16bit
an eine Stelle eines char Feldes mit 9 bit zu schreiben.
Außerdem schreibst Du ab dem 2. Zugriff immer auf den Index 3, wenn Du
das fehlende Semikolon anfügst.
Ich denke aber du meinst
i+=3;
statt
i=+3;
vielen Dank erstmal,
Letzendlich wollte ich 4 Dimmwerte im Buffer ablegen, die ich später per
UART
ausgeben wollte .
also sprich mit Taster1 den Kanal wählen und mit Taster2 den Dimwert
einstellen.
mfg
Andi schrieb:> ich habs jetzt mal so versucht aber ich bekomm nur mist Angezeigt> buf[i*3] = c;
das vergisst du gleich mal wieder.
Das ist nur deshalb entstanden, weil du in deinem Eröffnungsposting
keine vernünftige Beschreibung dessen gebracht hast, was du eigentlich
machen willst.
> itoa( buf, dim_string, 10 ); //
Wenn du nicht weißt, was eine Funktion macht, dann sieh in deinem Buch
nach oder befrag Google danach.
itoa wandelt einen INteger (daher das i) zu einem String (daher das a)
um.
Wo in diesem Aufruf ist denn der Integer, also die ganze Zahl? Die ganze
Zahl steckt in c oder in i. Also willst du auch die an itoa übergeben.
itoa( c, dim_string, 10 );
oh wie Peinlich,
ich wollte mit i den Kanal Wählen und in c steht der Dimmwert drinne.
Im buf sollten die 4 Dimmwerte stehen.
wenn i=0 kanal 1 i=3 kanal 4.
aber wie setz ich das um wenn zb.i=1 den dimmwert für kanal 2.
vielleicht könnten sie mir dabei ein Denkanstoss geben
mfg
Andi schrieb:> oh wie Peinlich,> ich wollte mit i den Kanal Wählen und in c steht der Dimmwert drinne.> Im buf sollten die 4 Dimmwerte stehen.
Also ein Array von DimmWerten.
Dann mach auch ein Array von Dimmwerten!
Und einen davon wandelst du zu einem Text um, den du ausgeben kannst.
Welchen? Na den, den du mit den Tastendrücken zum 'aktiven' (Hinweis für
schon wieder einen vernünftigen Variablennamen) gemacht hast.
> vielleicht könnten sie mir dabei ein Denkanstoss geben
Ja. Nenn die Dinge vernünftig. Progammiert sich einfach leichter, wenn
der Code selber eine 'Geschichte' erzählt.
Du hast 4 Dimmwerte. Hier sind sie
int DimmWert[4];
und einer davon ist der den du mittels Taste ausgewählt hast. Die
Auswahl speicherst du hier
int activeDimmWert;
wenn activeDimmWert den ausgewählten Dimmwert angibt, dann ist
DimmWert[ activeDimmWert ]
der zugehörige Wert.
vielen Dank für die Ausführliche Hilfe,
nun hab ich noch eine Frage,
wie ich die werte einzeln Ausgeben kann zB. in Zeile1 Kanal und in
Zeile5
den Dimmwert Ausgeben.
mfg
Andi schrieb:> wie ich die werte einzeln Ausgeben kann zB. in Zeile1 Kanal und in> Zeile5> den Dimmwert Ausgeben.
Du brauchst Steuerzeichen, mit denen du deine Ausgabeterminal steuern
kannst. Das hängt davon ab, was am anderen Ende des UART sitzt. Oft
können Terminals die sog. VT100 Steuersequenzen. (Googeln)
Aber ehrlich gesagt bin ich mir ziemlich unsicher, ob das noch nicht zu
viel für dich ist.
Die Ausgabe erfolgt auf einem GLCD.
ich habe das so.
//Zeilen Position auf LCD x0 y100 Kanal Anzeigen
uart_putc( 17);
uart_putc( 0 );
uart_putc( 0 );
uart_putc( 100 );
uart_putc( 0 );
sprintf( Buffer, "Kanal: %d", (int)activeDimmWert);
uart_puts( Buffer);
//Zeilen Position auf LCD x40 y100 Dimmwert Anzeigen
uart_putc( 17);
uart_putc( 40 );
uart_putc( 0 );
uart_putc( 100 );
uart_putc( 0 );
sprintf( Buffer, " Wert: %d", (int)DimmWert[activeDimmWert] );
uart_puts( Buffer);
Der Kanalwert wird auch Ausgegeben,die Dimmwerte werden ja alle
ausgegeben.
ich wollte gern das die Dimmwerte einzeln in einer neuen Zeile ausgeben,
zb. zeile100 = Dimmwert1
zeile105 = Dimmwert2
.........
Andi schrieb:> Die Ausgabe erfolgt auf einem GLCD.
Sag das doch gleich.
> ich habe das so.>> //Zeilen Position auf LCD x0 y100 Kanal Anzeigen> uart_putc( 17);> uart_putc( 0 );> uart_putc( 0 );> uart_putc( 100 );> uart_putc( 0 );
mach dir doch erst mal eine Funktion, mit der du die Ausgabeposition
setzen kannst. Das ist doch Unsinn, da jedesmal wieder die ganze Litanei
aufzuführen.
1
voidgotoxy(uint8_tx,uint8_ty)
2
{
3
uart_putc(17);
4
uart_putc(x);
5
uart_putc(0);
6
uart_putc(y);
7
uart_putc(0);
8
}
und dann kannst du vor einer Ausgabe schon mal einfach die Position
festlegen
Ist doch schon mal ganz was anderes, als da jedes mal dieselbe Litanei
nur mit andere Zahlenwerten
> ich wollte gern das die Dimmwerte einzeln in einer neuen Zeile ausgeben,> zb. zeile100 = Dimmwert1> zeile105 = Dimmwert2> .........
Na, dann mach das doch.
Mach dir eine Funktion, die einen Wert an eine bestimmte POsition
ausgibt
1
voidoutValue(uint8_tx,uint8_ty,uint8_tvalue)
2
{
3
charBuffer[10];
4
5
sprintf(Buffer,"%3d",value);
6
gotoxy(x,y);
7
uart_puts(Buffer);
8
}
und du benutzt das dann für
1
outValue(0,100,DimmWert[0]);
2
outValue(0,105,DimmWert[1]);
3
outValue(0,110,DimmWert[2]);
4
outValue(0,115,DimmWert[3]);
oder wenns noch mehr werden
1
for(i=0;i<4;i++)
2
outValue(0,100+i*5,DimmWert[i]);
Funktionen sind dein Handwerkszeug. Schreib dir Funktionen, die dir die
Arbeit erleichtern.