Hallo, das ist kein Problem.
Einfach im Asuro das was über die serielle Schnittstelle reinkommt (die 3 stellige Zahl) einlesen. In einen integer konvertieren, dann man 2 nehmen und wieder über die serielle Schnittstelle ausgeben.
Hallo Leute,
Ich möchte mit meinem Asuro eine dreistellige Zahlen mit 2 multiplizieren.
Ich möchte meinem asuro über das hyperterminal eine dreistellige Zahl die er multipliziert und sie mir dann über das hyperterminal ausgibt!!
für einen anstoß bzw tipp wäre ich erfreut.
weiss nicht wo ich anfangen soll
Hallo, das ist kein Problem.
Einfach im Asuro das was über die serielle Schnittstelle reinkommt (die 3 stellige Zahl) einlesen. In einen integer konvertieren, dann man 2 nehmen und wieder über die serielle Schnittstelle ausgeben.
Ja Hallo hast du da vieleicht ein Code-Beispiel ich stehe voll auf den Schlauch.
Für mich ist es gerade ein riesen Problem.
Für den Arduino gibt es mehr als genug Beispiele wie man
1. Daten von der Seriellen schnittstelle einliest (Serialport.Read())
2. Datentypen in einander umwandelt ( itoa() )
3. Wie man mit Integern rechnet
4. Wie man Daten über die Serielle Schnittstelle ausgibt
Mit den Informationen solltest du es selbst hinbekommen ( Lerneffekt und so....)
Wenn nicht schreib doch bitte an welcher Stelle du genau hängst und welchen Code du bisher hast
Hallo
Man könnte das vielleicht auch "von Hand" ausrechnen:
(ungetestet)PHP-Code:
// asuro multipliziert dreistellige Zahl mit 2 mic 7.6.2012
// Die über die serielle Schnittstelle empfangene dreistellige Zahl wird üngeprüft
// mit zwei multipliziert und das Ergebniss wird zurückgesendet
// https://www.roboternetz.de/community/threads/58106-Mit-dem-asuro-rechnen
#include "asuro.h"
char zahl[3]; // drei Ziffern mit Index 0 bis 2
char ergebniss[4]; // das Ergebniss könnte vierstellig sein
unsigned char temp, i, uebertrag;
int main(void)
{
Init();
SerWrite("\n\rasuro Taschenrechner\n\n\r", 25);
SerWrite("Bitte dreistellige Zahl eingeben\n\rund mit [Enter] absenden\n\r", 60);
SerRead(zahl, 3, 0); // drei Zeichen ohne Timeout einlesen
StatusLED(YELLOW);
i=2; // Index auf Einerstelle setzen
uebertrag=0; // noch kein Übertrag von der vorhergehenden Stelle
do
{
temp=zahl[i]-'0'; // Ziffer von ascii nach dezimal umrechnen
temp=temp*2+uebertrag; // mit 2 multiplizieren und Übertrag berücksichtigen
if(temp > 9) // Übertrag erkennen
{
uebertrag=1; // Übertrag auf nächste Stelle
temp=temp-10;
}
else
uebertrag=0; // kein Übertrag
ergebniss[i+1]=temp+'0'; // Wert in ascii-Ziffer umrechnen und speichern
}while(i-- != 0); // nächste Stelle berechnen
if(uebertrag) // erste Stelle berechnen (keine Prüfung auf führende Nullen)
ergebniss[0]='1'; // 1 wenn Übertrag...
else
ergebniss[0]=' '; // sonst Leerzeichen
SerWrite(ergebniss, 4); // Ergebniss ausgeben
SerWrite("\n\r",2);
StatusLED(RED); // Aufgabe erledigt und Programmende
while(1);
return(0);
}
Keine Ahnung ob das so funktioniert. Wenn du es zu laufen bringst und kapiert hast, wie ich mir das gedacht habe, hast du auch schon einiges gelernt. Als Zusatz könnte man noch eine Prüfung der eingegebenen Zahl einbauen, die führenden Nullen entfernen und das Ganze als Endlosschleife umsetzen.
Gruß
mic
[Edit]
PHP-Code:
SerWrite(zahl, 3); // Ergebniss ausgeben
SerWrite("*2=", 3);
SerWrite(ergebniss, 4);
SerWrite("\n\r", 2);
Geändert von radbruch (08.06.2012 um 00:31 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo radbruch,
ja Freude für mich, Dein code funktioniert ! Ich habe auch Deinen 2. Teil und eine Endlosschleife eingefügt. Leider habe ich den SerWrite-Befehl noch nicht gerafft: statt *2 wird nd ausgegeben und an das Ergebnis ein n angehängt. Enter braucht bei dreistelliger Zahl nicht eingegeben werden (Ergebnis kommt von selbst), aber bei nur zweistelliger, Ergebnis ist dann um 1 zu hoch, d.h. die Mathe-Syntax habe ich nur bruchstückhaft kapiert.PHP-Code:
// asuro multipliziert dreistellige Zahl mit 2 mic 7.6.2012
// Die über die serielle Schnittstelle empfangene dreistellige Zahl wird üngeprüft
// mit zwei multipliziert und das Ergebniss wird zurückgesendet
// https://www.roboternetz.de/community/threads/58106-Mit-dem-asuro-rechnen
#include "asuro.h"
char zahl[3]; // drei Ziffern mit Index 0 bis 2
char ergebniss[4]; // das Ergebniss könnte vierstellig sein
unsigned char temp, i, uebertrag;
int main(void)
{
while(1)
{
Init();
SerWrite("\n\rasuro Taschenrechner\n\n\r", 25);
SerWrite("Bitte dreistellige Zahl eingeben\n\rund mit [Enter] absenden\n\r", 60);
SerRead(zahl, 3, 0); // drei Zeichen ohne Timeout einlesen
StatusLED(YELLOW);
i=2; // Index auf Einerstelle setzen
uebertrag=0; // noch kein Übertrag von der vorhergehenden Stelle
do
{
temp=zahl[i]-'0'; // Ziffer von ascii nach dezimal umrechnen
temp=temp*2+uebertrag; // mit 2 multiplizieren und Übertrag berücksichtigen
if(temp > 9) // Übertrag erkennen
{
uebertrag=1; // Übertrag auf nächste Stelle
temp=temp-10;
}
else
uebertrag=0; // kein Übertrag
ergebniss[i+1]=temp+'0'; // Wert in ascii-Ziffer umrechnen und speichern
}while(i-- != 0); // nächste Stelle berechnen
if(uebertrag) // erste Stelle berechnen (keine Prüfung auf führende Nullen)
ergebniss[0]='1'; // 1 wenn Übertrag...
else
ergebniss[0]=' '; // sonst Leerzeichen
SerWrite(zahl, 3); // Ergebniss ausgeben,
SerWrite("*2=", 3);
SerWrite(ergebniss, 4);
SerWrite("\n\r", 2);
//SerWrite(ergebniss, 4); // Ergebniss ausgeben
//SerWrite("\n\r",2);
StatusLED(RED); // Aufgabe erledigt und Programmende
}
while(1);
return(0);
}
*** fail faster to succeed sooner ***
Hallo
Schön, wenn es auf Anhieb funktioniert. :)
Vielleicht funktioniert diese Variante:
zahl[0]='*';
zahl[1]='2';
zahl[2]='=';
SerWrite("zahl", 3);
Serwrite(text, anzahl) sendet anzahl Werte ab der Speicherstelle deren erste Adresse die Speicheradresse von text ist.
Von zweistelligen Zahlen haben wir nie gesprochen...
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hey Jungs, hat einwandfrei geklappt Entschuldigt bitte das ich mich so spät melde, hatte am Wochenende Schützenfest etc
Ich hab nur die Libary geändert und das wars
Schöne Woche noch.
Lesezeichen