Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * *******STEROWNIK**LEWAROW*******
- *
- * by MILKI
- *
- */
- #define relay1_up 0
- #define relay1_down 1
- #define relay2_up 2
- #define relay2_down 3
- #define switchUp 8
- #define switchDown 9
- #define buzzer 7
- float sensor1 = A0; //pin czujnika 1
- float sensor2 = A1; //pin czujnika 2
- float sens1; //czujnik 1
- float sens2; // czujnik 2
- float val1; // wartosc obliczona na wolty z czujnika 1
- float val2; // wartosc obliczona na wolty z czujnika 2
- bool permitUp = false; //zezwolenie jazdy do góry
- bool permitDown = false; //zezwolenie jazdy w dół
- //bool controlUp;
- //bool controlDown;
- bool checkingOutputsStatus; //sprawdzanie stanu wyjsc
- bool autoLevelingPlus = false; //roznica poza gorna tolerancja
- bool autoLevelingMinus = false; //roznica poza dolna tolerancja
- bool directionUp; //jesli wartosc poza tolerancja pokazuje kierunek jazdy w gore
- bool directionDown; //jesli wartosc poza tolerancja pokazuje kierunek jazdy w dol
- bool stopUp; //żądanie zatrzymania silnikow w gore
- bool stopDown; //żądanie zatrzymania silnikow w doł
- bool changeBuzzer;
- float tolerancePlus = 0.10; //tolerancja miedzy czunikami na plus
- float toleranceMinus = -0.10; //tolerancja miedzy czujnikami na minus
- float aligmentLevelingPlus = 0.10; //wartos o jaka ma sie wyrownac po osiagnieciu gornej tolerancji
- float aligmentLevelingMinus = -0.10; //wartosc o jaka ma sie wyrownac po osiagnieciu dolnej tolerancji
- float result; //roznica warotsci czujnikow
- unsigned long newTime;
- unsigned long oldTime;
- void setup() {
- Serial.begin(9600);
- pinMode(relay1_up, OUTPUT);
- pinMode(relay2_up, OUTPUT);
- pinMode(relay1_down, OUTPUT);
- pinMode(relay2_down, OUTPUT);
- pinMode(switchUp, INPUT_PULLUP);
- pinMode(switchDown, INPUT_PULLUP);
- pinMode(sensor1, INPUT);
- pinMode(sensor2, INPUT);
- pinMode(relay1_up, HIGH);
- pinMode(relay2_up, HIGH);
- pinMode(relay1_down, HIGH);
- pinMode(relay2_down, HIGH);
- }
- void loop() {
- checkingOutputs(); //sprawdzanie stanu wyjjsc
- /* sens1 = analogRead(sensor1);
- sens2 = analogRead(sensor2);
- val1 = (sens1 / 204.6);
- val2 = (sens2 / 204.6);
- result = (val1 - val2);
- Serial.print("sensor1 ");
- Serial.print(val1);
- Serial.print(" volt ");
- Serial.print("sensor2 ");
- Serial.print(val2);
- Serial.print(" volt ");
- Serial.print("roznica");
- Serial.println(result);
- */
- if ((digitalRead(switchUp) == LOW) && (checkingOutputsStatus == false)) {
- delay(10);
- stopUp = false;
- permitUp = true; //jazda w gore
- permitDown = false;
- liftUp();
- checkingOutputs();
- }
- else if ((digitalRead(switchDown) == LOW) && (checkingOutputsStatus == false)) {
- delay(10);
- stopDown = false;
- permitUp = false; //jazda w dol
- permitDown = true;
- liftDown();
- checkingOutputs();
- }
- else {
- motorsStop(); //wylaczenie silnikow
- }
- }
- void waringSoundAutoLeveling() {
- newTime = millis();
- if ((newTime - oldTime) >= 100) {
- changeBuzzer = !changeBuzzer;
- if (changeBuzzer == 1) { //ostrzezenie o autopoziomowaniu
- tone(buzzer, 2700);
- }
- else {
- noTone(buzzer);
- }
- oldTime = newTime;
- }
- }
- void motorsStop() {
- if (digitalRead(switchUp) == HIGH) {
- digitalWrite(relay1_up, HIGH);
- digitalWrite(relay2_up, HIGH);
- autoLevelingPlus = false;
- autoLevelingMinus = false;
- directionUp = false;
- directionDown = false;
- stopUp = true;
- }
- if (digitalRead(switchDown) == HIGH) {
- digitalWrite(relay1_down, HIGH);
- digitalWrite(relay2_down, HIGH);
- autoLevelingPlus = false;
- autoLevelingMinus = false;
- directionUp = false;
- directionDown = false;
- stopDown = true;
- }
- }
- int autoLeveling() { //ta funkcja odpowiada za wyrownanie podnosikow w zaleznosci od kierunku jazdy i ktory podnosnik sie spoznia
- if (autoLevelingPlus == true) {
- if (directionUp == true) {
- while (stopUp == false) {
- digitalWrite(relay1_up, HIGH);
- digitalWrite(relay2_up, LOW);
- motorsStop();
- sensorReading();
- waringSoundAutoLeveling();
- if ((result + aligmentLevelingPlus) < tolerancePlus) {
- directionUp = false;
- return;
- }
- }
- }
- if (directionDown == true) {
- while (stopDown == false) {
- digitalWrite(relay1_down, LOW);
- digitalWrite(relay2_down, HIGH);
- motorsStop();
- sensorReading();
- waringSoundAutoLeveling();
- if ((result + aligmentLevelingPlus) < tolerancePlus) {
- directionDown = false;
- return;
- }
- }
- }
- }
- else if (autoLevelingMinus == true) {
- if (directionUp == true) {
- while (stopUp == false) {
- digitalWrite(relay1_up, LOW);
- digitalWrite(relay2_up, HIGH);
- motorsStop();
- sensorReading();
- waringSoundAutoLeveling();
- if ((result + aligmentLevelingMinus) > toleranceMinus) {
- directionUp = false;
- return;
- }
- }
- }
- else if (directionDown == true) {
- while (stopDown == false) {
- digitalWrite(relay1_down, HIGH);
- digitalWrite(relay2_down, LOW);
- motorsStop();
- sensorReading();
- waringSoundAutoLeveling();
- if ((result + aligmentLevelingMinus) > toleranceMinus) {
- directionDown = false;
- return;
- }
- }
- }
- }
- autoLevelingPlus = false;
- autoLevelingMinus = false;
- return;
- }
- int liftUp() { //funkcja podnoszenia
- while (permitUp == true) {
- sensorReading(); //odczyt z czujnikow jesli bedzie poza tolerancja wywali blad
- while ((autoLevelingPlus == true) || (autoLevelingMinus == true)) {
- directionUp = true;
- autoLeveling(); //wyrownanie
- }
- noTone(buzzer);
- digitalWrite(relay1_up, LOW);
- digitalWrite(relay2_up, LOW);
- if (digitalRead(switchUp) == LOW) {
- delay(10);
- permitUp = true;
- }
- else {
- permitUp = false;
- }
- }
- digitalWrite(relay1_up, HIGH);
- digitalWrite(relay2_up, HIGH);
- delay(2000); //czas na zatrzymanie sie silnikow
- }
- void liftDown() { //to samo co liftUp lecz w dol
- while (permitDown == true) {
- sensorReading();
- while ((autoLevelingPlus == true) || (autoLevelingMinus == true)) {
- directionDown = true;
- autoLeveling();
- }
- noTone(buzzer);
- digitalWrite(relay1_down, LOW);
- digitalWrite(relay2_down, LOW);
- if (digitalRead(switchDown) == LOW) {
- delay(10);
- permitDown = true;
- }
- else {
- permitDown = false;
- }
- }
- digitalWrite(relay1_down, HIGH);
- digitalWrite(relay2_down, HIGH);
- delay(2000);
- }
- int checkingOutputs() { //sprawdzanie stanu wyjsc zabezpieczenie przed wlaczeniem drugiego kierunku keidy jeden jest wlaczony
- if ((digitalRead(relay1_up) == LOW) && (digitalRead(relay2_up) == LOW)) {
- checkingOutputsStatus = true;
- return checkingOutputsStatus;
- }
- else if ((digitalRead(relay1_down) == LOW) && (digitalRead(relay2_down) == LOW)) {
- checkingOutputsStatus = true;
- return checkingOutputsStatus;
- }
- else {
- checkingOutputsStatus = false;
- return checkingOutputsStatus;
- }
- }
- int sensorReading() { //odczyt z czujikow i porownanie oraz informacja zwrotna czy jest powyzej czy ponizej tolerancji
- sens1 = analogRead(sensor1);
- sens2 = analogRead(sensor2);
- val1 = (sens1 / 204.6);
- val2 = (sens2 / 204.6);
- result = (val1 - val2);
- Serial.print("sensor1 ");
- Serial.print(val1);
- Serial.print(" volt ");
- Serial.print("sensor2 ");
- Serial.print(val2);
- Serial.print(" volt ");
- Serial.print("roznica");
- Serial.println(result);
- if (result >= tolerancePlus) {
- autoLevelingPlus = true;
- return autoLevelingPlus;
- }
- else if (result < toleranceMinus) {
- autoLevelingMinus = true;
- return autoLevelingMinus;
- }
- else {
- autoLevelingPlus = false;
- autoLevelingMinus = false;
- }
- }
- //**********KONIEC**PROGRAMU**********
Add Comment
Please, Sign In to add comment