Tja der Titel sagt es ja schon ich möchte den Inhalt einer Variable beim Asuro übermitteln.
Druckbare Version
Tja der Titel sagt es ja schon ich möchte den Inhalt einer Variable beim Asuro übermitteln.
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.
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.
So gibt er dir den linken Wert aus.
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.Code:#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;
}
mfg
Hannes
Hallo
Variablen kann man auch selbst in Zeichenketten umwandeln und mit SerWrite() senden:
Das ist vielleicht nicht sehr elegant (führende Nullen?), aber man sieht, wie es funktioniert.Code:// aus: https://www.roboternetz.de/phpBB2/ze...=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);
}
Gruß
mic
Danke schön an euch beide.
Noch eine Frage an dich core duo was bedeutet itoa.
das ist ne fnktion, welche integer in einen string convertiert.
Bei mir fährt dann ein Stück vorwrts und dann im Kreis.
warum lässt du ihn denn fahren, du willtst doch nur die Werte haben?!
Das sollte eigentlich in den einzelne taster thread
Entschuldigung
o.K. Also corde duo das kommt heraus bei deiner Funktion.
Code:> "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
Der Code wäre jetzt hilfreich. Der GANZE Code. Vermutlich fehlt eine der beiden libs.Zitat:
Zitat von Asuroneuling
#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 . . . .
Das kam heraus und das ist der dazugehörige code von core duo mit deiner Bibliotheken modifizierung.Code:> "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
Code:#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;
}