Use System Module Servo32 Enum Byte ChannelMode DigitalIn DigitalOut AnalogueIn AnalogueOut PWMOut Servo End Object Channel ChannelMode mode uint32 frequency uint32 duty uint32 servoPosition real32 analogueValue bit digitalValue End Interface C Channel chan[32] on Update(uint32 x) Transaction (chan[c-4]) if(chan[c].digitalValue=1) chan[c-4].servoPosition = 180 else chan[c-4].servoPosition = 0 end Update End int16 x Transaction chan[1..8] for x=1 to 4 chan[x].mode = ChannelMode.Servo chan[x].frequency=50 chan[x].servoPosition=0 end for x=5 to 8 chan[x].mode = ChannelMode.DigitalIn end Update End
I updated my servo example based on the Transaction draft, and this might actually work. I replaced External with Interface as suggested, but I also add event’s to variables that can be caught with On. Once we receive and Update event we need to do a transacion ourselves since we will update the servo entry.
What I am most happy with here is less code + that we can’t go wrong since the interface keyword will force the use of transactions. I am not sure how I will get the Assembler to keep track of what entries we actually do transactions on with arrays involved so I need to work on that. I like the idea of having events on variables and not only on objects. It makes sense in this case since we need an event on one channel to operate another.
I am reaching a point where I can only do so much without a working VM and Assembler! It basically gets harder to see the missing details or flaws in the drafts.