zdenekpetrzd

RW zápis na LED rychloměr a ARR

Dec 29th, 2017
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.43 KB | None | 0 0
  1. enum state {NONE, L, LT, LV, LP, M, MS}; //Určení stavů funkce switch
  2. enum state aktualni_stav = NONE; //Zamezení nesprávnému určení při prvním běhu programu
  3. char c =0; //Zamezení nesprávnému char po restartu
  4.  
  5. unsigned int AmetrBuzeni = 0; // Budíky a kontrolky dle CIV od Michala
  6. unsigned int AmetrMS1 = 0; // Nemůžou jít do mínusu a rovnají se nule
  7. unsigned int AmetrMS2 = 0; //
  8. unsigned int Rychlomer = 0; //
  9. unsigned int UkazatelARR = 0; //
  10. unsigned int TlakValce = 0; //
  11. unsigned int TlakVzduchojem = 0; //
  12.  
  13. int stav[12][12] = {{2,0,0,0,0,0,0,0,0,0,0,0}, {1,2,0,0,0,0,0,0,0,0,0,0}, {1,1,2,0,0,0,0,0,0,0,0,0},
  14. {1,1,1,2,0,0,0,0,0,0,0,0}, {1,1,1,1,2,0,0,0,0,0,0,0}, {1,1,1,1,1,2,0,0,0,0,0,0},
  15. {1,1,1,1,1,1,2,0,0,0,0,0}, {1,1,1,1,1,1,1,2,0,0,0,0}, {1,1,1,1,1,1,1,1,2,0,0,0},
  16. {1,1,1,1,1,1,1,1,1,2,0,0}, {1,1,1,1,1,1,1,1,1,1,2,0}, {1,1,1,1,1,1,1,1,1,1,1,2}};
  17.  
  18. //═════════════════════════════════════════════════════════════════════════════════════════//
  19. void setup() { //Nastavení Arduina
  20. for(int i=2; i<13; i++){
  21. pinMode(i,OUTPUT); //Piny 2 až 13 jsou výstupy
  22. digitalWrite(i,LOW); //Stav pinů je LOW
  23. }
  24. for(int i=24; i<36; i++){
  25. pinMode(i,OUTPUT); //Piny 24 až 35 jsou výstupy
  26. digitalWrite(i,LOW); //Stav pinů je LOW
  27. }
  28. Serial.setTimeout(2); //Časomíra pro sériovou komunikaci je 2ms, důležité pro parseInt
  29. Serial.begin(115200); //Započni sériovou komunikaci ve zvolené rychlosti, 115200
  30. Serial.flush(); //Vyčisti buffer serialu
  31.  
  32. }
  33. //═════════════════════════════════════════════════════════════════════════════════════════//
  34. void prectiSerial() { //Funkce pro čtení Sériové komunikace a přiřazování hodnot
  35. if(Serial.available() > 0) { //Pokud je v bufferu nějaký znak
  36. c = Serial.read(); //Proměnná c je rovna příchozímu znaku
  37.  
  38. switch(aktualni_stav) { //Funkce přiřazování hodnot ke správné proměnné
  39. /////////////////////////////////////////////////
  40. case L: // Pokud předchozí znak byl "L"
  41. if(c == 'l') aktualni_stav = L; // Když je znak "l", vrať se na případ "L"
  42. else if(c == 't') aktualni_stav = LT; // Když je další znak "t", pokračuj na "LT"
  43. else if(c == 'v') aktualni_stav = LV; // Jinak když je znak "v", pokračuj na "LV"
  44. else if(c == 'p') aktualni_stav = LP; // -----||----
  45. else if(c == 'm') aktualni_stav = M; // -----||----
  46. else aktualni_stav = NONE; //Pokud znak není roven ani jednomu, vrať se na default
  47. break; //Skonči možnost "L"
  48. /////////////////////////////////////////////////
  49. case LT: //Pokud znaky byly "l" a "t"
  50. if(c == 'b') //A další příchozí znak je "b"
  51. { //
  52. AmetrBuzeni = Serial.parseInt(); //Proměnná ampérmetr buzení je rovna numerickým znakům za ní
  53. aktualni_stav = NONE; //Vrať se na default
  54. } //
  55. else if(c == 'l') aktualni_stav = L; //Když by byl příchozí znak "l", vrať se k případu "L"
  56. else if(c == 'm') aktualni_stav = M; //Jinka když by znak byl "m", vrať se k případu "M"
  57. else aktualni_stav = NONE; //Pokud znak není roven ani jednomu, vrať se na default
  58. break; //Skonči mořnost "LT"
  59. /////////////////////////////////////////////////
  60. case LV:
  61. if(c == 'l') aktualni_stav = L;
  62. else if(c == 'm') aktualni_stav = M;
  63. else if(c == 'n')
  64. {
  65. Rychlomer = (Serial.parseInt())/(10);
  66. zapisRychlomer();
  67. aktualni_stav = NONE;
  68. }
  69. else if(c == 'p')
  70. {
  71. UkazatelARR = (Serial.parseInt())/(10);
  72. zapisUkazatelARR();
  73. aktualni_stav = NONE;
  74. }
  75. else aktualni_stav = NONE;
  76. break;
  77. /////////////////////////////////////////////////
  78. case LP:
  79. if(c == 'l') aktualni_stav = L;
  80. else if(c == 'v')
  81. {
  82. TlakValce = Serial.parseInt();
  83. aktualni_stav = NONE;
  84. }
  85. else if(c == 'm')
  86. {
  87. TlakVzduchojem = Serial.parseInt();
  88. aktualni_stav = NONE;
  89. }
  90. else aktualni_stav = NONE;
  91. break;
  92. /////////////////////////////////////////////////
  93. case M:
  94. if(c == 'l') aktualni_stav = L;
  95. else if(c == 's') aktualni_stav = MS;
  96. else aktualni_stav = NONE;
  97. break;
  98. /////////////////////////////////////////////////
  99. case MS:
  100. if(c == 'l') aktualni_stav = L;
  101. else if(c == 'm') aktualni_stav = M;
  102. else if(c == 'a')
  103. {
  104. AmetrMS1 = Serial.parseInt();
  105. aktualni_stav = NONE;
  106. }
  107. else if(c == 'b')
  108. {
  109. AmetrMS2 = Serial.parseInt();
  110. aktualni_stav = NONE;
  111. }
  112. else aktualni_stav = NONE;
  113. break;
  114. /////////////////////////////////////////////////
  115. default:
  116. if(c == 'l') aktualni_stav = L;
  117. else if(c == 'm') aktualni_stav = M;
  118. else aktualni_stav = NONE;
  119. break;
  120.  
  121. }
  122. }
  123. }
  124. //═════════════════════════════════════════════════════════════════════════════════════════//
  125. void zapisRychlomer() {
  126. for(int i=0; i<12; i++) {
  127. if (Rychlomer > i*255 && Rychlomer <= i*255+255) {
  128. for(int ii=0; ii<12; ii++) {
  129. if(stav[i][ii] == 0) {digitalWrite(ii+2, LOW); }
  130. if(stav[i][ii] == 1) {digitalWrite(ii+2, HIGH); }
  131. int analogValue = (Rychlomer-(i*255));
  132. if(stav[i][ii] == 2) {analogWrite(ii+2, analogValue); }
  133. }
  134. }
  135. if(Rychlomer == 0) {
  136. for(int i=2; i<14; i++) {digitalWrite(i,LOW); }
  137. }
  138. }
  139. }
  140. //═════════════════════════════════════════════════════════════════════════════════════════//
  141. void zapisUkazatelARR() {
  142. for(int i=0; i<12; i++) {
  143. if (UkazatelARR > i*255 && UkazatelARR <= i*255+255) {
  144. for(int ii=0; ii<12; ii++) {
  145. if(stav[i][ii] == 0) {digitalWrite(ii+24, LOW); }
  146. if(stav[i][ii] == 1) {digitalWrite(ii+24, HIGH); }
  147. int analogValue = (UkazatelARR-(i*255));
  148. if(stav[i][ii] == 2) {digitalWrite(ii+24, HIGH); }
  149. }
  150. }
  151. if(UkazatelARR == 0) {
  152. for(int i=24; i<36; i++) {digitalWrite(i,LOW); }
  153. }
  154. }
  155. }
  156. //═════════════════════════════════════════════════════════════════════════════════════════//
  157. void loop() {
  158. prectiSerial();
  159. }
  160. //═════════════════════════════════════════════════════════════════════════════════════════//
Advertisement
Add Comment
Please, Sign In to add comment