Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

251 строка
5.3KB

  1. #define RIP (inp > 570 && inp < 580)
  2. #define YIP (inp > 780 && inp < 790)
  3. #define GIP (inp > 840 && inp < 850)
  4. #define BIP (inp > 928 && inp < 938)
  5. static const int CCCP = 11;
  6. static const int CCIP = 12;
  7. static const int ICIP = 13;
  8. static const int BI = 4;
  9. static const int GI = 5;
  10. static const int YI = 6;
  11. static const int RI = 7;
  12. int v1 = 0;
  13. int v2 = 0;
  14. int v3 = 0;
  15. int v4 = 0;
  16. int diff = 0;
  17. int turnsRemaining = 0;
  18. int master = 0;
  19. int incorrect = 0;
  20. int correct = 0;
  21. int partial = 0;
  22. bool win = false;
  23. void setup() {
  24. pinMode(CCCP, OUTPUT);
  25. pinMode(CCIP, OUTPUT);
  26. pinMode(ICIP, OUTPUT);
  27. pinMode(BI, OUTPUT);
  28. pinMode(GI, OUTPUT);
  29. pinMode(YI, OUTPUT);
  30. pinMode(RI, OUTPUT);
  31. pinMode (A1, INPUT_PULLUP);
  32. Serial.begin(9600);
  33. randomSeed(analogRead(0));
  34. }
  35. void loop() {
  36. // put your main code here, to run repeatedly:
  37. difficultyState();
  38. //int inp = analogRead(A1);
  39. generateRandomValues();
  40. Serial.println(master);
  41. correct = 0;
  42. for (int d = 0; d<diff; d++){
  43. correct = 0;
  44. incorrect = 0;
  45. partial = 0;
  46. inputValues();
  47. checkValues();
  48. showFeedback();
  49. if(correct == 4){
  50. d = diff;
  51. win = true;
  52. }
  53. }
  54. if (win){
  55. for (int w = 0; w< 10; w++){
  56. digitalWrite(GI, HIGH);
  57. digitalWrite(CCCP, LOW);
  58. delay (500);
  59. digitalWrite(GI, LOW);
  60. digitalWrite(CCCP, HIGH);
  61. delay(500);
  62. }
  63. digitalWrite(CCCP, LOW);
  64. }
  65. else{
  66. for (int l = 0; l< 10; l++){
  67. digitalWrite(RI, HIGH);
  68. digitalWrite(ICIP, LOW);
  69. delay (500);
  70. digitalWrite(RI, LOW);
  71. digitalWrite(ICIP, HIGH);
  72. delay(500);
  73. }
  74. digitalWrite(ICIP, LOW);
  75. }
  76. }
  77. /* SETS THE GAME DIFFICULTY */
  78. void difficultyState() {
  79. while (readPins() == 5) {
  80. }
  81. diff = readPins();
  82. diff = (diff * 4) + 4;
  83. delay (500);
  84. }
  85. int readPins() {
  86. int inp = analogRead(A1);
  87. if (RIP) {
  88. return 0;
  89. }
  90. else if (YIP) {
  91. return 1;
  92. }
  93. else if (GIP) {
  94. return 2;
  95. }
  96. else if (BIP) {
  97. return 3;
  98. }
  99. else {
  100. return 5;
  101. }
  102. }
  103. void generateRandomValues() {
  104. master = random(0, 256);
  105. //TEST VALUE master = 228;
  106. }
  107. void checkValues() {
  108. bool v1p = false, v2p = false, v3p = false , v4p = false;
  109. int masterProc[] {0, 0, 0, 0};
  110. for (int i = 0; i < 8; i += 2) {
  111. bool succrun = false;
  112. byte b1 = bitRead(master, i);
  113. byte b2 = bitRead(master, i + 1);
  114. if (bitRead(b1, 0) == bitRead(v1, 0 ) && bitRead(b2, 0) == bitRead(v1, 1)) {
  115. if (i == 0) {
  116. correct ++;
  117. Serial.println("First Correct");
  118. v1p = true;
  119. succrun = true;
  120. }
  121. }
  122. if (bitRead(b1, 0) == bitRead(v2, 0) && bitRead(b2, 0) == bitRead(v2, 1)) {
  123. if (i == 2) {
  124. correct ++;
  125. Serial.println("2nd Correct");
  126. v2p = true;
  127. succrun = true;
  128. }
  129. }
  130. if (bitRead(b1, 0) == bitRead(v3, 0 ) && bitRead(b2, 0) == bitRead(v3, 1)) {
  131. if (i == 4) {
  132. correct ++;
  133. Serial.println("3rd Correct");
  134. v3p = true;
  135. succrun = true;
  136. }
  137. }
  138. if (bitRead(b1, 0) == bitRead(v4, 0) && bitRead(b2, 0) == bitRead(v4, 1)) {
  139. if (i == 6) {
  140. correct ++;
  141. Serial.println("4 Correct");
  142. v4p = true;
  143. succrun = true;
  144. }
  145. }
  146. if (succrun) {
  147. masterProc[i / 2] = 1;
  148. }
  149. }
  150. for (int j = 0; j < 4; j++) {
  151. if (masterProc[j] == 0) {
  152. byte b1 = bitRead(master, j * 2);
  153. byte b2 = bitRead(master, (j * 2) + 1);
  154. bool runFail = false;
  155. if (!v1p && runFail == false) {
  156. if (bitRead(b1, 0) == bitRead(v1, 0 ) && bitRead(b2, 0) == bitRead(v1, 1)) {
  157. partial++;
  158. v1p = true;
  159. masterProc[j] = 1;
  160. runFail = true;
  161. }
  162. }
  163. if (!v2p && runFail == false) {
  164. if (bitRead(b1, 0) == bitRead(v2, 0 ) && bitRead(b2, 0) == bitRead(v2, 1)) {
  165. v2p = true;
  166. masterProc[j] = 1;
  167. partial++;
  168. runFail = true;
  169. }
  170. }
  171. if (!v3p && runFail == false) {
  172. if (bitRead(b1, 0) == bitRead(v3, 0 ) && bitRead(b2, 0) == bitRead(v3, 1)) {
  173. v3p = true;
  174. partial++;
  175. masterProc[j] = 1;
  176. runFail = true;
  177. }
  178. }
  179. if (!v4p && runFail == false) {
  180. if (bitRead(b1, 0) == bitRead(v4, 0 ) && bitRead(b2, 0) == bitRead(v4, 1)) {
  181. v4p = true;
  182. masterProc[j] = 1;
  183. partial++;
  184. runFail = true;
  185. }
  186. }
  187. }
  188. }
  189. for (int i = 0; i < 4; i++) {
  190. if (masterProc[i] == 0) {
  191. incorrect++;
  192. }
  193. }
  194. }
  195. void showFeedback() {
  196. for (int i = 0; i < correct; i++) {
  197. digitalWrite(CCCP, HIGH);
  198. delay (500);
  199. digitalWrite(CCCP, LOW);
  200. delay (500);
  201. }
  202. for (int i = 0; i < partial; i++) {
  203. digitalWrite(CCIP, HIGH);
  204. delay (500);
  205. digitalWrite(CCIP, LOW);
  206. delay (500);
  207. }
  208. for (int i = 0; i < incorrect; i++) {
  209. digitalWrite(ICIP, HIGH);
  210. delay (500);
  211. digitalWrite(ICIP, LOW);
  212. delay (500);
  213. }
  214. }
  215. void inputValues() {
  216. byte input = 0;
  217. digitalWrite(RI, HIGH);
  218. while (readPins() == 5) {
  219. }
  220. v1 = readPins();
  221. digitalWrite(RI, LOW);
  222. delay(250);
  223. digitalWrite(YI, HIGH);
  224. while (readPins() == 5) {
  225. }
  226. v2 = readPins();
  227. digitalWrite(YI, LOW);
  228. delay(250);
  229. digitalWrite(GI, HIGH);
  230. while (readPins() == 5) {
  231. }
  232. v3 = readPins();
  233. digitalWrite(GI, LOW);
  234. delay(250);
  235. digitalWrite(BI, HIGH);
  236. while (readPins() == 5) {
  237. }
  238. v4 = readPins();
  239. digitalWrite(BI, LOW);
  240. delay(250);
  241. }