User Guide
19. 0b00000,
20. 0b00000,
21. 0b00000,
22. 0b00000,
23. 0b00000,
24. 0b00000,
25. 0b11111,
26. 0b11111,
27. 0b11111,
28. 0b11111,
29. 0b11111,
30. 0b11111,
31. 0b11111
32. };
33.
34. // This function loads custom characters into the LCD. Up to 8
35. // characters can be loaded; we use them for 6 levels of a bar graph
36. // plus a back arrow and a musical note character.
37. void load_custom_characters()
38. {
39. lcd_load_custom_character(levels+0,0); // no offset, e.g. one bar
40. lcd_load_custom_character(levels+1,1); // two bars
41. lcd_load_custom_character(levels+2,2); // etc...
42. lcd_load_custom_character(levels+4,3); // skip level 3
43. lcd_load_custom_character(levels+5,4);
44. lcd_load_custom_character(levels+6,5);
45. clear(); // the LCD must be cleared for the characters to take effect
46. }
47.
48. // 10 levels of bar graph characters
49.
const char bar_graph_characters[10] = {’ ‘,0,0,1,2,3,3,4,5,255};
50.
51. void display_levels(unsigned int *sensors)
52. {
53. clear();
54. int i;
55. for(i=0;i<5;i++) {
56. // Initialize the array of characters that we will use for the
57. // graph. Using the space, an extra copy of the one-bar
58. // character, and character 255 (a full black box), we get 10
59. // characters in the array.
60.
61. // The variable c will have values from 0 to 9, since
62. // values are in the range of 0 to 1000, and 1000/101 is 9
63. // with integer math.
64. char c = bar_graph_characters[sensors[i]/101];
65.
66. // Display the bar graph characters.
67. print_character©;
68. }
69. }
70.
71. // set the motor speeds
72. void slave_set_motors(int speed1, int speed2)
73. {
74. char message[4] = {0xC1, speed1, 0xC5, speed2};
75. if(speed1 < 0)
76. {
77. message[0] = 0xC2; // m1 backward
78. message[1] = -speed1;
79.
}
80. if(speed2 < 0)
81. {
82. message[2] = 0xC6; // m2 backward
83. message[3] = -speed2;
84. }
85. serial_send_blocking(message,4);
86. }
87.
88. // do calibration
89. void slave_calibrate()
90. {
91. serial_send(“\xB4”,1);
92. int tmp_buffer[5];
93.
94. // read 10 characters (but we won’t use them)
95. serial_receive_blocking((char *)tmp_buffer, 10, 100);
96. }
97.
98. // reset calibration










