Académique Documents
Professionnel Documents
Culture Documents
7 KB
/*
Made for:
Arduino 0023 software
Arduino Mega 2560
Serial LCD 1602
IR remodecontroll
Servo shild V5
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
int MenyValg = 0;
int MenyValgOld = 1;
int ServoValg = 1;
int ServoValgOld = 1;
int ServoValue = 512;
int MenyValgAntall = 15; // Antall poster i Preference arr
int MenyHigh = 0;
int Servo1Value[] =
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512};
int Servo2Value[] =
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512};
int Servo3Value[] =
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512};
int Servo4Value[] =
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512};
int Servo5Value[] =
{512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512};
void setup()
{
unsigned char i;
pinMode(IR_IN,INPUT);//Set the infrared receiver input pin
lcd.setCursor(0, 1);
lcd.print("booting");
timer1_init();//Timer initialization
}
void loop()
{
if (running == true) {
MenyValg++;
if (MenyValg>MenyHigh) {MenyValg = 0;}
SetServoStepAnim();
}
remote_decode(); //Decoding
remote_deal(); //Perform decoding results
MenuCase();
MenuLCD();
ServoLCD();
//SerialStatus();
if (PreferenceValue[0] == 1) {
digitalWrite(13, HIGH);
if (MenyValg == 0) {
lcd.setCursor(12, 0);
}
delay(50);
digitalWrite(13, LOW);
}
}
}
void SerialStatus() {
Serial.print("0-");
Serial.print(Servo1Value[0]);
Serial.print("-");
Serial.print(Servo2Value[0]);
Serial.print("-");
Serial.print(Servo3Value[0]);
Serial.print("-");
Serial.print(Servo4Value[0]);
Serial.print("-");
Serial.println(Servo5Value[0]);
Serial.print("1-");
Serial.print(Servo1Value[1]);
Serial.print("-");
Serial.print(Servo2Value[1]);
Serial.print("-");
Serial.print(Servo3Value[1]);
Serial.print("-");
Serial.print(Servo4Value[1]);
Serial.print("-");
Serial.println(Servo5Value[1]);
}
void MenuLCD() {
lcd.setCursor(0, 0);
lcd.print("Step ");
lcd.setCursor(5, 0);
lcd.print(MenyValg);
}
void ServoLCD() {
lcd.setCursor(0, 1);
lcd.print("Servo ");
lcd.setCursor(6, 1);
lcd.print(ServoValg);
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
LoadServoValue();
lcd.print(ServoValue);
}
int LoadServoValue() {
if (MenyValg>MenyHigh) {// Copy last step position
Servo1Value[MenyValg] = Servo1Value[MenyHigh];
Servo2Value[MenyValg] = Servo2Value[MenyHigh];
Servo3Value[MenyValg] = Servo3Value[MenyHigh];
Servo4Value[MenyValg] = Servo4Value[MenyHigh];
Servo5Value[MenyValg] = Servo5Value[MenyHigh];
MenyHigh = MenyValg;
switch (ServoValg) {
case 1:
ServoValue = Servo1Value[MenyValg];
break;
case 2:
ServoValue = Servo2Value[MenyValg];
break;
case 3:
ServoValue = Servo3Value[MenyValg];
break;
case 4:
ServoValue = Servo4Value[MenyValg];
break;
case 5:
ServoValue = Servo5Value[MenyValg];
break;
}
void SetServoStepAnim() {
ServoLCD();
for (a = 0; a < aminStep; a++) {
ServoValue = map(a, 0, aminStep, Servo1ValueOld, Servo1Value[MenyValg]);
ServoValue = map(ServoValue, 0, 1023, 179, 0);
myservo1.write(ServoValue);
AnimatioLCD(a);
Servo1ValueOld = Servo1Value[MenyValg];
Servo2ValueOld = Servo2Value[MenyValg];
Servo3ValueOld = Servo3Value[MenyValg];
Servo4ValueOld = Servo4Value[MenyValg];
Servo5ValueOld = Servo5Value[MenyValg];
int SaveServoValue() {
switch (ServoValg) {
case 1:
Servo1Value[MenyValg] = ServoValue;
Servo1ValueOld = ServoValue;
break;
case 2:
Servo2Value[MenyValg] = ServoValue;
Servo2ValueOld = ServoValue;
break;
case 3:
Servo3Value[MenyValg] = ServoValue;
Servo3ValueOld = ServoValue;
break;
case 4:
Servo4Value[MenyValg] = ServoValue;
Servo4ValueOld = ServoValue;
break;
case 5:
Servo5Value[MenyValg] = ServoValue;
Servo5ValueOld = ServoValue;
break;
}
}
void SetServoStepPos() {
ServoValue = map(Servo1Value[MenyValg], 0, 1023, 179, 0);
myservo1.write(ServoValue);
void MenuCase() {
switch (comL_code) {
case 64: // Buttom >>|
LoadServoValue();
MenyValg++;
MenuLCD();
SetServoStepAnim();
SerialStatus();
if (MenyValg>MenyValgAntall) {MenyValg = MenyValgAntall;}
break;
break;
break;
case 8: //Butom 4
ServoValg = 4;
break;
case 7: //Butom -
LoadServoValue();
ServoValue = ServoValue - 8;
if (ServoValue<0) {ServoValue = 0;}
SaveServoValue();
SetServoStepPos();
break;
}
}
if(Pulse_Width>=7&&Pulse_Width<=10)//The
n high 560us
return 0;
else
if(Pulse_Width>=25&&Pulse_Width<=27)
//Then high 1.7ms
return 1;
}
return -1;
}
void pulse_deal()//Receiver address code and
command code pulse function
{
int i;
int j;
adr_code=0x00;// Clear
comL_code=0x00;// Clear
comH_code=0x00;// Clear
if(Pulse_Width>=140&&Pulse_Width<=142)//
9ms
{
while(digitalRead(IR_IN));//high wait
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=68&&Pulse_Width<=72)//4.
5ms
{
pulse_deal();
return;
}
else
if(Pulse_Width>=34&&Pulse_Width<=36)//2.
25ms
{
while(!(digitalRead(IR_IN)));//low wait
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=7&&Pulse_Width<=10)//560
us
{
return;
}
}
}
}