raspberry pi zero based drum machine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

sCalculator.py 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import FSM
  2. import utils as u
  3. import menus as m
  4. #====================================
  5. State = type("State", (object,), {})
  6. #====================================
  7. class State(object):
  8. def __init__(self, FSM):
  9. self.FSM = FSM
  10. def Enter(self):
  11. pass
  12. def Execute(self):
  13. pass
  14. def Exit(self):
  15. pass
  16. class Calculator(State):
  17. def __init__(self,FSM):
  18. super(Calculator, self).__init__(FSM)
  19. def Enter(self):
  20. o = self.FSM.owner
  21. o.pub.register("beat", self)
  22. self.num1 = ''
  23. self.num2 = ''
  24. self.op = ''
  25. self.result = ''
  26. self.labels = ['.', '0', '=', '/',
  27. '1', '2', '3', '*',
  28. '4', '5', '6', '-',
  29. '7', '8', '9', '+',
  30. '7', '8', '9', '+']
  31. self.draw_main(o)
  32. o.update_display(0)
  33. super(Calculator, self).Enter()
  34. def Execute(self):
  35. o = self.FSM.owner
  36. m.menu1_actions(self, o)
  37. if o.keyState[16] == 1:
  38. m.draw_menu1(o)
  39. o.update_display(0)
  40. elif o.keyState[16] == 4:
  41. self.draw_main(o)
  42. o.update_display(0)
  43. if o.keyState[16] > 0:
  44. pass
  45. else:
  46. if o.keyState[17] == 1:
  47. self.num1 = ''
  48. self.num2 = ''
  49. self.op = ''
  50. self.result = ''
  51. self.check_keys(o)
  52. def append_num(self, num):
  53. ops = ['+', '-', '*', '/']
  54. if num in ops:
  55. if self.num1 != '':
  56. self.op = num
  57. self.num2 = ''
  58. self.result = ''
  59. elif num == '=':
  60. if self.num2 != '':
  61. if self.result == '':
  62. if self.op == '+':
  63. self.result = float(self.num1) + float(self.num2)
  64. print(self.result)
  65. if self.op == '-':
  66. self.result = float(self.num1) - float(self.num2)
  67. print(self.result)
  68. if self.op == '*':
  69. self.result = float(self.num1) * float(self.num2)
  70. print(self.result)
  71. if self.op == '/':
  72. self.result = float(self.num1) / float(self.num2)
  73. print(self.result)
  74. else:
  75. if self.op != '':
  76. if self.op == '+':
  77. self.result = self.result + float(self.num2)
  78. print(self.result)
  79. if self.op == '-':
  80. self.result = self.result - float(self.num2)
  81. print(self.result)
  82. if self.op == '*':
  83. self.result = self.result * float(self.num2)
  84. print(self.result)
  85. if self.op == '/':
  86. self.result = self.result / float(self.num2)
  87. print(self.result)
  88. else:
  89. if self.result != '':
  90. self.num1 = ''
  91. self.num2 = ''
  92. self.op = ''
  93. self.result = ''
  94. if self.op == '':
  95. self.num1 += num
  96. else:
  97. self.num2 += num
  98. def check_keys(self, o):
  99. _iter = 0
  100. for k in o.keyState:
  101. if k == 1:
  102. if _iter == 0:
  103. if ('.' not in self.num1 and self.num2 == '') or (self.num2 != '' and '.' not in self.num2):
  104. self.append_num('.')
  105. if _iter == 1:
  106. self.append_num('0')
  107. if _iter == 2:
  108. self.append_num('=')
  109. if _iter == 3:
  110. self.append_num('/')
  111. if _iter == 4:
  112. self.append_num('1')
  113. if _iter == 5:
  114. self.append_num('2')
  115. if _iter == 6:
  116. self.append_num('3')
  117. if _iter == 7:
  118. self.append_num('*')
  119. if _iter == 8:
  120. self.append_num('4')
  121. if _iter == 9:
  122. self.append_num('5')
  123. if _iter == 10:
  124. self.append_num('6')
  125. if _iter == 11:
  126. self.append_num('-')
  127. if _iter == 12:
  128. self.append_num('7')
  129. if _iter == 13:
  130. self.append_num('8')
  131. if _iter == 14:
  132. self.append_num('9')
  133. if _iter == 15:
  134. self.append_num('+')
  135. self.draw_main(o)
  136. _iter += 1
  137. def draw_main(self, o):
  138. x_size = o.width / 4
  139. y_size = o.height / 5
  140. og_x = 0
  141. o_x = og_x
  142. o_y = o.height
  143. text_padding = 6
  144. _id = 0
  145. while _id < 20:
  146. lab = self.labels[_id]
  147. o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue)
  148. o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
  149. o_x = o_x + x_size
  150. _id += 1
  151. if _id % 4 == 0:
  152. o_y -= y_size
  153. o_x = og_x
  154. o.draw.rectangle((0, 0, x_size * 3, y_size), outline=0, fill=o.blue)
  155. o.draw.rectangle((x_size * 3, 0, o.width, y_size), outline=0, fill=o.blue)
  156. o.center_block("Clear", o.h2, [x_size * 3, 0, o.width, y_size], o.light_grey)
  157. if self.num1 != '':
  158. if self.result != '':
  159. o.center_block(str(self.result), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
  160. elif self.num2 != '':
  161. o.center_block(str(self.num2), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
  162. elif self.op != '':
  163. o.center_block(str(self.op), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
  164. else:
  165. o.center_block(str(self.num1), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
  166. else:
  167. pass
  168. o.update_display(0)
  169. def ReceiveMessage(self, message):
  170. o = self.FSM.owner
  171. u.play_seq(o, message)
  172. def Exit(self):
  173. self.FSM.owner.pub.unregister("beat", self)