// // Arduono DRC (Drogon Remote Control) test // arduTest = DrcOpen ("/dev/ttyUSB0") // // Setup the screen, etc. // PROC setup PROC updateButtons(FALSE, FALSE) lastB1 = FALSE lastB2 = FALSE lastPc = -1 CYCLE // Dump all analog channels FOR i = 0 TO 5 CYCLE x = AnalogRead (arduTest, i) v = x * 5 / 1023 HVTAB (0, 5 + i) NUMFORMAT (2, 0) PRINT i; ": "; NUMFORMAT (4, 0) PRINT x; " - "; NUMFORMAT (4, 2) PRINT v; REPEAT // // Analog input from the potentiometer on pin 5 // a = AnalogRead (arduTest, 5) pc = INT (a / 1023 * 100) IF pc <> lastPc THEN PROC LEDbarGraph(pc) PROC GRbarGraph(pc) HVTAB (TWIDTH - 10, THEIGHT - 3) NUMFORMAT (3, 0) PRINT pc; "%" lastPC = pc ENDIF // // 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 // // Temperature from the LM35 // volts = 5 * AnalogRead (arduTest, 0) / 1023 temp = volts * 100 HVTAB (0, 15) NUMFORMAT (4, 2) PRINT "Volts: "; volts NUMFORMAT (4, 1) PRINT "Temperature: "; temp; "C"; // WAIT (0) // Update screen REPEAT END // // PROC LEDbarGraph // Take the reading from the potentiometer (as a percentage) // and update the LED bargraph // DEF PROC LEDbarGraph(percent) PROC ledCheck(6, 15, percent, 2) PROC ledCheck(16, 25, percent, 3) PROC ledCheck(26, 35, percent, 4) PROC ledCheck(36, 45, percent, 5) PROC ledCheck(46, 55, percent, 6) PROC ledCheck(56, 65, percent, 7) PROC ledCheck(66, 75, percent, 8) PROC ledCheck(76, 85, percent, 9) PROC ledCheck(86, 95, percent, 10) PROC ledCheck(96, 100, percent, 11) ENDPROC // Another strategy // LOCAL i, last // last = INT (percent / 10) // i = 0 // WHILE i < last CYCLE // DigitalWrite (arduTest, i + 2, 1) // i = i + 1 // REPEAT // FOR i = last TO 10 CYCLE // DigitalWrite (arduTest, i + 2, 0) // REPEAT // ENDPROC // // PROC ledCheck: // Check if the signal is in the range given and on/off the LED // DEF PROC ledCheck(mn, mx, v, led) // if (v >= mn) and (v <= mx) THEN IF (v >= mn) THEN DigitalWrite (arduTest, led, 1) ELSE DigitalWrite (arduTest, led, 0) ENDIF 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: // Setup the test-bed Arduino platform // Pins 2-11 are LED bargraph output, // 12 is a switch input // Analog 0 is an LM35 temperature sensor // Analog 1 is a switch // Analog 5 is a potentiometer // DEF PROC setup LOCAL i FOR i = 2 TO 11 CYCLE PinMode (arduTest, i, 1) // Outputs REPEAT PinMode (arduTest, 12, 0) // Input DigitalWrite (arduTest, 12, 1) // Enable internal pull-up // // Graphics HGR COLOUR = Yellow RECT (0, 0, GWIDTH, 40, 0) FOR i = 0 TO GWIDTH - 1 STEP GWIDTH / 10 CYCLE LINE (i, 40, i, 50) REPEAT LINE (GWIDTH - 1, 40, GWIDTH - 1, 50) FOR i = GWIDTH / 20 TO GWIDTH - 1 STEP GWIDTH / 10 CYCLE LINE (i, 40, i, 45) REPEAT // // Text // BCOLOUR = Black TCOLOUR = White PRINT PRINT "RTB <-> Arduino DRC Test Program" PRINT "================================" ENDPROC