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.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. print('appending num ', num)
  55. if num in ops:
  56. if self.num1 != '':
  57. self.op = num
  58. self.num2 = ''
  59. self.result = ''
  60. elif num == '=':
  61. print('this is that')
  62. if self.num2 != '':
  63. if self.result == '':
  64. if self.op == '+':
  65. self.result = float(self.num1) + float(self.num2)
  66. print(self.result)
  67. if self.op == '-':
  68. self.result = float(self.num1) - float(self.num2)
  69. print(self.result)
  70. if self.op == '*':
  71. self.result = float(self.num1) * float(self.num2)
  72. print(self.result)
  73. if self.op == '/':
  74. self.result = float(self.num1) / float(self.num2)
  75. print(self.result)
  76. else:
  77. if self.op != '':
  78. if self.op == '+':
  79. self.result = self.result + float(self.num2)
  80. print(self.result)
  81. if self.op == '-':
  82. self.result = self.result - float(self.num2)
  83. print(self.result)
  84. if self.op == '*':
  85. self.result = self.result * float(self.num2)
  86. print(self.result)
  87. if self.op == '/':
  88. self.result = self.result / float(self.num2)
  89. print(self.result)
  90. else:
  91. if self.result != '':
  92. self.num1 = ''
  93. self.num2 = ''
  94. self.op = ''
  95. self.result = ''
  96. if self.op == '':
  97. self.num1 += num
  98. print('---append ', num)
  99. else:
  100. self.num2 += num
  101. print('---append ', num)
  102. def check_keys(self, o):
  103. _iter = 0
  104. for k in o.keyState:
  105. if k == 1:
  106. if _iter == 0:
  107. if ('.' not in self.num1 and self.num2 == '') or (self.num2 != '' and '.' not in self.num2):
  108. self.append_num('.')
  109. if _iter == 1:
  110. self.append_num('0')
  111. if _iter == 2:
  112. self.append_num('=')
  113. if _iter == 3:
  114. self.append_num('/')
  115. if _iter == 4:
  116. self.append_num('1')
  117. if _iter == 5:
  118. self.append_num('2')
  119. if _iter == 6:
  120. self.append_num('3')
  121. if _iter == 7:
  122. self.append_num('*')
  123. if _iter == 8:
  124. self.append_num('4')
  125. if _iter == 9:
  126. self.append_num('5')
  127. if _iter == 10:
  128. self.append_num('6')
  129. if _iter == 11:
  130. self.append_num('-')
  131. if _iter == 12:
  132. self.append_num('7')
  133. if _iter == 13:
  134. self.append_num('8')
  135. if _iter == 14:
  136. self.append_num('9')
  137. if _iter == 15:
  138. self.append_num('+')
  139. self.draw_main(o)
  140. _iter += 1
  141. def draw_main(self, o):
  142. print('drawing ', self.num1)
  143. x_size = o.width / 4
  144. y_size = o.height / 5
  145. og_x = 0
  146. o_x = og_x
  147. o_y = o.height
  148. text_padding = 6
  149. _id = 0
  150. while _id < 20:
  151. # lab = ""
  152. # for i in self.labels[_id]:
  153. # lab += i
  154. lab = self.labels[_id]
  155. o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue)
  156. o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
  157. o_x = o_x + x_size
  158. _id += 1
  159. if _id % 4 == 0:
  160. o_y -= y_size
  161. o_x = og_x
  162. o.draw.rectangle((0, 0, o.width, y_size), outline=0, fill=o.blue)
  163. #o.center_block('where is my fucking text', o.h2, [0, 0, o.width, y_size], o.light_grey)
  164. if self.num1 != '':
  165. if self.result != '':
  166. o.center_block(str(self.result), o.h2, [0, 0, o.width, y_size], o.light_grey)
  167. elif self.num2 != '':
  168. o.center_block(str(self.num2), o.h2, [0, 0, o.width, y_size], o.light_grey)
  169. elif self.op != '':
  170. o.center_block(str(self.op), o.h2, [0, 0, o.width, y_size], o.light_grey)
  171. else:
  172. o.center_block(str(self.num1), o.h2, [0, 0, o.width, y_size], o.light_grey)
  173. print('fucking do something')
  174. else:
  175. print('num1 is empty')
  176. o.update_display(0)
  177. def ReceiveMessage(self, message):
  178. o = self.FSM.owner
  179. u.play_seq(o, message)
  180. def Exit(self):
  181. self.FSM.owner.pub.unregister("beat", self)