// // Raspberry Pi "Passion" meter example // atm = DrcOpen ("/dev/ttyAMA0") rpi = DrcOpen ("RPI") // // Setup the screen, etc. // PROC setup //PROC updateButtons(FALSE, FALSE) //lastB1 = FALSE //lastB2 = FALSE //lastPc = -1 //ledBargraph = TRUE numformat(6,1) speed = 0 CYCLE hvtab(4,4) volts = 3.3 * AnalogRead (atm, 0) / 1023 temp = volts * 100 print temp;" ";speed proc bargraph (temp) proc fanspeed (temp) wait (0.1) update repeat // // Button 3 - Toggle between LED bargraph and LED brightness // b3pushed = AnalogRead (arduTest, 2) < 511 if b3pushed then proc changeMode // // Buttons // b1pushed = NOT DigitalRead (arduTest, 12) b2pushed = AnalogRead (arduTest, 1) < 511 IF (b1pushed <> lastB1) OR (b2pushed <> lastB2) THEN PROC updateButtons(b1pushed, b2pushed) lastB1 = b1pushed lastB2 = b2pushed ENDIF REPEAT END // // PROC LEDbarGraph // DEF PROC bargraph(temp) PROC ledCheck(20, temp, 2) PROC ledCheck(21, temp, 3) PROC ledCheck(22, temp, 4) PROC ledCheck(23, temp, 5) PROC ledCheck(24, temp, 6) PROC ledCheck(25, temp, 7) PROC ledCheck(26, temp, 10) PROC ledCheck(27, temp, 11) ENDPROC // // PROC ledCheck: // Check if the signal is in the range given and on/off the LED // DEF PROC ledCheck(mn, v, led) IF (v >= mn) THEN DigitalWrite (rpi, led, 1) ELSE DigitalWrite (rpi, led, 0) ENDIF ENDPROC // // PROC fanSpeed // Use PWM to set the fan speed depending on the temperature // def proc fanspeed(temp) speed = 0 PROC speedCheck(20, 21, temp, 127) PROC speedCheck(21, 22, temp, 255) PROC speedCheck(22, 23, temp, 383) PROC speedCheck(23, 24, temp, 511) PROC speedCheck(24, 25, temp, 639) PROC speedCheck(25, 26, temp, 767) PROC speedCheck(26, 27, temp, 895) PROC speedCheck(27, 99, temp, 1023) pwmWrite (rpi, 1, speed) ENDPROC // // PROC speedCheck: // Check if the signal is in the range given and set speed // DEF PROC speedCheck(mn, mx, v, set) IF (v >= mn) then speed = set ENDPROC // // PROC GRbarGraph // Take the reading from the potentiometer (as a percentage) // and update the on-screen bargraph // DEF PROC GRbarGraph(percent) LOCAL width COLOUR = Blue RECT (1, 1, GWIDTH - 2, 38, 1) COLOUR = Maroon width = INT (percent / 100 * (GWIDTH - 2)) RECT (1, 1, width, 38, 1) ENDPROC // DEF PROC updateButtons(b1, b2) COLOUR = White CIRCLE (GWIDTH / 4, GHEIGHT / 2, 50, 1) CIRCLE (GWIDTH / 4 * 3, GHEIGHT / 2, 50, 1) IF b1 THEN COLOUR = Black CIRCLE (GWIDTH / 4 * 3, GHEIGHT / 2, 40, 1) ENDIF // IF b2 THEN COLOUR = Blue CIRCLE (GWIDTH / 4, GHEIGHT / 2, 40, 1) ENDIF ENDPROC // // PROC setup: // On the Gertboard: // Pins 0 and 1 are used for PWM of the motor // Pins 2,3,4,5,6,7, 10,11: LED bargraph // ATmega: // Analog 0: LM35 // Pin 2,3,4 - Button inputs // DEF PROC setup LOCAL i // Motor DigitalWrite (rpi, 0, 0) PinMode (rpi, 0, 1) // Output PinMode (rpi, 1, 2) // PWM PwmWrite (rpi,1,0) // Off // LEDs DigitalWrite (rpi, 2, 0) DigitalWrite (rpi, 3, 0) DigitalWrite (rpi, 4, 0) DigitalWrite (rpi, 5, 0) DigitalWrite (rpi, 6, 0) DigitalWrite (rpi, 7, 0) DigitalWrite (rpi, 10, 0) DigitalWrite (rpi, 11, 0) // PinMode (rpi, 2, 1) PinMode (rpi, 3, 1) PinMode (rpi, 4, 1) PinMode (rpi, 5, 1) PinMode (rpi, 6, 1) PinMode (rpi, 7, 1) PinMode (rpi, 10, 1) PinMode (rpi, 11, 1) // PinMode (atm, 2, 0) // Input PinMode (atm, 3, 0) // Input PinMode (atm, 4, 0) // Input DigitalWrite (atm, 2, 1) // Enable internal pull-up DigitalWrite (atm, 3, 1) // Enable internal pull-up DigitalWrite (atm, 4, 1) // Enable internal pull-up cls PRINT PRINT "RTB <-> Gertboard Passion-o-meter" PRINT "=================================" ENDPROC