Zamolio bih poznavatelje programiranja Arduino aplikacije da pogledaju ovaj Sketch i upute me gdje griješim. Naime želio bih napraviti napravu kojom bih mogao raditi slijedeće. Kad se preko tastature unese neki broj, isti je vidljiv na LCD-u. Kad se pritisne tipka 1,stepper motor napravi koraka koliko je određeno naredbom myStepper.step Unesena vrijednost mora ostati spremljena u EEPROM. Trenutno nije bitno da se kontra smijer upravlja sa vrijednostima sa tastature. Kontra smijer se može postavit programski i uvijek je isti.
(imajte u vidu da sam ja skoro šezdesetgodišnjak i da mnoge stvari mi nisu baš sjele).
platforma je ARDUINO UNO V.3
// program za pokretanje step motora napred nazad
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Stepper.h> //including stepper motor library
#include <EEPROM.h>
int button1Pin = A0; // (u ovoj verziji koda koristi se analogni ulaz kao digitalni)
int button2Pin = A1; // (u ovoj verziji koda koristi se analogni ulaz kao digitalni)
int stepIN1Pin = 10;
int stepIN2Pin = 13;
int stepIN3Pin = 12;
int stepIN4Pin = 11;
int stepsPerRevolution = 2060; // amount of steps per revolution
//char password[4];
char dist[4];
int j=0;
char customKey=0;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Stepper myStepper(stepsPerRevolution, stepIN2Pin, stepIN4Pin, stepIN3Pin, stepIN1Pin);
void setup(){
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
myStepper.setSpeed(15);
lcd.backlight();
lcd.init();
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
//lcd.clear();
lcd.setCursor(0,0);
// lcd.print(customKey);
for(int j=0;j<4;j++)
EEPROM.write(j,customKey);
for(int j=0;j<4;j++)
dist[j]=EEPROM.read(j);
//j=EEPROM.read(j);
lcd.print( dist[j]);
}
{
int button1State, button2State;
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
// for(int j=0;j<4;j++)
// dist[j]=EEPROM.read(j);
// lcd.clear();
// lcd.print( dist[j]);
if (((button1State == LOW) && !(button2State == LOW))) // if we're pushing button 1 OR button 2
myStepper.step(-stepsPerRevolution* dist[j]); // ova naredba ne radi motor se uvijek vrti 10 revolucija bez obzira na vrijednost tastature
// myStepper.step(stepsPerRevolution*2); // ova naredba radi ali ne očitava vrijednost sa tastature
if (((button2State == LOW) && !(button1State == LOW))) // if we're pushing button 1 OR button 2
myStepper.step(-stepsPerRevolution/2);
}
}