1 REM Ins{nd av Allan Lindblom <5879> 1986-04-27 09.34.28 10 INTEGER 20 EXTEND 30 ; CHR$(12) : Indrag=20 40 ; BLU NWBG TAB(Indrag) YEL '+-----------------------------------------+' 50 ; BLU NWBG TAB(Indrag) YEL '. ROBOT1.BAC VER. 1.0 .' 60 ; BLU NWBG TAB(Indrag) YEL '. (c) Allan Lindblom 850919 .' 70 ; BLU NWBG TAB(Indrag) YEL '+-----------------------------------------+' 80 ! F}r fritt disponeras av AMU-Center Jakobsberg samt ABC-klubbens medlemmar. 90 ! Program f|r styrning av roboten Cyber 310. 92 ! Testad p} ABC806. 94 ! N}got ofullst{ndigt - kan kanske l{mpa sig f|r vidareutveckling. 100 DIM Filrad$(100)=5 110 Drive$='MO1:' 120 Z=INP(7) ! Nollst{ll I/O-kort 130 OUT 1,5 ! V{lj kort fem 140 GOSUB 2520 ! Kontrollera hemfil 150 OUT 34,2 ! St{ng av klick 160 Z.=FNDr|j. 170 ! ------------- MENY ------------- 180 Rader=10 ! Antal menyrader 190 DATA 'ROBOTMENY' 200 DATA 'K - K|r program' 210 DATA 'L - L{s program' 220 DATA 'S - Skriv nytt program' 230 DATA 'H - Hemg}ng' 240 DATA 'I - Instruktioner' 250 DATA '[ - [ndra i program' 260 DATA 'M - Manuell k|rning' 270 DATA 'A - Avsluta' 280 DATA '' 290 ! DATA 'F - Filkatalog' 300 DATA 'V[LJ ALTERNATIV!' 310 ! -------------------- MOTORER ------------------- 320 DATA BAS,SKULDRA,ARMB]GE,HANDLED,VRIDNING,GREPP 330 ! -- OFFSET -- 340 ! 7.93,8.06,5.2222,3.0,1.5,1.5 350 ! ---------- SKRIV MENY ----------- 360 ; CHR$(12) 370 RESTORE 190 : READ Rubrik$ 380 ; : ; : ; TAB(Indrag) DBLE GRN Rubrik$ : ; 390 FOR I=1 TO Rader : READ Rubrik$ : ; GRN TAB(Indrag+5) Rubrik$ 400 NEXT I 410 GET V{lj$ 420 ON INSTR(1,'KLFSHI[MA',V{lj$)+1 GOTO 360,800,980,1400,470,1440,1180,1580,1810,440 430 ! --------- SLUT ------- 440 CLOSE 2 : ; CHR$(12) 450 END 460 ! -------------- SKRIV NYTT PROGRAM ---------------- 470 ; CHR$(12) TAB(Indrag) DBLE GRN 'SKRIV PROGRAM!' 480 ; : ; YEL 'Avsluta med SLUT.' : ; 490 GOSUB 2220 ! Filnamn 500 ON ERROR GOTO 520 510 OPEN Program$ AS FILE 1 : ; FLSH RED 'FILEN FINNS REDAN!!!' : CLOSE 1 : GOTO 490 520 PREPARE Program$ AS FILE 1 530 OPEN Hem$ AS FILE 2 540 ON ERROR GOTO 2290 ! Felrutin 550 ; : ; : RESTORE 320 : Flagg=3 560 Riktning=0 : Motor=0 570 FOR I=0 TO 5 : READ Motor$(I) : ; Motor$(I) 580 ; ' Motor ' I ' riktning (+,-,0): '; : INPUT Riktning$ 590 IF Riktning$='+' THEN R1=0 : H1=1 : GOTO 620 600 IF Riktning$='-' THEN R1=1 : H1=0 : GOTO 620 610 GOTO 680 620 IF I=3 AND R1=0 THEN Riktning=Riktning+24 : Hemrikt=Hemrikt+0 : GOTO 670 630 IF I=3 AND R1=1 THEN Riktning=Riktning+0 : Hemrikt=Hemrikt+24 : GOTO 670 640 IF I=4 AND R1=0 THEN Riktning=Riktning+16 : Hemrikt=Hemrikt+8 : GOTO 670 650 IF I=4 AND R1=1 THEN Riktning=Riktning+8 : Hemrikt=Hemrikt+16 : GOTO 670 660 Riktning=Riktning+R1*2^I : Hemrikt=Hemrikt+H1*2^I 670 IF I=3 OR I=4 THEN Motor=Motor+24 ELSE Motor=Motor+2^I 680 NEXT I 690 ; #1,Riktning : ; #2,Hemrikt 700 ; #1,Motor : ; #2,Motor 710 GOSUB 2440 ! S{tt riktning p} motorerna 720 ; MAG 'Antal steg (eller SLUT): '; : INPUT Steg$ 730 IF Steg$<>'SLUT' THEN Steg=VAL(Steg$) ELSE 770 740 ; #1,Steg$ : ; #2,Steg$ 750 GOSUB 2470 ! Stega motorerna 760 GOTO 550 770 ; #1,Steg$ : ; #2,Steg$ : CLOSE 780 GOTO 360 790 ! ------------------ K\R ------------------- 800 Flagg=1 810 GOSUB 2220 ! Filnamn 820 ON ERROR GOTO 2290 ! Till felrutin 830 OPEN Program$ AS FILE 1 : Flagg=2 840 OPEN Hem$ AS FILE 2 850 INPUT #1,Riktning 860 Hemrikt=64+( NOT Riktning) ! Invertera 870 ; #2,Hemrikt 880 INPUT #1,Motor 890 ; #2,Motor 900 GOSUB 2440 ! S{tt riktningarna 910 INPUT #1,Steg$ : ; #2,Steg$ 920 IF Steg$<>"SLUT" THEN Steg=VAL(Steg$) ELSE 950 930 GOSUB 2470 ! Stega motorer 940 GOTO 850 950 CLOSE 960 GOTO 360 970 ! ------------------ L[S FIL ---------------- 980 ; CHR$(12) TAB(Indrag) DBLE GRN 'L[SNING AV FIL' 990 ; : ; : ; 'Vill du ha printerlista? '; : GET [$ 1000 IF [$='J' OR [$='j' THEN OPEN 'PR:' AS FILE 3 : P=1 1010 Nummer=1 1020 Flagg=1 : GOSUB 2220 1030 ON ERROR GOTO 2290 : Flagg=4 1040 OPEN Program$ AS FILE 1 : Flagg=2 1050 IF P=1 THEN ; #3,'Nummer','Riktning','Motor','Steg' 1060 ; 'Nummer','Riktning','Motor','Steg' 1070 INPUT #1,Riktning 1080 INPUT #1,Motor 1090 INPUT #1,Steg$ 1100 ; Nummer,Riktning,Motor,Steg$ 1110 IF P=1 THEN ; #3,Nummer,Riktning,Motor,Steg$ 1120 Nummer=Nummer+1 1130 IF Steg$="SLUT" THEN 1140 ELSE 1070 1140 CLOSE 1150 GET [$ 1160 GOTO 360 1170 ! ----------------- INSTRUKTIONER ------------------- 1180 ; CHR$(12) TAB(Indrag) DBLE GRN 'ROBOTINSTRUKTIONER' 1190 ; : ; 1200 ; 'S{tt programskivan i MO0: och textfilskivan i MO1:.' 1210 ; : ; BLU 'MANUELL K\RNING:' 1220 ; : ; 'Ej k|rd motor: mellanslag' 1230 ; 'Motor 1: Q=+, W=-' 1240 ; 'Motor 2: E=+, R=-' 1250 ; 'Motor 3: T=+, Y=-' 1260 ; 'Motor 4: U=+, I=-' 1270 ; 'Motor 5: O=+, P=-' 1280 ; 'Motor 6: ]=+, ^=-' 1290 ; : ; MAG 'Tryck p} RETN n{r du {r klar.' 1300 GET [$ : ; CHR$(12) : ; 'G|r CLEAR vid felstop!!!' : ; 1310 ; : ; BLU 'SKRIVA PROGRAM:' : ; 1320 ; 'V{lj +, - eller 0 f|r riktning, 0 ger stillast}ende motor.' 1330 ; 'Motorer v{ljs automatiskt.' 1340 ; RED 'K|r ej handled och vridning samtidigt!' 1350 ; 'Dessa anv{nder ju samma motorer.' 1360 ; : ; MAG 'Tryck p} RETN n{r du {r klar.' 1370 GET [$ 1380 GOTO 360 1390 ! -------- FILKATALOG --------- 1400 ; CHR$(12) TAB(Indrag) DBLE GRN 'FILKATALOG' 1410 GET [$ 1420 GOTO 360 1430 ! -------- HEMG]NG -------- 1440 ; CHR$(12) TAB(Indrag) DBLE GRN 'HEMG]NG' 1450 Flagg=1 1460 OPEN Hem$ AS FILE 2 1470 Flagg=2 1480 INPUT #2,Riktning 1490 GOSUB 2440 ! S{tt riktningarna 1500 INPUT #2,Motor 1510 INPUT #2,Steg$ 1520 IF Steg$<>"SLUT" THEN Steg=VAL(Steg$) ELSE 1550 1530 GOSUB 2470 ! Stega motorer 1540 GOTO 1480 1550 CLOSE 2 1560 GOTO 360 1570 ! -------- [NDRING AV ROBOTFIL -------- 1580 ; CHR$(12) TAB(Indrag) DBLE GRN '[NDRINGAR' 1590 GOSUB 2220 ! H{mta filnamn 1600 Flagg=5 : ON ERROR GOTO 2290 ! Felrutin 1610 J=0 : Fil=4 : OPEN Program$ AS FILE Fil 1620 INPUT #Fil,Filrad$(J) : ; J+1 ' ' Filrad$(J) : J=J+1 1630 IF Filrad$(J-1)='SLUT' THEN 1640 ELSE 1620 1640 Frad=J-1 1650 ; : ; GRN 'Vilken rad ska {ndras? '; : INPUT R 1660 IF R>Frad Frad=R 1670 ; Filrad$(R-1) 1680 INPUT Filrad$(R-1) 1690 IF Filrad$(R-1)="SLUT" THEN 1720 1700 ; : ; YEL 'Fler {ndringar?'; : GET K$ : ; 1710 IF K$='J' OR K$='j' THEN 1650 ELSE 1720 1720 CLOSE Fil 1730 ; : ; GRN 'UTFIL:' : GOSUB 2220 ! H{mta filnamn 1740 OPEN Program$ AS FILE Fil 1750 FOR J=0 TO Frad 1760 IF ASCII(Filrad$(J))=13 THEN 1770 ELSE ; #Fil,Filrad$(J) 1770 NEXT J 1780 CLOSE Fil 1790 GOTO 360 1800 ! -------- MOMENTAN K\RNING --------- 1810 ; CHR$(12) TAB(Indrag) DBLE GRN 'MANUELL K\RNING' 1820 ; : ; 'Ska k|rningen registreras p} fil? '; : GET V{lj$ 1830 IF V{lj$='J' OR V{lj$='j' THEN GOSUB 2220 : Fil=1 ELSE 1890 1840 ON ERROR GOTO 1860 1850 IF Fil=1 THEN OPEN Program$ AS FILE 1 : ; CUR(23,Indrag) FLSH RED 'Filen finns redan!!' : CLOSE 1 : GOTO 1810 1860 PREPARE Program$ AS FILE 1 1870 RESUME 1880 1880 OPEN Hem$ AS FILE 2 1890 ; CHR$(12) 1900 RESTORE 320 : FOR I=1 TO 6 1910 READ Motor$(I) : ; Motor$(I) 1920 NEXT I 1930 FOR I=1 TO 6 : ; TAB(I*6) I; : NEXT I 1940 ; TAB(6) 'Q W E R T Y U I O P ] ^' 1950 ; : ; 'Tryck p} mellanslag f|r att avsluta k|rningen.' : ; 1960 GET K|r$ : K=ASCII(K|r$) 1970 IF K>94 ; CUR(23,Indrag) FLSH RED 'ANV[ND STORA BOKST[VER!!' : GOTO 1890 1980 ON INSTR(1,'QWERTYUIOP]^ ',K|r$)+1 GOTO 1930,1990,2000,2010,2020,2030,2040,2050,2060,2070,2080,2090,2100,2170 1990 Riktning=0 : Hemrikt=1 : Motor=1 : GOTO 2110 ! Bas 2000 Riktning=1 : Hemrikt=0 : Motor=1 : GOTO 2110 2010 Riktning=0 : Hemrikt=2 : Motor=2 : GOTO 2110 ! Skuldra 2020 Riktning=2 : Hemrikt=0 : Motor=2 : GOTO 2110 2030 Riktning=0 : Hemrikt=4 : Motor=4 : GOTO 2110 ! Armb}ge 2040 Riktning=4 : Hemrikt=0 : Motor=4 : GOTO 2110 2050 Riktning=0 : Hemrikt=24 : Motor=24 : GOTO 2110 ! Handled 2060 Riktning=24 : Hemrikt=0 : Motor=24 : GOTO 2110 2070 Riktning=16 : Hemrikt=8 : Motor=24 : GOTO 2110 ! Vrid 2080 Riktning=8 : Hemrikt=16 : Motor=24 : GOTO 2110 2090 Riktning=0 : Hemrikt=32 : Motor=32 : GOTO 2110 ! Grepp 2100 Riktning=32 : Hemrikt=0 : Motor=32 : GOTO 2110 2110 IF Fil=1 THEN ; #1,Riktning : ; #1,Motor 2120 ; #2,Hemrikt : ; #2,Motor 2130 GOSUB 2440 ! Riktning 2140 Steg=1 : IF Fil=1 THEN Steg$=NUM$(Steg) : ; #1,Steg$ 2150 GOSUB 2470 ! Stega 2160 GOTO 1960 2170 IF Fil=1 THEN ; #1,0 : ; #1,0 : ; #1,'SLUT' 2180 ; #2,0 : ; #2,0 : ; #2,'SLUT' 2190 CLOSE 2200 GOTO 360 2210 ! ------------- FILNAMN ------------ 2220 ; : ; CYA 'Ange programnamn: '; : INPUT Program$ : IF Program$='' THEN 360 2230 IF INSTR(1,Program$,'.') THEN 2250 ! Extension? 2240 Program$=Program$+'.RBT' 2250 IF INSTR(1,Program$,':') THEN 2270 ! Drive? 2260 Program$=Drive$+Program$ 2270 RETURN 2280 ! -------------- FELRUTINER --------------- 2290 OUT 34,7 ! Pip 2300 ; : ; CUR(23,Indrag) FLSH RED; 2310 ON Flagg GOTO 2320,2330,2340,2320,2320,2330,2350 2320 ; 'FILEN FINNS INTE!!' : GOTO 2360 2330 ; 'FEL I PROGRAMMET!!' : GOTO 2360 2340 ; 'FEL INMATNING!!' : GOTO 2360 2350 ; 'L[GG I FILSKIVAN!!' : GOTO 2360 2360 GET [$ 2370 ON Flagg RESUME 810,360,470,980,1580,1640,360 2380 ! ------------- DR\J ------------ 2390 DEF FNDr|j. 2400 FOR J.=0. TO 10. : NEXT J. 2410 RETURN Inget. 2420 FNEND 2430 ! -------------- S[TT RIKTNING ------------------ 2440 OUT 0,Riktning+128 : OUT 0,Riktning 2450 RETURN 2460 ! -------------- STEGA MOTORERNA ------------- 2470 FOR I=0 TO Steg 2480 OUT 0,Motor+64 : Z.=FNDr|j. : OUT 0,Motor : Z.=FNDr|j. 2490 NEXT I 2500 RETURN 2510 ! ----------------- HEMFIL ----------------- 2520 Flagg=7 : ON ERROR GOTO 2550 2530 Hem$=Drive$+'HEM.RBT' 2540 OPEN Hem$ AS FILE 2 : CLOSE 2 : GOTO 2570 2550 ON ERROR GOTO 2290 : PREPARE Hem$ AS FILE 2 : CLOSE 2 2560 RESUME 150 2570 RETURN 2580 ! ----------- INPUTLINE ------------- 2590 DEF FNL$(Filrad$)=LEFT$(Filrad$,LEN(Filrad$)-2)