Академический Документы
Профессиональный Документы
Культура Документы
h>
#include <math.h>
//includes
#include <TimerOne.h>
#include <Encoder.h>
#include <EEPROMex.h>
#include <EEPROMVar.h>
#include <Keypad.h>;
#include <LiquidCrystal.h>;
//defines za kasnije
#define s_kal 0; // indeks bita za kalibraciju
#define s_sp 1; // indeks bita za serijski port
#define s_kp 2; // indeks bita za tasteturu
//enumeracija pinova za enkoder
byte encoderPinA = 21; // A pin enkodera
byte encoderPinB = 20; // B pin enkodera
byte pp = 17; // pin koji povecava pulseve
byte pm = 16; // pin koji smanjuje pulseve
byte btnpp = 3;
byte btnpm = 2;
byte kalibracija = 19;
boolean atw=true;
boolean kalibracijautoku=false;
int greska = 0; // greska za algoritam voznje motora
String lnumber; //za displej broja ukucanog
String number; // broj koji ukucamo na tasteturi u obliku stringa
Encoder Enc(encoderPinB,encoderPinA);
int ppm_addr;
int pulses_addr;
int dpos=4;
long mpulses;
int ppm=1574;
long tempPulses; //varijabla za skladistenje pulseva prilikom nekih algoritamski
h mjerenja
volatile long pulses; // trenutni pulsevi
boolean A_set = false; //stanje na a
boolean B_set = false; //stanje na b
const byte ROWS = 4; //redovi matrice keypada
const byte COLS = 3; //kolone matrice keypada
char keys[ROWS][COLS] = { //char array za karaktere na keypadu
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {53, 52, 51, 50}; //pinovi redova keypada
byte colPins[COLS] = {49,47, 45}; //pinovi kolona keypada
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
lcd.print(round(pulses/ppm));
dpos=round((float)pulses/ppm);
lnumber=number;
}
}
void keyp(){
char key = keypad.getKey();
if (key != NO_KEY){
if(key=='#'){
gettopos(number.toInt());
}else{
if(key != '*'){
number = number+key;
}
}
}
}
void kal(){
float pv,dv;
Serial.println("Kalibracija...");
Serial.println("Izmjeriti od nule");
while(!Serial.available());
if(Serial.available()>0){
String msg = Serial.readStringUntil(';');
char floatbuf[32]; // make this at least big enough for the whole string
msg.toCharArray(floatbuf, sizeof(floatbuf));
pv = atof(floatbuf);
}
long curpulses=pulses;
Serial.println("Cekam da pritisnete dugme");
while(digitalRead(btnpm)==true && digitalRead(btnpp)==true);
Serial.println("Sada ga pusite nakon odredjenog vremena");
while(digitalRead(btnpm)==false || digitalRead(btnpp)==false);
Serial.println("Izmjerite ponovo");
while(!Serial.available());
if(Serial.available()>0){
String msg = Serial.readStringUntil(';');
char floatbuf[32]; // make this at least big enough for the whole string
msg.toCharArray(floatbuf, sizeof(floatbuf));
dv = atof(floatbuf);
}
ppm=abs(abs(pulses-curpulses)/abs(dv-pv));
EEPROM.updateInt(ppm_addr,ppm);
Serial.println("Kalibracija zavrsena");
Serial.println(String(ppm) + " ppm");
Enc.write(ppm*dv);
kalibracijautoku=false;
delay(200);
}
void kalpointer(){
if(!kalibracijautoku){
if(!digitalRead(kalibracija)){
kalibracijautoku=true;
}
}
}
void btnpm_promjena() {
if (atw) {
if (!digitalRead(btnpm)) {
digitalWrite(pm,1);
} else {
digitalWrite(pm,0);
}
}
}
void btnpp_promjena() {
if (atw) {
if (!digitalRead(btnpp)) {
digitalWrite(pp,1);
} else {
digitalWrite(pp,0);
}
}
}
void chs() {
if (Serial.available() > 0) {
String msg = Serial.readStringUntil(';');
if(msg == "null"){
EEPROM.updateLong(pulses_addr,0);
pulses=0;
greska=0;
Enc.write(0);
}else{
long i = msg.toInt();
gettopos(i);
}
}
}