Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************/
- /* Program testowy bez obiektu w oprogamowaniu SPSym */
- /*************************************************************************/
- #include "spsym.h" // Pomocnicze funkcje i deklaracje
- #include <stdio.h> // Stadnardowe I/O
- #include <math.h>
- // --- Makrodefinicje dla obiektu X ---
- #define T X8
- #define Z1 Y1
- #define Z2 Y2
- #define Z3 Y3
- #define Z4 Y4
- #define Z5 Y5
- #define M Y6
- #define G1 Y7
- // --- Zmienne użytkownika ---
- int licz=0; // Licznik przerwań
- int stanAuta = 1, stanBieg = 1, lastBieg, stanPed = 1, stanTankowania = 1, stanZbiornika = 1, stanSygBieg = 1, stanPredkosci = 1;
- float tank = 0.50, v = 50;
- char refillingTank = 0, gear = 1, biegCount = 1, vCount = 0;
- char timAuto, timRefilTank, timTank, tank1, tank0, timBieg, timSpeed, speed0;
- float acceleration (int gear, float v, int min, int max)
- {
- float vWidth = max - min;
- float wsp;
- switch (gear)
- {
- case 1:
- wsp = 1;
- break;
- case 2:
- wsp = 1.5;
- break;
- case 3:
- wsp = 2;
- break;
- case 4:
- wsp = 0.8;
- break;
- case 5:
- wsp = 0.4;
- break;
- }
- return wsp * (-(pow((((v - min) / (vWidth/2)) - 1), 2)) + 2);
- }
- void prolog(void) // Inicjowanie programu (jednorazowo przy starcie)
- {
- L1=L2=L3=L4=0; // Zgaszenie LED-ów
- L5=L6=L7=L8=0; // Zgaszenie LED-ów
- }
- void oblicz(void) // Kod użytkownika wykonywany cyklicznie
- {
- pK1=aK1; pK2=aK2; pK3=aK3; pK4=aK4;
- pK5=aK5; pK6=aK6; pK7=aK7; pK8=aK8;
- tank1 = (int)(tank*20);
- tank0 = 20 - tank1;
- if(gear)
- {
- if (v > 0) speed0 = (int)(v/10);
- else speed0 = 0;
- speed0 = 21 - speed0;
- }
- else
- {
- if (v < 0) speed0 = (int)((-v)/5);
- else speed0 = 0;
- speed0 = 7 - speed0;
- }
- switch(stanAuta)
- {
- case -1:
- {
- refillingTank = 1;
- if(!pK5 || !pK6) stanAuta = 0;
- }
- break;
- case 0:
- {
- L1 = 0;
- refillingTank = 0;
- if(!pK5) stanAuta = 1;
- else if(pK6) {stanAuta = -1; timRefilTank = 2;}
- }
- break;
- case 1:
- {
- L1 = 0;
- if(pK1 && tank > 0) stanAuta = 2;
- else if(pK5 && !v) stanAuta = 0;
- }
- break;
- case 2:
- {
- if(!pK1) {stanAuta = 3; timAuto = 5;}
- }
- break;
- case 3:
- {
- L1 = 1;
- if(!timAuto) {stanAuta = 4; timAuto = 5;}
- else if(pK1) stanAuta = 5;
- }
- break;
- case 4:
- {
- L1 = 0;
- if(!timAuto) {stanAuta = 3; timAuto = 5;}
- else if(pK1) stanAuta = 5;
- }
- break;
- case 5:
- {
- L1 = 0;
- if(!pK1 && gear == 1) stanAuta = 1;
- else if(!pK1 && gear != 1) {stanAuta = 3; timAuto = 5;}
- }
- break;
- }
- if(refillingTank)
- {
- switch(stanTankowania)
- {
- case 1:
- {
- L1 = 1;
- if(!timRefilTank) {stanTankowania = 2; timRefilTank = 2;}
- }
- break;
- case 2:
- {
- L1 = 0;
- if(!timRefilTank) {stanTankowania = 1; timRefilTank = 2;}
- }
- break;
- }
- tank+=0.005;
- if(tank > 1) tank = 1;
- }
- else stanTankowania = 1;
- switch(stanZbiornika)
- {
- case 1:
- {
- L4 = 0;
- timTank = tank1;
- if(tank) stanZbiornika = 2;
- else stanZbiornika = 4;
- }
- break;
- case 2:
- {
- L4 = 1;
- if(!timTank && tank < 1) {stanZbiornika = 3; timTank = tank0;}
- else if(!tank) stanZbiornika = 4;
- }
- break;
- case 3:
- {
- L4 = 0;
- if(!timTank && tank > 0) {stanZbiornika = 2; timTank = tank1;}
- else if(!tank) stanZbiornika = 5;
- }
- break;
- case 4:
- {
- L4 = 0;
- if(tank) {stanZbiornika = 3; timTank = tank0;}
- else stanZbiornika = 5;
- }
- break;
- case 5:
- {
- L4 = 1;
- if(tank) {stanZbiornika = 3; timTank = tank0;}
- else stanZbiornika = 4;
- }
- break;
- }
- if(pK3 && stanAuta > 0)
- {
- if(gear && v) tank -= v * gear * 0.00000125;
- else if(!gear && v < 0) tank -= (-v) * 0.00000125;
- if(tank <= 0)
- {
- tank = 0;
- stanAuta = 1;
- }
- }
- if(gear)
- {
- switch(stanPredkosci)
- {
- case 1:
- {
- L3 = 0;
- timSpeed = 21 - speed0;
- stanPredkosci = 3;
- }
- break;
- case 2:
- {
- L3 = 1;
- if(!timSpeed) {stanPredkosci = 3; timSpeed = speed0;}
- }
- break;
- case 3:
- {
- L3 = 0;
- if(!timSpeed && v > 0) {stanPredkosci = 2; timSpeed = 1;}
- }
- break;
- }
- }
- else
- {
- switch(stanPredkosci)
- {
- case 1:
- {
- L3 = 0;
- timSpeed = 7 - speed0;
- stanPredkosci = 3;
- }
- break;
- case 2:
- {
- L3 = 1;
- if(!timSpeed) {stanPredkosci = 3; timSpeed = speed0;}
- }
- break;
- case 3:
- {
- L3 = 0;
- if(!timSpeed && v < 0) {stanPredkosci = 2; timSpeed = 1;}
- }
- break;
- }
- }
- switch(gear)
- {
- case 0:
- {
- if(pK5 && !v) gear = 1;
- }
- break;
- case 1:
- {
- if(pK2 && v >= 25) gear = 2;
- else if(pK6 && !v && stanAuta > 1) gear = 0;
- }
- break;
- case 2:
- {
- if(pK2 && v >= 60) gear = 3;
- else if(v < 25) gear = 1;
- }
- break;
- case 3:
- {
- if(pK2 && v >= 100) gear = 4;
- else if(v < 60) gear = 2;
- }
- break;
- case 4:
- {
- if(pK2 && v >= 150) gear = 5;
- else if(v < 100) gear = 3;
- }
- break;
- case 5:
- {
- if(v < 150) gear = 4;
- }
- break;
- }
- if(pK4 && (stanAuta > 1 || v != 0))
- {
- if(gear)
- {
- if(v > 5) v -= v*0.02;
- else v = 0;
- }
- else if(!gear)
- {
- if (v < 0) v += 1;
- }
- }
- else if(pK3 && stanAuta > 1)
- {
- switch(gear)
- {
- case 0:
- {
- v -= acceleration(1, -v, 0, 30);
- if (v < -30) v = -30;
- }
- break;
- case 1:
- {
- v += acceleration(gear, v, 0, 30);
- if (v > 30) v = 30;
- }
- break;
- case 2:
- {
- v += acceleration(gear, v, 25, 75);
- if (v > 75) v = 75;
- }
- break;
- case 3:
- {
- v += acceleration(gear, v, 60, 100);
- if (v > 100) v = 100;
- }
- break;
- case 4:
- {
- v += acceleration(gear, v, 100, 160);
- if (v > 160) v = 160;
- }
- break;
- case 5:
- {
- v += acceleration(gear, v, 160, 200);
- if (v > 200) v = 200;
- }
- break;
- }
- }
- else if (v > 0)
- {
- v -= v*0.00125;
- if(v < 0) v = 0;
- }
- else
- {
- v += 0.5;
- if(v > 0) v = 0;
- }
- switch(stanSygBieg)
- {
- case 1:
- {
- L2 = 0;
- biegCount = gear;
- if(biegCount)
- {
- timBieg = 2;
- stanSygBieg = 2;
- }
- else L2 = 1;
- }
- break;
- case 2:
- {
- L2 = 1;
- if(!timBieg && biegCount > 1) {stanSygBieg = 3; timBieg = 2; biegCount--;}
- else if(!timBieg && biegCount == 1) {stanSygBieg = 3; timBieg = 15; biegCount--;}
- }
- break;
- case 3:
- {
- L2 = 0;
- if(!timBieg && biegCount) {stanSygBieg = 2; timBieg = 2;}
- else if(!timBieg && !biegCount) stanSygBieg = 1;
- }
- break;
- }
- if(timAuto) --timAuto;
- if(timRefilTank) --timRefilTank;
- if(timTank) --timTank;
- if(timBieg) --timBieg;
- if(timSpeed) --timSpeed;
- }
- void przerwanie(void) // Obsługs przerwania od układu czasowo-licznikowego
- {}
- void komunikacja(void) // Obsługa komunikacji szeregowej
- {}
- #ifdef Symulator_PC
- void wykres(void) // Dane do tabeli i wykresu (dot. symulacji obiektu)
- {
- aTab[0] = (int)(AI[0]/10.0);
- aTab[1] = (int)(AI[1]/5.0);
- aTab[2] = AI[7];
- aTab[3] = (int)(licz/100.0);
- aTab[4] = AO[0];
- aTab[5] = AO[7];
- aTab[6] = -120;
- aTab[7] = 120;
- bTab[0] = (int)aK1;
- bTab[1] = (int)aK2;
- bTab[2] = (int)aK3;
- bTab[3] = (int)aK4;
- bTab[4] = (int)aK5;
- bTab[5] = (int)aK6;
- bTab[6] = (int)L1;
- bTab[7] = (int)L2;
- bTab[8] = (int)L3;
- bTab[9] = (int)L4;
- bTab[10] = (int)L5;
- bTab[11] = (int)L6;
- bTab[12] = 12;
- bTab[13] = 13;
- bTab[14] = 14;
- bTab[15] = 15;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement