#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int stepPin = 6;
const int dirPin = 7;
const int Ena = 8;
const int stepPin2 = 9;
const int dirPin2 = 10;
const int Ena2 = 11;
const int buttonPin1 = 5;
const int buttonPin2 = 4;
const int buttonPin3 = 3;
const int buttonPin4 = 2;
const int ledPin = 13;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int POS[50];
int CC=1;
int DT=5;//ระยะห่างตั้งต้น
int Max=0;//ค่ามากสุด
int Step=0;
int AA=0;
void setup()
{
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.print("TF, Robot");
pinMode(ledPin, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(Ena,OUTPUT);
digitalWrite(ledPin, HIGH);
delay(1000);
LCD();
}
void loop()
{
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
if (buttonState1 == LOW&&Step==0) ///ลด
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
DT--;
LCD();
}
else if (buttonState2 == LOW&&Step==0) ///เพิ่ม
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
DT++;
LCD();
}
else if (buttonState3 == LOW&&Step==0) ///ถัดไป
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
POS[CC]=DT;
CC++;
Max=CC;
LCD();
}
else if (buttonState4 == LOW&&Step==0) ///เริ่ม
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
digitalWrite(Ena,LOW);
Step=1;
CC=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GOTO Start");
}
else if (buttonState4 == LOW&&Step>0) ///หยุด
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
}
else if(Step==1)
{
BK();
}
else if(Step==2)
{
GO();
}
else if(Step==3)
{
END();
}
else if(Step==4)
{
GOhome();
}
else
{
digitalWrite(ledPin, HIGH);
digitalWrite(Ena,HIGH);
digitalWrite(stepPin,HIGH);
digitalWrite(dirPin,HIGH);
}
}
/////////////////-------------------------------------
void GO()
{
if(Max==CC)
{
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
Step++;
LCD();
}
//////////------------------------------------------
else if(AA==(POS[CC]*500))
{
CC++;
AA=0;
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
LCD();
JO();
}
//////////-------------------------------------------
else
{
digitalWrite(dirPin,LOW);///หมุนกลับ
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
AA++;
}
}
void BK()
{
int sensorValue = analogRead(A0);
if(sensorValue<=10)
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
Step++;
LCD();
}
else
{
digitalWrite(dirPin,HIGH);
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
void Print()
{
Serial.print("step= ");
Serial.print(CC);
Serial.print(" POS= ");
Serial.print(DT);
Serial.println();
}
void LCD()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("STEP=");
lcd.print(CC);
lcd.setCursor(8,0);
lcd.print("POS=");
lcd.print(AA);
// lcd.blink();
lcd.setCursor(0,1);
lcd.print(DT);
lcd.print(", CM");
lcd.setCursor(8,1);
lcd.print("STEP=");
lcd.print(Step);
}
void GOhome()
{
int sensorValue1 = analogRead(A1);
if(sensorValue1<=10)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GO home");
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
Step=0;
LCD();
}
else
{
digitalWrite(dirPin,LOW);//ok
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
}
}
void END()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("OK-END");
delay(2000);
Step++;
}
void JO()
{
digitalWrite(dirPin2,LOW);
for(int x = 0; x < 1000; x++)
{
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
delay(2000); // One second delay
digitalWrite(dirPin2,HIGH); //Changes the direction of rotation
for(int x = 0; x < 1000; x++)
{
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
delay(2000);
}
/////////////----------------------------งานประดิษฐ์
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int stepPin = 6;
const int dirPin = 7;
const int Ena = 8;
const int stepPin2 = 9;
const int dirPin2 = 10;
const int Ena2 = 11;
const int buttonPin1 = 5;
const int buttonPin2 = 4;
const int buttonPin3 = 3;
const int buttonPin4 = 2;
const int ledPin = 13;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int POS[50];
int CC=1;
int DT=5;//ระยะห่างตั้งต้น
int Max=0;//ค่ามากสุด
int Step=0;
int AA=0;
void setup()
{
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.print("TF, Robot");
pinMode(ledPin, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(Ena,OUTPUT);
digitalWrite(ledPin, HIGH);
delay(1000);
LCD();
}
void loop()
{
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
if (buttonState1 == LOW&&Step==0) ///ลด
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
DT--;
LCD();
}
else if (buttonState2 == LOW&&Step==0) ///เพิ่ม
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
DT++;
LCD();
}
else if (buttonState3 == LOW&&Step==0) ///ถัดไป
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
POS[CC]=DT;
CC++;
Max=CC;
LCD();
}
else if (buttonState4 == LOW&&Step==0) ///เริ่ม
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
digitalWrite(Ena,LOW);
Step=1;
CC=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GOTO Start");
}
else if (buttonState4 == LOW&&Step>0) ///หยุด
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
}
else if(Step==1)
{
BK();
}
else if(Step==2)
{
GO();
}
else if(Step==3)
{
END();
}
else if(Step==4)
{
GOhome();
}
else
{
digitalWrite(ledPin, HIGH);
digitalWrite(Ena,HIGH);
digitalWrite(stepPin,HIGH);
digitalWrite(dirPin,HIGH);
}
}
/////////////////-------------------------------------
void GO()
{
if(Max==CC)
{
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
Step++;
LCD();
}
//////////------------------------------------------
else if(AA==(POS[CC]*500))
{
CC++;
AA=0;
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
LCD();
JO();
}
//////////-------------------------------------------
else
{
digitalWrite(dirPin,LOW);///หมุนกลับ
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
AA++;
}
}
void BK()
{
int sensorValue = analogRead(A0);
if(sensorValue<=10)
{
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
Step++;
LCD();
}
else
{
digitalWrite(dirPin,HIGH);
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
void Print()
{
Serial.print("step= ");
Serial.print(CC);
Serial.print(" POS= ");
Serial.print(DT);
Serial.println();
}
void LCD()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("STEP=");
lcd.print(CC);
lcd.setCursor(8,0);
lcd.print("POS=");
lcd.print(AA);
// lcd.blink();
lcd.setCursor(0,1);
lcd.print(DT);
lcd.print(", CM");
lcd.setCursor(8,1);
lcd.print("STEP=");
lcd.print(Step);
}
void GOhome()
{
int sensorValue1 = analogRead(A1);
if(sensorValue1<=10)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GO home");
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
Step=0;
LCD();
}
else
{
digitalWrite(dirPin,LOW);//ok
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
}
}
void END()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("OK-END");
delay(2000);
Step++;
}
void JO()
{
digitalWrite(dirPin2,LOW);
for(int x = 0; x < 1000; x++)
{
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
delay(2000); // One second delay
digitalWrite(dirPin2,HIGH); //Changes the direction of rotation
for(int x = 0; x < 1000; x++)
{
digitalWrite(stepPin2,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin2,LOW);
delayMicroseconds(500);
}
delay(2000);
}