So! Now I know how to post the pictures correctly. Sorry for that!
Here is the code, sorry its not in english.
So in short, it counts all the pulses the motor spins, wich is displayed on the LCD (I2C - 2x16).
It has button for turning at one or another direction.
It has a H-bridge for the 12V motor.
I want to save the position, so that when the motor is going by this position again it stops.
// ---- MOTOR CONST INTARNA ----
const int controlPin1 = 7;
const int controlPin2 = 6;
const int enablePin = 9;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// DESSA TILLHÖR GRAFIK O PULSRÄKNINGEN
char lineText[]=" Hoy! Denna text syns ingenstans. ";
int sensor01;
int sensor02;
int stepOld;
int step;
long PulseCount;
// ---- MOTOR TEST INT ---------------------------------------------------------------------------------
int intest1Pin = 4; // KNAPP 1 - Kabel GRÅ - Går åt plus hållet - UPP
int intest2Pin = 5; // KNAPP 2 - Kabel GRÖN - Går åt minus hållet - NER
int intest3Pin = 10; // KNAPP 3 - Kabel SVART - Ej något än
int intest4Pin = 11; // KNAPP 4 - Kabel BLÅ - Ej något än
int stopsensor2Pin = 8; // SENSOR - Kabel GRÅ - Enskild sensor - UPP STOPP
int stopsensor1Pin = 12; // SENSOR - Kabel GRÖN - Enskild sensor - NER STOPP
int val = 0;
int tonePin = 13; // --- BEEPER ---
// DESSA TILLHÖR GRAFIK O PULSRÄKNINGEN - I2C
// initialize the library with the numbers of the interface pins
// 0x27 adressen hittades via I2C scanner på den med svart tejp - De andra hade 0x3F
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Aktivera denna rad, och av-avaktivera den ovanför, om någon av de andra I2C displayerna ska användas
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// DESSA TILLHÖR GRAFIK O PULSRÄKNINGEN
#define SENSOR_A 3
#define SENSOR_B 2
void checkState()
{
sensor01 = digitalRead(SENSOR_A);
sensor02 = digitalRead(SENSOR_B);
if(sensor01 == 1 && sensor02 == 1){
step = 0;
if(stepOld == 1){
PulseCount--;
}
if(stepOld == 3){
PulseCount++;
}
stepOld = 0;
}
if(sensor01 == 0 && sensor02 == 1){
step = 1;
if(stepOld == 2){
PulseCount--;
}
if(stepOld == 0){
PulseCount++;
}
stepOld = 1;
}
if(sensor01 == 0 && sensor02 == 0){
step = 2;
if(stepOld == 3){
PulseCount--;
}
if(stepOld == 1){
PulseCount++;
}
stepOld = 2;
}
if(sensor01 == 1 && sensor02 == 0){
step = 3;
if(stepOld == 0){
PulseCount--;
}
if(stepOld == 2){
PulseCount++;
}
stepOld = 3;
}
}
// VOID SETUP - KÖRS BARA EN GÅNG I BÖRJAN, EN FÖRBEREDELSE, LOOP ÄR EXEKVERING OCH GÖR DET MESTA JOBBET
// DESSA TILLHÖR GRAFIK O PULSRÄKNINGEN
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
attachInterrupt(0, checkState, CHANGE);
attachInterrupt(1, checkState, CHANGE);
PulseCount = 0;
// TEST MOTOR - VOID SETUP ---------------------------------------------------------------------------------
pinMode(intest1Pin, INPUT); //Declarar denna som input UNO input är 4 Knapp 1 Grå UPP
pinMode(intest2Pin, INPUT); //Declarar denna som input UNO input är 5 Knapp 2 Grön NER
pinMode(intest3Pin, INPUT); //Declarar denna som input UNO input är 10 Knapp 3 Svart Ej något än
pinMode(intest4Pin, INPUT); //Declarar denna som input UNO input är 11 Knapp 4 Blå Ej något än
pinMode(stopsensor1Pin, INPUT); //Declarar denna som input UNO input är 12 grön
pinMode(stopsensor2Pin, INPUT); //Declarar denna som input UNO input är 8 grå
// Högtalare
pinMode(tonePin, OUTPUT);
// ---- LCD start presentationen
{
lcd.setCursor(2, 0);
lcd.print("PROTOTYPE");
delay(500);
// lcd.clear();
lcd.setCursor(11, 1);
lcd.print("9");
delay(100);
lcd.setCursor(11, 1);
lcd.print("90");
delay(100);
lcd.setCursor(11, 1);
lcd.print("90E");
delay(900);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Prototype 1.0");
delay(200);
lcd.setCursor(0, 1);
lcd.print("www.");
delay(100);
lcd.setCursor(12, 1);
lcd.print(".se");
delay(100);
lcd.setCursor(0, 1);
lcd.print("www.PROTOTYPE.se");
delay(250);
lcd.setCursor(0, 1);
lcd.print("www.PROTOTYPE.se");
delay(800);
lcd.clear();
}
}
void loop()
{
// DESSA TILLHÖR GRAFIK O PULSRÄKNINGEN
// LCD set the cursor to column 0, line 1 (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
lcd.print("Pulses:");
if(PulseCount > -1){
lcd.print(" ");
}
if(PulseCount < 10 && PulseCount > -10){
lcd.print(" ");
}
if(PulseCount < 100 && PulseCount > -100){
lcd.print(" ");
}
lcd.print(PulseCount);
if(sensor01 == 1){
lcd.print(" HIGH");
}
else{
lcd.print(" LOW ");
}
lcd.setCursor(0, 1);
if(sensor02 == 1){
lcd.print(" HIGH");
}
else{
lcd.print(" LOW ");
}
// ---- MOTORNS VOID LOOP - KNAPPSTYRNINGEN TILL MOTORERNA ----
// intest 1 ÅKER UPP
// intest 2 ÅKER NER
// stopsensor1Pin heter stoppsensorn som hindrar UPP
// stopsensor2Pin heter stoppsensorn som hindrar NED
{
// ---- ÅKER UPP ----
val = digitalRead(intest1Pin); // UPP - Läser input värde
if (val == HIGH) // Checkar om knappen trycks
{
digitalWrite(controlPin1, HIGH);
digitalWrite(controlPin2, LOW);
// -- Detta är sensorn som, om täcks, hindrar motorn från att åka ner
{
val = digitalRead(stopsensor2Pin); // Sensorn som stoppar motorn
if (val == HIGH) {
digitalWrite(controlPin1, LOW);
// -- Dessa 3 rader visar STOP när sensorn stoppar nedgång - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
lcd.setCursor(0, 1);
lcd.print("STOP");
delay(50);
// -- Dessa tre rader nedanför gör pipljudet när stopsensorn (ovan) täcks
tone(tonePin, 880, 125);
delay(650);
noTone(tonePin);
}
// -- Dessa 3 rader visar text när nedåtknapp trycks NED - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
lcd.setCursor(0, 1);
lcd.print("Up");
delay(50);
}
}
// ---- ÅKER NER ----
else {
val = digitalRead(intest2Pin); // NER - Läser input värde
if (val == HIGH) { // Checkar om knappen trycks
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);
// -- Detta är sensorn som, om täcks, hindrar motorn från att åka ner
{
val = digitalRead(stopsensor1Pin); // Sensorn som stoppar motorn
if (val == HIGH) {
digitalWrite(controlPin2, LOW);
// -- Dessa 3 rader visar STOP när sensorn stoppar nedgång - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
lcd.setCursor(0, 1);
lcd.print("STOP");
delay(50);
// -- Dessa tre rader nedanför gör pipljudet när stopsensorn (ovan) täcks
tone(tonePin, 880, 125);
delay(650);
noTone(tonePin);
}
// -- Dessa 3 rader visar DOWN när nedåtknapp trycks NED - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
lcd.setCursor(0, 1);
lcd.print("Down");
delay(50);
}
// -- Dessa två rader stoppar motorn när man släpper knappen
} else
{
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW);
}
}
}
}