Interaktiva 2
Detta är en förklaring till koden för den flödeskontroll som jag kom upp med den för att få min Basic Stamp 2(BS2) prata med min Basic Stamp 1(BS1). Jag visar de huvudsakliga slingorna endast. För kod-filer se ut på letsmakerobots.com och här. Filer eller en zip-fil.
I min kod använder jag en hel del bitflaggor. De flesta processorer ger åtkomst till bitar i en Byte eller ordet att använda som vanliga variabler. Grundläggande stämpel 1 och de flesta Picaxe processorer har definierat variabelnamn för bitarna i första par byte minne. Oftast är det Bit0 – Bit7 eller Bit0 – B15 eller Bit0 – Bit31 att definiera en variabel. I båda dessa processorer variabeln bitar kan också vara i en annan variabel. Som min lampor Byte B0 bitar är variablerna som Bit0 – 7 som är lit1-lit8 enskilda lampor. Detta gör testning av en lätt lätt. "Om lit1 = 1 då Kerstin" är enkel.
Basic Stamp 2 och processorer som det använder definierade nedsänkt åtkomst till bitar, tilltugg och byte av en variabel. Min enskilda lampor är variablerna som "ljus. Bit0 - Bit7 ". Testa en variabel Bit är "om lghts. Bit0 = 1 då Kerstin ". Inställningen är "litTmp = ljus. Bit0 ". Vanligtvis kan de nedsänkt text inte vara en variabel. Titta på den program arkivera i EasyLights artikel. Läs din manual.
Jag fixade så mycket som jag kunde. BS1 inte seriella ut mycket väl. Den är stabil och går som en enkel knapp på ett system som detta. BS1 gör heller inte bitar mycket väl.
Min flödeskontroll är det enda sättet jag fick dessa system att kommunicera.
Min textkommentarer kommer att / / i denna artikel. I Basic Stamp kod den "är en kommentar.
BASIC Stamp 2 kodfragmentet.
JP6:
"Grundläggande stämpel 1 projekt board(BS1Pj1)
"Inkommande meddelande
slv1In = 0
LÅGA sTx "meddelande erkänner
PAUSA 6
Leder i paus
SERIN slvRx, 396, 350, err1, [slv1Stat, tmp1]
Seriella fel tid att vänta och fel hanterare
PAUSA 3
HÖG sTx
"BS1 inte gör seriell mycket bra.
OM slv1Stat = 10 då jp7
OM slv1Stat = 20 då jp9
Jag får ingenting men fel???
errSlv1 = 0
slv1btn2 = 0
Gå till jp2
Err1:
FELSÖKA "Fel Stat", DEC slv1Stat, ", B", BIN slv1Stat, CR
DEBUG "fel tmp", DEC tmp1, ", B", BIN tmp1, CR
OM slv1Stat = 10 då jp7
OM slv1Stat = 20 då jp9
errSlv1 = 1
slv1btn2 = 0
Gå till jp2
jp9:
"I arbete
DEBUG "Btn2", DEC slv1Stat, ", B", BIN slv1Stat, CR
slv1btn2 = 1
Gå till jp2
jp7:
binSet = 1
ranSet = 1
larset = 1
rMode = rMode + 1
OM rMode < 4 sedan jp2
rMode = 1
"Överföra avsnitt
JP2:
OM sRx = 0 då slv1In = 1 ' söka efter meddelanden
OM pRx = 0 då mstIN = 1 ' söka efter meddelanden
OM litSet = 1 då jp3
OM mastSet = 1 då jp4
"BS1Pj1 kan bara få träff 1 av 10 gånger
cnt2 = cnt2 + 1
OM sRx = 0 då slv1In = 1
OM cnt2 < 10 sedan jp1
cnt2 = 1
"Kontroll för EasyLights på BS2Pj1
JP4:
Välj rMode
FALL 1
GOSUB doLarson
FALL 2
GOSUB doBinNum
FALL 3
GOSUB doRandom
ENDSELECT
"Skicka lampor byte till BS1Pj1 för visning
LÅG lit1
LÅGA sTx "signaler meddelande redo
Pausa 80 ' för BS1Pj1
SEROUT slvTx, 396, [BS1Pj1, ljus]
PAUSA 40
HÖG sTx
HÖG lit1
litSet = 1
……………………………………………
Grundläggande stämpel 1 kod
runIt: "knappar åt gången
IF BS1Stat > 0 sedan run2
OM pBtn1 = 0 då bt2
BS1Stat = 10
Gå till bt3
BT2:
OM pBtn2 = 0 då run2
BS1Stat = 20
BT3:
tmp1 = 66
pTx = litOff
run1: "Skicka-knappen meddelande
PAUS 1 ' vänta för befälhavaren att sänka sin Tx
OM pRx = 1 då run1
SEROUT pinTx, T2400, (tmp1, BS1Stat)
PAUS 1
pTx = s
Gå till jp1
run2:
OM pRx = 1 då jp1 ' Check för meddelande
SERIN pinRx, T2400, mCmd, tmp1
PAUSA 3
OM mCmd <> BS1Pj1 sedan jp1 "när på rätt adress
ljus = tmp1
' Göra lampor på EasyLights