A simple Insense program to receive data from radio and print it out. The program expects to receive sensorReading structs from the radio. It prints out the values in the reading and sets the R/G/B LEDs to indicate high Temperature/Humiditiy/Light readings (compared to an average which it maintains).
// Sensor reading type type sensorReading is struct( byte[] addr ; integer cycle ; integer photo ; integer solar ; real temp ; real humid ) type IReceiver is interface ( in RadioPacket radioChan ; out any stdoutChan ; out bool greenLed ; out sensorReading printerChan ; out sensorReading ledsChan ) // Receiver component component Receiver presents IReceiver { constructor() { } behaviour { // get something from the radio receive packet from radioChan //payload = packet.payload send any("\n") on stdoutChan send any(packet.addr[0]) on stdoutChan send any(".") on stdoutChan send any(packet.addr[1]) on stdoutChan // project out of any project packet.payload as value onto sensorReading : { send value on ledsChan send value on printerChan } default : { send any(" - sent garbage!") on stdoutChan } } } // Interface for Printer component sending readings // and explanatory text to standard output type IPrinter is interface ( in sensorReading input ; out any stdOutChan ) // Standard output and radio printer component component Printer presents IPrinter { constructor() { } behaviour { // get reading struct receive reading from input // send text+readings in struct on stdout send any(": N") on stdOutChan send any(reading.addr[0]) on stdOutChan send any(".") on stdOutChan send any(reading.addr[1]) on stdOutChan send any(", It ") on stdOutChan send any(reading.cycle) on stdOutChan send any(", photo = ") on stdOutChan send any(reading.photo) on stdOutChan send any(", solar = ") on stdOutChan send any(reading.solar) on stdOutChan send any(", temp = ") on stdOutChan send any(reading.temp) on stdOutChan send any(", humid = ") on stdOutChan send any(reading.humid) on stdOutChan } } // Interface for LED output component type ILedOutput is interface ( in sensorReading input ; out ledState setLeds ; out bool redLed ; out bool greenLed ; out bool blueLed ) // LED output component component LedOutput presents ILedOutput { avgTemp = 0.0 avgSolar = 0 avgHumid = 0.0 constructor() { } behaviour { // turn of all LEDs using led setState channel send RedOffGreenOffBlueOff on setLeds // get sensor readings receive reading from input // represent readings via LEDs, R/G/B for high Temp/Humidity/Light send ((reading.solar - avgSolar) > 20) on blueLed send ((reading.humid - avgHumid ) > 2.0) on greenLed send ((reading.temp - avgTemp) > 0.2) on redLed // adjust averages if reading.temp > avgTemp then { avgTemp := avgTemp + 0.1 } else { avgTemp := avgTemp - 0.1 } if reading.humid > avgHumid then { avgHumid := avgHumid + 0.5 } else { avgHumid := avgHumid - 0.5 } if reading.solar > avgSolar then { avgSolar := avgSolar + 1 } else { avgSolar := avgSolar - 1 } } } rcvr = new Receiver() pr = new Printer() lo = new LedOutput() connect rcvr.greenLed to leds.greenState connect rcvr.stdoutChan to standardOut connect rcvr.radioChan to radioIn.received connect rcvr.ledsChan to lo.input connect rcvr.printerChan to pr.input connect pr.stdOutChan to standardOut connect lo.setLeds to leds.setState connect lo.redLed to leds.redState connect lo.greenLed to leds.greenState connect lo.blueLed to leds.blueState |