• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
działanie kodu w pro mini
#1
Witam, stworzyłem mały projekt sterownika do maszyny którego zadaniem jest sterownie ręczne poprzez przyciski oraz możliwość załączenia sterownika w tryb auto i wtedy sterownik sam bez mojej ingerencji steruje maszyną, całość zwieńczona LCD z inormacjami o stanie sterownika
Projekt zrobiłem na UNO 3, ale nie chce jej pakować do pudełka , tylko dać kod do Pro Mini i go zostawić. Niestety jest mały problem z kodem na Uno działał idealnie tak jak chciałem,ale na Pro Mini już robi bzdury.Nie wiem czemu tak się dzieje, czy to nie wina tych  INPUT_PULLUP ?
tak to wygląda :
Kod:
// od 3 do 8 podłączone 2 przekaźniki 5V 3 przyciki,i 2 krańcówki
#define kr1 12
#define kr2 13 //poodłączone dodatkowe rzeczy
#define przyciskL 8
#define startStop 7
#define przyciskP 6
#define przekaznik1 4 // przekaźnik1
#define przekaznik2 3 //przekaźnik2

#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  

boolean kierunek = false;  //false {LEWO}; true {PRAWO}
boolean tryb = true; //false {tryb AUTOMAT}; true {tryb RECZNY}


void setup() {
 lcd.init();

 pinMode(przekaznik1, OUTPUT);
 pinMode(przekaznik2, OUTPUT);
 digitalWrite(przekaznik1, HIGH); //wyłączenie "przekaźników" -
 digitalWrite(przekaznik2, HIGH);
 


 pinMode(kr1, INPUT_PULLUP); //
 pinMode(kr2, INPUT_PULLUP); //  
 pinMode(przyciskL, INPUT_PULLUP);
 pinMode(startStop, INPUT_PULLUP);
 pinMode(przyciskP, INPUT_PULLUP);
}

void wylacznikKrancowyP() {
 if (digitalRead(kr1) == LOW) {
   delay(100); //debounce
   if (digitalRead(kr1) == LOW) {
     for (int i = 1; i < 10; i++) {      //sygnalizacja zadziałania wyłącznika krańcowego
       digitalWrite(przekaznik2, HIGH);  //w rzeczywistym programie byłoby to bez sensu  
       digitalWrite(przekaznik2, LOW);  
     }
   
     kierunek = false;
     digitalWrite(przekaznik2, HIGH); //WYLACZ PRZEKAZNIK 2
   delay(500);
     digitalWrite(przekaznik1, LOW); //włącz przekaźnik 1
   }
 }
}
void wylacznikKrancowyL() {
 if (digitalRead(kr2) == LOW) {
   delay(100); //debounce
   if (digitalRead(kr2) == LOW) {
      for (int i = 1; i < 10; i++) {      //sygnalizacja zadziałania wyłącznika krańcowego
       digitalWrite(przekaznik1, HIGH);  //w rzeczywistym programie byłoby to bez sensu
       digitalWrite(przekaznik1, LOW);
     
     }      
   
     kierunek = true;
       digitalWrite(przekaznik1, HIGH); //wyłącz przekaźnik 1
       delay(500);
        digitalWrite(przekaznik2, LOW); //WLACZ PRZEKAZNIK 2
   
   }
 }
}
void trybAutomatycznyLCD() {
 lcd.setCursor(0, 0);
 lcd.print("    AUTOMAT ");
}
void kierunekLewoLCD() {
 lcd.setCursor(0, 1);
 lcd.print("[LEWO          ]");
}
void trybRecznyLCD() {
 lcd.setCursor(0, 0);
 lcd.print("    RECZNY ");
}
void kierunekPrawoLCD() {
 lcd.setCursor(0, 1);
 lcd.print("[         PRAWO]");
}

void przekaznikiStopLCD() {
 lcd.setCursor(0, 1);
 lcd.print("[              ]");
}
void wlaczPrzekaznik1() {
 digitalWrite(przekaznik1, LOW);  
 digitalWrite(przekaznik2, HIGH);
}
void wlaczPrzekaznik2() {
 digitalWrite(przekaznik1, HIGH);
 digitalWrite(przekaznik2, LOW);
}
void przekaznikiStop() {
 digitalWrite(przekaznik1, HIGH);
 digitalWrite(przekaznik2, HIGH);
}

void loop() {
 if (digitalRead(startStop) == LOW) {
   delay(100);
   if (digitalRead(startStop) == LOW) {
     if (tryb == true) {         //jeżeli przed wcisnieciem, był tryb ręczny
       tryb = false;     //przełącz na automat
       kierunek = false; //w automacie ruszaj w lewo
       trybAutomatycznyLCD();
     } else {
       tryb = true;
       trybRecznyLCD();
     }
   }
   delay(200);
 }
 
wylacznikKrancowyL(); //sprawdzenie, czy wylacznik krancowy nie jest wlaczony
wylacznikKrancowyP();

if (tryb == false && kierunek == false) {
 trybAutomatycznyLCD();
 kierunekLewoLCD();
 wlaczPrzekaznik1();  
} else if (tryb == false && kierunek == true) {
 trybAutomatycznyLCD();
 kierunekPrawoLCD();
 wlaczPrzekaznik2();
} else if (tryb == true) {
 if (digitalRead(przyciskL) == LOW && digitalRead(przyciskP) == HIGH) {
 trybRecznyLCD();
 kierunekLewoLCD();
 wlaczPrzekaznik1();  
 } else if (digitalRead(przyciskL) == HIGH && digitalRead(przyciskP) == LOW) {
 trybRecznyLCD();
 kierunekPrawoLCD();
 wlaczPrzekaznik2();    
 } else {
 trybRecznyLCD();
 przekaznikiStopLCD();
 przekaznikiStop();
 }
}
}
 
Odpowiedź
  


Wiadomości w tym wątku
działanie kodu w pro mini - przez zbyszko125 - 20-05-2018, 17:59
RE: działanie kodu w pro mini - przez kaczakat - 20-05-2018, 18:56
RE: działanie kodu w pro mini - przez zbyszko125 - 20-05-2018, 22:47
RE: działanie kodu w pro mini - przez kaczakat - 21-05-2018, 00:44
RE: działanie kodu w pro mini - przez zbyszko125 - 01-06-2018, 16:02
RE: działanie kodu w pro mini - przez kaczakat - 02-06-2018, 07:07
RE: działanie kodu w pro mini - przez zbyszko125 - 08-06-2018, 15:13
RE: działanie kodu w pro mini - przez kaczakat - 08-06-2018, 15:20
RE: działanie kodu w pro mini - przez zbyszko125 - 08-06-2018, 15:26

Skocz do:


Przeglądający: 2 gości