Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum state {NONE, L, LT, LV, LP, M, MS}; //Určení stavů funkce switch
- enum state aktualni_stav = NONE; //Zamezení nesprávnému určení při prvním běhu programu
- char c =0; //Zamezení nesprávnému char po restartu
- unsigned int AmetrBuzeni = 0; // Budíky a kontrolky dle CIV od Michala
- unsigned int AmetrMS1 = 0; // Nemůžou jít do mínusu a rovnají se nule
- unsigned int AmetrMS2 = 0; //
- unsigned int Rychlomer = 0; //
- unsigned int UkazatelARR = 0; //
- unsigned int TlakValce = 0; //
- unsigned int TlakVzduchojem = 0; //
- 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},
- {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},
- {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},
- {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}};
- //═════════════════════════════════════════════════════════════════════════════════════════//
- void setup() { //Nastavení Arduina
- for(int i=2; i<13; i++){
- pinMode(i,OUTPUT); //Piny 2 až 13 jsou výstupy
- digitalWrite(i,LOW); //Stav pinů je LOW
- }
- for(int i=24; i<36; i++){
- pinMode(i,OUTPUT); //Piny 24 až 35 jsou výstupy
- digitalWrite(i,LOW); //Stav pinů je LOW
- }
- Serial.setTimeout(2); //Časomíra pro sériovou komunikaci je 2ms, důležité pro parseInt
- Serial.begin(115200); //Započni sériovou komunikaci ve zvolené rychlosti, 115200
- Serial.flush(); //Vyčisti buffer serialu
- }
- //═════════════════════════════════════════════════════════════════════════════════════════//
- void prectiSerial() { //Funkce pro čtení Sériové komunikace a přiřazování hodnot
- if(Serial.available() > 0) { //Pokud je v bufferu nějaký znak
- c = Serial.read(); //Proměnná c je rovna příchozímu znaku
- switch(aktualni_stav) { //Funkce přiřazování hodnot ke správné proměnné
- /////////////////////////////////////////////////
- case L: // Pokud předchozí znak byl "L"
- if(c == 'l') aktualni_stav = L; // Když je znak "l", vrať se na případ "L"
- else if(c == 't') aktualni_stav = LT; // Když je další znak "t", pokračuj na "LT"
- else if(c == 'v') aktualni_stav = LV; // Jinak když je znak "v", pokračuj na "LV"
- else if(c == 'p') aktualni_stav = LP; // -----||----
- else if(c == 'm') aktualni_stav = M; // -----||----
- else aktualni_stav = NONE; //Pokud znak není roven ani jednomu, vrať se na default
- break; //Skonči možnost "L"
- /////////////////////////////////////////////////
- case LT: //Pokud znaky byly "l" a "t"
- if(c == 'b') //A další příchozí znak je "b"
- { //
- AmetrBuzeni = Serial.parseInt(); //Proměnná ampérmetr buzení je rovna numerickým znakům za ní
- aktualni_stav = NONE; //Vrať se na default
- } //
- else if(c == 'l') aktualni_stav = L; //Když by byl příchozí znak "l", vrať se k případu "L"
- else if(c == 'm') aktualni_stav = M; //Jinka když by znak byl "m", vrať se k případu "M"
- else aktualni_stav = NONE; //Pokud znak není roven ani jednomu, vrať se na default
- break; //Skonči mořnost "LT"
- /////////////////////////////////////////////////
- case LV:
- if(c == 'l') aktualni_stav = L;
- else if(c == 'm') aktualni_stav = M;
- else if(c == 'n')
- {
- Rychlomer = (Serial.parseInt())/(10);
- zapisRychlomer();
- aktualni_stav = NONE;
- }
- else if(c == 'p')
- {
- UkazatelARR = (Serial.parseInt())/(10);
- zapisUkazatelARR();
- aktualni_stav = NONE;
- }
- else aktualni_stav = NONE;
- break;
- /////////////////////////////////////////////////
- case LP:
- if(c == 'l') aktualni_stav = L;
- else if(c == 'v')
- {
- TlakValce = Serial.parseInt();
- aktualni_stav = NONE;
- }
- else if(c == 'm')
- {
- TlakVzduchojem = Serial.parseInt();
- aktualni_stav = NONE;
- }
- else aktualni_stav = NONE;
- break;
- /////////////////////////////////////////////////
- case M:
- if(c == 'l') aktualni_stav = L;
- else if(c == 's') aktualni_stav = MS;
- else aktualni_stav = NONE;
- break;
- /////////////////////////////////////////////////
- case MS:
- if(c == 'l') aktualni_stav = L;
- else if(c == 'm') aktualni_stav = M;
- else if(c == 'a')
- {
- AmetrMS1 = Serial.parseInt();
- aktualni_stav = NONE;
- }
- else if(c == 'b')
- {
- AmetrMS2 = Serial.parseInt();
- aktualni_stav = NONE;
- }
- else aktualni_stav = NONE;
- break;
- /////////////////////////////////////////////////
- default:
- if(c == 'l') aktualni_stav = L;
- else if(c == 'm') aktualni_stav = M;
- else aktualni_stav = NONE;
- break;
- }
- }
- }
- //═════════════════════════════════════════════════════════════════════════════════════════//
- void zapisRychlomer() {
- for(int i=0; i<12; i++) {
- if (Rychlomer > i*255 && Rychlomer <= i*255+255) {
- for(int ii=0; ii<12; ii++) {
- if(stav[i][ii] == 0) {digitalWrite(ii+2, LOW); }
- if(stav[i][ii] == 1) {digitalWrite(ii+2, HIGH); }
- int analogValue = (Rychlomer-(i*255));
- if(stav[i][ii] == 2) {analogWrite(ii+2, analogValue); }
- }
- }
- if(Rychlomer == 0) {
- for(int i=2; i<14; i++) {digitalWrite(i,LOW); }
- }
- }
- }
- //═════════════════════════════════════════════════════════════════════════════════════════//
- void zapisUkazatelARR() {
- for(int i=0; i<12; i++) {
- if (UkazatelARR > i*255 && UkazatelARR <= i*255+255) {
- for(int ii=0; ii<12; ii++) {
- if(stav[i][ii] == 0) {digitalWrite(ii+24, LOW); }
- if(stav[i][ii] == 1) {digitalWrite(ii+24, HIGH); }
- int analogValue = (UkazatelARR-(i*255));
- if(stav[i][ii] == 2) {digitalWrite(ii+24, HIGH); }
- }
- }
- if(UkazatelARR == 0) {
- for(int i=24; i<36; i++) {digitalWrite(i,LOW); }
- }
- }
- }
- //═════════════════════════════════════════════════════════════════════════════════════════//
- void loop() {
- prectiSerial();
- }
- //═════════════════════════════════════════════════════════════════════════════════════════//
Advertisement
Add Comment
Please, Sign In to add comment