Advertisement
Guest User

Valeto

a guest
Feb 16th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.11 KB | None | 0 0
  1. #include <Arduino.h>
  2.  
  3. #define LEDred 2
  4. #define LEDgreen 4
  5. #define numberLength 20 //How long the 2 numbers can be - 20 in this case. Please change only this number if bigger numbers are needed.
  6.  
  7. int charsRead = 0;
  8. char firstNumber[numberLength];
  9. int firstNumberCount = 0;
  10. int firstNumberAsInt = 0;
  11. char secondNumber[numberLength];
  12. int secondNumberCount = 0;
  13. int secondNumberAsInt = 0;
  14. bool first = true;
  15. bool second = false;
  16. char operand = 'n';
  17. int result = 0;
  18. double dresult = 0;
  19.  
  20.  
  21. void setup() {
  22. Serial.begin(9600);
  23. pinMode(LEDred, OUTPUT);
  24. pinMode(LEDgreen, OUTPUT);
  25. Serial.println("Input expressions in format: '<integer1><operator><integer2>='");
  26. }
  27.  
  28. void Reset()
  29. {
  30. first = true;
  31. second = false;
  32. firstNumber[numberLength];
  33. secondNumber[numberLength];
  34. firstNumberCount = 0;
  35. secondNumberCount = 0;
  36. firstNumberAsInt = 0;
  37. secondNumberAsInt = 0;
  38. charsRead = 0;
  39. result = 0;
  40. dresult = 0;
  41. }
  42.  
  43. int Powdiy(int base, int power)
  44. {
  45. int newNum = 1;
  46. for (int i = 0; i < power; i++)
  47. newNum *= base;
  48. return newNum;
  49. }
  50.  
  51. void loop() {
  52. while (Serial.available() > 0)
  53. {
  54. char c = Serial.read();
  55. if (c != '\n')
  56. {
  57. digitalWrite(LEDgreen, LOW);
  58. digitalWrite(LEDred, LOW);
  59. if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9')
  60. {
  61. if (first)
  62. {
  63. firstNumber[charsRead] = c;
  64. charsRead++;
  65. firstNumberCount = charsRead;
  66. }
  67. else if (second)
  68. {
  69. secondNumber[charsRead] = c;
  70. charsRead++;
  71. secondNumberCount = charsRead;
  72. }
  73. }
  74. else if (c == '+' || c == '-' || c == '*' || c == '/')
  75. {
  76. switch (c)
  77. {
  78. if (firstNumberCount > 0)
  79. {
  80. case '+':
  81. first = false;
  82. second = true;
  83. charsRead = 0;
  84. operand = '+';
  85. break;
  86.  
  87. case '-':
  88. first = false;
  89. second = true;
  90. charsRead = 0;
  91. operand = '-';
  92. break;
  93.  
  94. case '*':
  95. first = false;
  96. second = true;
  97. charsRead = 0;
  98. operand = '*';
  99. break;
  100.  
  101. case '/':
  102. first = false;
  103. second = true;
  104. charsRead = 0;
  105. operand = '/';
  106. break;
  107. }
  108. else
  109. {
  110. Serial.println("Please enter a normal integer");
  111. Reset();
  112. }
  113. }
  114.  
  115. }
  116. if (c == '=')
  117. {
  118. switch (operand)
  119. {
  120.  
  121. case '+':
  122. for (int i = 0; i < firstNumberCount; i++)
  123. {
  124. int integ = (((int)(firstNumber[i])) - '0');
  125. if (integ == 0)
  126. {
  127. //We skip an iteration
  128. }
  129. else
  130. {
  131. integ *= Powdiy(10, (firstNumberCount - i) - 1);
  132. firstNumberAsInt += integ;
  133. }
  134. }
  135. for (int i = 0; i < secondNumberCount; i++)
  136. {
  137. int integ = (((int)(secondNumber[i])) - '0');
  138. if (integ == 0)
  139. {
  140. //We skip an iteration
  141. }
  142. else
  143. {
  144. integ *= Powdiy(10, (secondNumberCount - i) - 1);
  145. secondNumberAsInt += integ;
  146. }
  147. result = firstNumberAsInt + secondNumberAsInt;
  148. }
  149. break;
  150.  
  151.  
  152. case '-':
  153. for (int i = 0; i < firstNumberCount; i++)
  154. {
  155. int integ = (((int)(firstNumber[i])) - '0');
  156. if (integ == 0)
  157. {
  158. //We skip an iteration
  159. }
  160. else
  161. {
  162. integ *= Powdiy(10, (firstNumberCount - i) - 1);
  163. firstNumberAsInt += integ;
  164. }
  165. }
  166. for (int i = 0; i < secondNumberCount; i++)
  167. {
  168. int integ = (((int)(secondNumber[i])) - '0');
  169. if (integ == 0)
  170. {
  171. //We skip an iteration
  172. }
  173. else
  174. {
  175. integ *= Powdiy(10, (secondNumberCount - i) - 1);
  176. secondNumberAsInt += integ;
  177. }
  178. result = firstNumberAsInt - secondNumberAsInt;
  179. }
  180. break;
  181.  
  182.  
  183. case '*':
  184. for (int i = 0; i < firstNumberCount; i++)
  185. {
  186. int integ = (((int)(firstNumber[i])) - '0');
  187. if (integ == 0)
  188. {
  189. //We skip an iteration
  190. }
  191. else
  192. {
  193. integ *= Powdiy(10, (firstNumberCount - i) - 1);
  194. firstNumberAsInt += integ;
  195. }
  196. }
  197. for (int i = 0; i < secondNumberCount; i++)
  198. {
  199. int integ = (((int)(secondNumber[i])) - '0');
  200. if (integ == 0)
  201. {
  202. //We skip an iteration
  203. }
  204. else
  205. {
  206. integ *= Powdiy(10, (secondNumberCount - i) - 1);
  207. secondNumberAsInt += integ;
  208. }
  209. result = firstNumberAsInt * secondNumberAsInt;
  210. }
  211. break;
  212.  
  213.  
  214. case '/':
  215. for (int i = 0; i < firstNumberCount; i++)
  216. {
  217. int integ = (((int)(firstNumber[i])) - '0');
  218. if (integ == 0)
  219. {
  220. //We skip an iteration
  221. }
  222. else
  223. {
  224. integ *= Powdiy(10, (firstNumberCount - i) - 1);
  225. firstNumberAsInt += integ;
  226. }
  227. }
  228. for (int i = 0; i < secondNumberCount; i++)
  229. {
  230. int integ = (((int)(secondNumber[i])) - '0');
  231. if (integ == 0)
  232. {
  233. //We skip an iteration
  234. }
  235. else
  236. {
  237. integ *= Powdiy(10, (secondNumberCount - i) - 1);
  238. secondNumberAsInt += integ;
  239. }
  240. dresult = (double)firstNumberAsInt / (double)secondNumberAsInt;
  241. }
  242. break;
  243. }
  244. if(operand == '/')
  245. {Serial.print("Result is: "); Serial.println(dresult);}
  246. else
  247. {Serial.print("Result is: "); Serial.println(result);}
  248. if (result > 0 || dresult > 0)
  249. {
  250. digitalWrite(LEDgreen, HIGH);
  251. Serial.println("Green LED lit up!");
  252.  
  253. }
  254. else if (result < 0 || dresult < 0)
  255. {
  256. digitalWrite(LEDred, HIGH);
  257. Serial.println("RED LED lit up!");
  258. }
  259. else
  260. {
  261. digitalWrite(LEDgreen, LOW);
  262. digitalWrite(LEDred, LOW);
  263. }
  264. //We reset variables for the next loop.
  265. Reset();
  266. }
  267. }
  268. }
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement