PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inhalt einer Variable über die IR-Schnittstelle übermitteln.



Asuroneuling
15.07.2009, 19:09
Tja der Titel sagt es ja schon ich möchte den Inhalt einer Variable beim Asuro übermitteln.

Hubert.G
16.07.2009, 08:22
Ich habe zwar keinen Asuro, aber laut den Schaltunterlagen ist doch eine Sende-Empfangseinrichtung über RX/TX vorhanden. Wo liegt dann das Problem. Vorlagen zur Sendesoftware sind im Datenblatt vorhanden.

Asuroneuling
16.07.2009, 18:17
Gut also nehmen wir mal an, dass ich die Helligkeit bei den Rädern gerne wissen möchte und jetzt nehmen wir an ich würde diese auch speichern und zwar unter der Variable "Helligkeit" und jetzt nehmen wir an ich möchte diese Daten über die IR-Schnittstelle senden und über das Hyperterminal einsehen.

Ich kann jetzt nicht einfach SerWrite("Helligkeit",12); schreiben da er mir dann ja nur Helligkeit senden würde und ich möchte ja den Inhalt der Variable haben.

core duo
17.07.2009, 09:23
So gibt er dir den linken Wert aus.


#include "asuro.h"

int main(void){

unsigned int line[2], i;
Init();

void PrintInt(int wert)
{
char text[16]=" ";
itoa(wert,text,10);
SerWrite(text,strlen(text));
}

FrontLED(ON);
StatusLED(OFF);

while(1){
LineData(line);
PrintInt(line[0]);
SerWrite("\n", 1);
for(i= 0; i< 200; i++){
Sleep(255);
}
while(1);
return 0;
}

Die Funktion LineData(); schaut, wie viele zahlen oder bustaben die variable enthält, da dass ja immer angegeben werden muss, denn wenn der wert über 1000 geht müssen ja 4 Zahlen gesendet werden.

mfg
Hannes

radbruch
17.07.2009, 10:43
Hallo

Variablen kann man auch selbst in Zeichenketten umwandeln und mit SerWrite() senden:

// aus: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=328394#328394
void PrintChar(unsigned int x)
{
char ergebnis[5] = {'0','0','0','0','0'};
while (x >=10000) { ergebnis[0]++; x -=10000; }
while (x >= 1000) { ergebnis[1]++; x -= 1000; }
while (x >= 100) { ergebnis[2]++; x -= 100; }
while (x >= 10) { ergebnis[3]++; x -= 10; }
ergebnis[4] +=x;
SerWrite(ergebnis,5);
}


Das ist vielleicht nicht sehr elegant (führende Nullen?), aber man sieht, wie es funktioniert.

Gruß

mic

Asuroneuling
18.07.2009, 09:16
Danke schön an euch beide.

Asuroneuling
19.07.2009, 09:45
Noch eine Frage an dich core duo was bedeutet itoa.

core duo
19.07.2009, 09:56
das ist ne fnktion, welche integer in einen string convertiert.

Asuroneuling
19.07.2009, 10:06
Bei mir fährt dann ein Stück vorwrts und dann im Kreis.

core duo
19.07.2009, 10:09
warum lässt du ihn denn fahren, du willtst doch nur die Werte haben?!

Asuroneuling
19.07.2009, 11:03
Das sollte eigentlich in den einzelne taster thread

Entschuldigung

Asuroneuling
28.07.2009, 10:56
o.K. Also corde duo das kommt heraus bei deiner Funktion.



> "C:\ASURO_src\FirstTry\Test-all.bat"

C:\ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
test.elf :
section size addr
.text 1704 0
.bss 1 8388704
.debug_aranges 64 0
.debug_pubnames 263 0
.debug_info 1072 0
.debug_abbrev 414 0
.debug_line 1142 0
.debug_frame 288 0
.debug_str 360 0
.debug_loc 388 0
Total 5696


avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function 'PrintInt':
test.c:11: warning: implicit declaration of function 'itoa'
test.c:12: warning: implicit declaration of function 'strlen'
test.c:12: warning: incompatible implicit declaration of built-in function 'strlen'
test.c:12: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c: In function 'main':
test.c:21: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:27: error: expected declaration or statement at end of input
make: *** [test.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:02

oberallgeier
28.07.2009, 11:18
o.K. Also corde duo das kommt heraus bei deiner Funktion ...Der Code wäre jetzt hilfreich. Der GANZE Code. Vermutlich fehlt eine der beiden libs.
#include <stdlib.h>
#include <avr/io.h>

Ausserdem würde ich für eine Messsequenz ein Feld aufmachen, dieses Feld vollschreiben und danach auf Knopfdruck ausgeben lassen. Damit kann man dann solche Diagramme machen (https://www.roboternetz.de/phpBB2/viewtopic.php?p=106466#106466) . . . .

Asuroneuling
30.07.2009, 08:38
> "C:\ASURO_src\FirstTry\Test-all.bat"

C:\ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
test.elf :
section size addr
.text 1740 0
.bss 1 8388704
.debug_aranges 64 0
.debug_pubnames 263 0
.debug_info 1098 0
.debug_abbrev 445 0
.debug_line 1158 0
.debug_frame 288 0
.debug_str 365 0
.debug_loc 388 0
Total 5810


avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function 'PrintInt':
test.c:13: warning: implicit declaration of function 'strlen'
test.c:13: warning: incompatible implicit declaration of built-in function 'strlen'
test.c:13: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c: In function 'main':
test.c:22: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
test.c:28: error: expected declaration or statement at end of input
make: *** [test.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Das kam heraus und das ist der dazugehörige code von core duo mit deiner Bibliotheken modifizierung.



#include "asuro.h"
#include <stdlib.h>
#include <avr/io.h>
int main(void){

unsigned int line[2], i;
Init();

void PrintInt(int wert)
{
char text[16]=" ";
itoa(wert,text,10);
SerWrite(text,strlen(text));
}

FrontLED(ON);
StatusLED(OFF);

while(1){
LineData(line);
PrintInt(line[0]);
SerWrite("\n", 1);
for(i= 0; i< 200; i++){
Sleep(255);
}
while(1);
return 0;
}