Sida 3 av 4
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 14:06:17
av Nerre
Nja, skrev man backspace på ABC80 så suddade den vill jag minnas.
D.v.s. om man skrev
PRINT "Hej"+CHR¤(8) så blev det "He" på skärmen.
Så det är nog helt implementeringsberoende.
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 14:18:08
av sodjan
Ja, jag vet inte hur ASCII kompatibel ABC80 var för alla kontrolltecken...

Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 15:05:45
av RadioDJ
johano
Det är precis som du skriver.
Denna kod skrivs ut via en serieport för att sedan gå vidare till en resulttavla.
Det jag håller på att göra är en helt egen tavla att visa informationen på.
Därför måste jag plocka ut de olika fälten (de märkta i rött) så att jag sedan med egna rutiner kan uppdatera MIN display.
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 15:15:38
av sodjan
Jag antar att det inte finns någon dokumentation för gamla systemet?
D.v.s ner på byte nivå för kommunikationen.
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 15:30:18
av Swech
Är det en SAXI tavla?

troligtvis inte
de har ju inte namn, det är säkerligen en tidtagare för hästhoppning
Swech
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 15:45:31
av RadioDJ
sodjan
Jag har inte hittat något på detta.
Swech
Helt rätt. Det är till havremopeder.
Re: Arduino: Slå i sönder String
Postat: 13 augusti 2014, 18:17:01
av Icecap
Det måste ju finnas ett system i det hela.
Startsekvensen verkar ju redan hittat, resten är en fråga om att räkna rätt antal kontrolltecken, något som väl inte ska ställa till speciella problem.
Om det finns tomma "fält" mellan kontrolltecknen är det ju utan betydelse när de ändå inte ska användas. Viktigast är att det finns minne nog för denna joglering som behövs.
A: Startsekvens upptäcks.
B: Räknare nollställs ('Index').
C: Antal kontrolltecken räknas till första text som ska användas uppnås.
D: Text[Index] fylls i vid att kopiera tecken fram till första kontrolltecken.
E: Index räknas upp ett steg.
F: gå till C.
Re: Arduino: Slå i sönder String
Postat: 15 augusti 2014, 11:52:55
av jesse
TS: Testa att räkna antalet <LF> och kolla att det är samma antal <LF> varje gång mellan de olika textsträngarna. Är det det så går det ju lätt att dela upp strängen i flera. Övriga tecken som <BS> eller <CR> kanske du kan plocka bort om de inte fyller någon funktion. Jag gissar att programmet som skriver ut dessa strängar använder <LF> för att skilja de olika delarna åt, men att de "råkar" få med lite andra tecken också som egentligen inte spelar nån roll. Vissa specialtecken (särskilt <BS>) kan ju också ha en speciell funktion so vi inte vet om, att man byter till en annan del av tavlan eller nåt sånt.
Hur du ska göra för att dela upp strängen, när du väl vet var de olika delarna startar beror ju helt på vad du sedan ska göra med dem. Ska du bara skriva ut dem på display kanske du kan skicka ut dem direkt. Antagligen har Arduino en särskild funktion för att skriva text på displayen och använder man den måste man kanske rätta till strängen lite så att den blir riktig, kanske att man lägger in en <0x00> efter texten så att utskriftsrutinen vet var den ska sluta?
Ska du behandla dem som "data" ska de kanske stoppas in i en array av strängar.
Sodjan: ABC80 matade ju inte alla tecken från tangentbordet rakt ut till skärmen. Den var ju en mycket enkel texteditor, och behandlade vissa tangenttryckningar som "kommandon" som utförde speciella funktioner. När man tryckte backspace så raderades det sist inmatade tecknet. (Man editerade en "textrad" åt gången och den kunde vara max 254 tecken lång. Skärmen var bara 40 tecken bred, så var man på andra raden och tryckte på backspace så hoppade cursorn upp till rad 1 igen om man var på första position, dvs så som vilket DOS-fönster som helst skulle göra idag.).
Re: Arduino: Slå i sönder String
Postat: 15 augusti 2014, 19:09:12
av jah
Ger inga garantier att nedanstående funkar, men...
Kod: Markera allt
int xpos = 0;
int ypos = 0;
char indat;
char* result[] = {" \0",
" \0",
" \0",
" \0",
" \0",
" \0" };
void setup() {
// initialize serial:
Serial.begin(9600);
}
void loop() {
while (Serial.available() > 0) {
indat = Serial.read();
switch (indat) {
case 0x08 : {
xpos = 0;
ypos = 0;
};
case 0x0A : {
ypos++;
};
case 0x0D : {
xpos = 0;
};
default : {
result[ypos][xpos] = indat;
xpos++;
};
}
}
// Present or use data in result string array
// ...
}
/J
Re: Arduino: Slå i sönder String
Postat: 18 augusti 2014, 20:30:32
av Mr Andersson
Kod: Markera allt
char* result[] = {" \0",
" \0",
" \0",
" \0",
" \0",
" \0" };
...
result[ypos][xpos] = indat;
Det är inte giltig C att modifiera string literals. Vad tror du händer om kompilatorn optimerar alla 6 strängar till att ha samma minnesadress, eller lägger strängarna i en read-only sektion?
Re: Arduino: Slå i sönder String
Postat: 20 augusti 2014, 19:20:58
av RadioDJ
Mr Andersson:
Har du något kodförslag som kan fungera??
Re: Arduino: Slå i sönder String
Postat: 20 augusti 2014, 21:29:43
av jesse
Men hallå?
Har inga av svaren gett dig några ledtrådar hur du ska göra?
Re: Arduino: Slå i sönder String
Postat: 21 augusti 2014, 07:46:29
av RadioDJ
jesse
Jo.
Alla svaren om ABC80 har varit mycket givande och kommer säkert att lösa mina problem i Arduinovärlden.
Du får ursäkta att jag precis har börjat i den nya dataåldern och har inte riktigt lärt mig hur den fungerar än.
Hade det varit på ABC80-tiden hade det varit en helt annan sak då jag är uppväxt med dessa maskiner. Har flera stycken hemma, så även ABC800.
Re: Arduino: Slå i sönder String
Postat: 21 augusti 2014, 07:56:57
av Nerre
Du har fått närmare ett dussin svar om hur man gör det på Arduino, jag har länkat till sidor som beskriver strängsöknings- och extraheringsfunktioner på Arduino och som innehåller exempelkod som visar hur funktionerna används.
Förväntar du dig att nån annan ska skriva hela funktionen åt dig?
Re: Arduino: Slå i sönder String
Postat: 21 augusti 2014, 12:29:39
av Swech
Till de som har lite låg blodsockernivå i tråden.... Swech