0% found this document useful (0 votes)
55 views22 pages

Go Back (Eng - Arduino - Tut90.php) : ESC/servo Tester Code (29/03/2019)

The document provides code for an Arduino-based servo turret and ESC controller with an LCD screen. The code initializes the LCD screen and defines input/output pins and variables for controlling servos, ESC, and reading button input. The main loop handles button input to cycle through menu levels for controlling servos or calibrating the ESC, and updates the LCD display accordingly.

Uploaded by

service5b
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views22 pages

Go Back (Eng - Arduino - Tut90.php) : ESC/servo Tester Code (29/03/2019)

The document provides code for an Arduino-based servo turret and ESC controller with an LCD screen. The code initializes the LCD screen and defines input/output pins and variables for controlling servos, ESC, and reading button input. The main loop handles button input to cycle through menu levels for controlling servos or calibrating the ESC, and updates the LCD display accordingly.

Uploaded by

service5b
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

ADVERTISERS

(https://www.youtube.com
(https://www.instagram.com
(https://www.facebook.com
(https://twitter.com (http://bit.ly
/c/ELECTRONOOBS)
/ELECTRONOOBS)
/Electronoobs)
/ELECTRONOOBS) /36FgSDm)
Code

Help me by sharing this post


Share 35

This is the code for the Arduino based servo turret. Make sure
you also install the needed library for i2c LCD screen module.
Download that from below. Install the library, compile and (http://bit.ly
uplaod the code to the Arduino. Downlaod the zip file or /2sZR6Lu)
copy+paste from below. Read all comments in the code!

ESC/servo tester code (29/03/2019) (images/Arduino/tut_90


/ESC_tester.odt.zip)
i2c LCD library (eng_arduino_liq_crystal.php)

(http://bit.ly
/2tHFUTI)

(images/Arduino/tut_90/sch_1.jpg)

GO BACK
(eng_arduino_tut90.php)

1 of 22 4/8/2020, 7:17 PM
//Tutorial: https://www.electronoobs.com/eng_arduino_tut90.php
//Schematic: https://www.electronoobs.com/eng_arduino_tut90_sch1.php

//LCD config
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //http://www.electronoobs.com/eng_ardu
ino_liq_crystal.php
LiquidCrystal_I2C lcd(0x3f,20,4); //sometimes the LCD adress is not 0x3f.
Change to 0x27 if it dosn't work.

//inputs/outputs
int left = 2;
int right = 4;
int up = 5;
int down = 6;
int sel = 7;
int back = 8;
int pot = A0;
int pwm = 9;

///Variables
uint8_t retarrow[8] = {
B00000,
B00100,
B00010,
B11111,
B00010,
B00100,
B00000};
int menu_level = 0;
int menu_0_level = 0;
int menu_1_level = 0;
int menu_4_level = 0;
int menu_8_level = 0;
int menu_11_level = 0;
bool up_state = true;
bool down_state = true;
bool left_state = true;
bool right_state = true;
bool sel_state = true;
bool back_state = true;

int loop_counter = 0;
unsigned long previousMillis = 0;

int deg_val = 0;
int width = 1000;
int width_min = 1000;
int width_max = 2000;
int frequency = 50;

int servo_freq = 20000;


int esc_freq = 20000;

int calib_min = 1000;


int calib_max = 2000;

int esc_width = 1000;


int esc_width_min = 1000;
int esc_width_max = 2000;
int esc_frequency = 50;

2 of 22 4/8/2020, 7:17 PM
void setup() {
pinMode(left,INPUT_PULLUP);
pinMode(right,INPUT_PULLUP);
pinMode(up,INPUT_PULLUP);
pinMode(down,INPUT_PULLUP);
pinMode(sel,INPUT_PULLUP);
pinMode(back,INPUT_PULLUP);
pinMode(pot,INPUT);
pinMode(pwm, OUTPUT);

lcd.init(); //Init the LCD


lcd.backlight(); //Activate backl
lcd.createChar(1, retarrow);

lcd.clear();

lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.print(" ESC control");

TCCR1A = 0;
TCCR1A = (1 <<COM1A1) | (1 << WGM11);
TCCR1B = 0;
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11);
ICR1 = 20000; //Freq= 50Hz
OCR1A = 0; //PWM->OFF pulse width = 0;

void loop() {
if(digitalRead(up))
{ up_state = true; }
if(digitalRead(down))
{ down_state = true; }
if(digitalRead(left))
{ left_state = true; }
if(digitalRead(right))
{ right_state = true; }
if(digitalRead(sel))
{ sel_state = true; }
if(digitalRead(back))
{ back_state = true; }

if(!(menu_level == 2 || menu_level == 3 || menu_level == 9 || menu_level


== 10 || menu_level == 17 )) Alfawise
{
OCR1A = 0; //PWM->OFF pulse width = 0;
U30 2.8 inch
//digitalWrite(9,LOW); Touch
}
Screen DIY
Desktop 3D
///////////////////////////////MENU 0////////////////////////////////
if(menu_level == 0 && !digitalRead(up) && up_state == true)Printer - U30
{ EU Plug
up_state = false;
menu_0_level = menu_0_level - 1; Black only
if(menu_0_level < 0)
$$162.89
{
menu_0_level = 2; (https://www.gearbest.com
}

3 of 22 4/8/2020, 7:17 PM
if(menu_0_level == 0)
/3d-printers-
{
lcd.clear(); 3d-printer-
lcd.setCursor(0,0);
lcd.write(1);
kits/pp_009954647322.html?lkid=3952
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.print(" ESC control");
}
if(menu_0_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC control");
}
if(menu_0_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC control");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC calibrate");
}
}

if(menu_level == 0 && !digitalRead(down) && down_state == true)


{
down_state = false;
menu_0_level = menu_0_level + 1;
if(menu_0_level > 2)
{
menu_0_level = 0;
}
if(menu_0_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.print(" ESC control");
}
if(menu_0_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC control");
}
if(menu_0_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC control");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC calibrate");
}

4 of 22 4/8/2020, 7:17 PM
}
///////////////////////////////MENU 0////////////////////////////////

///////////////////////////////MENU CHANGE AFFILATE


////////////////////////////////

//////////////////////////////////////////////////////////////////////////
///////
if(!digitalRead(back) && back_state == true)
{
back_state = false;
if(menu_level == 1 || menu_level == 8 || menu_level == 15) Creality3D
{
menu_level = 0; CR - 10S 3D
menu_0_level = 0; Printer - EU
lcd.clear();
lcd.setCursor(0,0); Plug
lcd.write(1); Upgrade
lcd.print(" Servo control");
lcd.setCursor(0,1); Version
lcd.print(" ESC control");
Coffee and
}
if(menu_level == 2 || menu_level == 3 || menu_level == 4) Black only
{
menu_level = 1;
$$352.94
menu_1_level = 0; (https://www.gearbest.com
lcd.clear();
lcd.setCursor(0,0);
/3d-printers-
lcd.write(1); 3d-printer-
lcd.print(" Servo pot");
lcd.setCursor(0,1);
kits/pp_796481.html?lkid=39527111
lcd.print(" Servo fine");
}
if(menu_level == 1)
{
menu_level = 0;
menu_0_level = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1); Creality 3D
lcd.print(" Servo control");
Ender-3
lcd.setCursor(0,1);
lcd.print(" ESC control"); V-slot Prusa
}
if(menu_level == 5 || menu_level == 6 || menu_level == 7)
I3 DIY 3D
{ Printer Kit
menu_level = 4;
menu_4_level = 0;
220 x 220 x
lcd.clear(); 250mm
lcd.setCursor(0,0);
lcd.write(1);
Printing Size
lcd.print(" Min"); - EU Plug
lcd.setCursor(0,1);
lcd.print(" Max"); Black only
} $$153.84
if(menu_level == 9 || menu_level == 10 || menu_level == 11)
{ (https://www.gearbest.com
menu_level = 8;

5 of 22 4/8/2020, 7:17 PM
menu_8_level = 0;
/3d-printers-
lcd.clear();
lcd.setCursor(0,0); 3d-printer-
lcd.write(1);
lcd.print(" ESC pot");
kits/pp_1845899.html?lkid=39527206
lcd.setCursor(0,1);
lcd.print(" ESC fine");
}
if(menu_level == 12 || menu_level == 13 || menu_level ==
{
menu_level = 11;
menu_11_level = 0;
lcd.clear();
lcd.setCursor(0,0); Alfawise
lcd.write(1); U20 Large
lcd.print(" Min");
lcd.setCursor(0,1); Scale 2.8
lcd.print(" Max"); inch Touch
}
} Screen DIY
3D Printer -
//////////////////////////////////////////////////////////////////////////
/////// EU - U20
EU Plug
Black only
$$253.39
(https://www.gearbest.com
//////////////////////////////////////////////////////////////////////////
///////
/3d-printers-
if(menu_level == 0 && menu_0_level == 0 && !digitalRead(sel) 3d-printer-
&& sel_stat
e == true)
{ kits/pp_1841229.html?lkid=39527285
sel_state = false;
menu_level = 1;
ICR1 = servo_freq;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo pot");
lcd.setCursor(0,1);
lcd.print(" Servo fine");
}
if(menu_level == 0 && menu_0_level == 1 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 8;
ICR1 = esc_freq;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" ESC pot");
lcd.setCursor(0,1);
lcd.print(" ESC fine");
}
if(menu_level == 0 && menu_0_level == 2 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 15;
lcd.clear();
lcd.setCursor(0,0);

6 of 22 4/8/2020, 7:17 PM
lcd.print("Set min value:");
lcd.setCursor(0,1);
lcd.print(calib_min);
}

//////////////////////////////////////////////////////////////////////////
///////

//////////////////////////////////////////////////////////////////////////
///////
if(menu_level == 1 && menu_1_level == 0 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
previousMillis = millis();
menu_level = 2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Deg ");
lcd.print(deg_val);
}
if(menu_level == 1 && menu_1_level == 1 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
previousMillis = millis();
menu_level = 3;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Deg ");
lcd.print(deg_val);
}
if(menu_level == 1 && menu_1_level == 2 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 4;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.print(" Max");
}

//////////////////////////////////////////////////////////////////////////
///////

//////////////////////////////////////////////////////////////////////////
///////
if(menu_level == 4 && menu_4_level == 0 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);

7 of 22 4/8/2020, 7:17 PM
lcd.print(width_min);
}
if(menu_level == 4 && menu_4_level == 1 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 6;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(width_max);
}
if(menu_level == 4 && menu_4_level == 2 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 7;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");
lcd.setCursor(0,1);
lcd.print(frequency);
}

//////////////////////////////////////////////////////////////////////////
///////

//////////////////////////////////////////////////////////////////////////
///////
if(menu_level == 8 && menu_8_level == 0 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
previousMillis = millis();
menu_level = 9;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("us: ");
lcd.print(esc_width);
}
if(menu_level == 8 && menu_8_level == 1 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 10;
previousMillis = millis();
esc_width = esc_width_min;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("us: ");
lcd.print(esc_width);
}
if(menu_level == 8 && menu_8_level == 2 && !digitalRead(sel) && sel_stat
e == true)
{
sel_state = false;
menu_level = 11;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");

8 of 22 4/8/2020, 7:17 PM
lcd.setCursor(0,1);
lcd.print(" Max");
}

//////////////////////////////////////////////////////////////////////////
///////

//////////////////////////////////////////////////////////////////////////
///////
if(menu_level == 11 && menu_11_level == 0 && !digitalRead(sel) && sel_st
ate == true)
{
sel_state = false;
menu_level = 12;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);
lcd.print(width_min);
}
if(menu_level == 11 && menu_11_level == 1 && !digitalRead(sel) && sel_st
ate == true)
{
sel_state = false;
menu_level = 13;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(width_max);
}
if(menu_level == 11 && menu_11_level == 2 && !digitalRead(sel) && sel_st
ate == true)
{
sel_state = false;
menu_level = 14;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");
lcd.setCursor(0,1);
lcd.print(frequency);
}

//////////////////////////////////////////////////////////////////////////
///////

///////////////////////////////MENU CHANGE
////////////////////////////////

9 of 22 4/8/2020, 7:17 PM
///////////////////////////////MENU 1////////////////////////////////
if(menu_level == 1 && !digitalRead(up) && up_state == true)
{
up_state = false;
menu_1_level = menu_1_level - 1;
if(menu_1_level < 0)
{
menu_1_level = 2;
}
if(menu_1_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo pot");
lcd.setCursor(0,1);
lcd.print(" Servo fine");
}
if(menu_1_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo pot");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Servo fine");
}
if(menu_1_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo fine");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Servo config");
}
}

if(menu_level == 1 && !digitalRead(down) && down_state == true)


{
OCR1A = 0; //PWM->OFF pulse width = 0;
down_state = false;
menu_1_level = menu_1_level + 1;
if(menu_1_level > 2)
{
menu_1_level = 0;
}
if(menu_1_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo pot");
lcd.setCursor(0,1);
lcd.print(" Servo fine");
}
if(menu_1_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo pot");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Servo fine");

10 of 22 4/8/2020, 7:17 PM
}
if(menu_1_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Servo fine");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Servo config");
}
}
///////////////////////////////MENU 1////////////////////////////////

///////////////////////////////MENU 2////////////////////////////////
if(menu_level == 2)
{
width = map(analogRead(pot),0,1024,width_min,width_max);
deg_val = map(width,width_min,width_max,0,181);
OCR1A = width;

unsigned long currentMillis = millis();


if(currentMillis - previousMillis >= 100)
{
previousMillis += 100;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Deg: ");
lcd.print(deg_val);
}
}
///////////////////////////////MENU 2////////////////////////////////

///////////////////////////////MENU 3////////////////////////////////
if(menu_level == 3)
{
if(!digitalRead(left) && left_state==true)
{
deg_val = deg_val - 1;
left_state = false;
}
if(!digitalRead(right) && right_state==true)
{
deg_val = deg_val + 1;
right_state = false;
}
if(deg_val > 180) deg_val = 180;
if(deg_val < 0) deg_val = 0;

width = map(deg_val, 0, 190,width_min, width_max);


OCR1A = width;

unsigned long currentMillis = millis();


if(currentMillis - previousMillis >= 100)
{
previousMillis += 100;
lcd.clear();
lcd.setCursor(0,0);

11 of 22 4/8/2020, 7:17 PM
lcd.print("Deg: ");
lcd.print(deg_val);
}
}
///////////////////////////////MENU 3////////////////////////////////

///////////////////////////////MENU 4////////////////////////////////
if(menu_level == 4 && !digitalRead(up) && up_state == true)
{
OCR1A = 0; //PWM->OFF pulse width = 0;
up_state = false;
menu_4_level = menu_4_level - 1;
if(menu_4_level < 0)
{
menu_4_level = 2;
}
if(menu_4_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.print(" Max");
}
if(menu_4_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Max");
}
if(menu_4_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Max");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Frequency");
}
}

if(menu_level == 4 && !digitalRead(down) && down_state == true)


{
OCR1A = 0; //PWM->OFF pulse width = 0;
down_state = false;
menu_4_level = menu_4_level + 1;
if(menu_4_level > 2)
{
menu_4_level = 0;
}
if(menu_4_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");

12 of 22 4/8/2020, 7:17 PM
lcd.setCursor(0,1);
lcd.print(" Max");
}
if(menu_4_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Max");
}
if(menu_4_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Max");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Frequency");
}
}
///////////////////////////////MENU 4////////////////////////////////

///////////////////////////////MENU 5////////////////////////////////
if(menu_level == 5 && !digitalRead(left) && left_state == true)
{
left_state = false;
width_min = width_min - 5;
if(width_min < 100)
{
width_min = 100;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);
lcd.print(width_min);
}
if(menu_level == 5 && !digitalRead(right) && right_state == true)
{
right_state = false;
width_min = width_min + 5;
if(width_min > width_max)
{
width_min = width_max;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);
lcd.print(width_min);
}
///////////////////////////////MENU 5////////////////////////////////

///////////////////////////////MENU 6////////////////////////////////
if(menu_level == 6 && !digitalRead(left) && left_state == true)
{
left_state = false;

13 of 22 4/8/2020, 7:17 PM
width_max= width_max - 5;
if(width_max < width_min)
{
width_max = width_min;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(width_max);
}
if(menu_level == 6 && !digitalRead(right) && right_state == true)
{
right_state = false;
width_max = width_max + 5;
if(width_max > 4000)
{
width_max = 40000;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(width_max);
}
///////////////////////////////MENU 5////////////////////////////////

///////////////////////////////MENU 7////////////////////////////////
if(menu_level == 7 && !digitalRead(left) && left_state == true)
{
left_state = false;
frequency= frequency - 1;
if(frequency < 10)
{
frequency = 10;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");
lcd.setCursor(0,1);
lcd.print(frequency);
servo_freq = 16000000/(frequency*16);
}
if(menu_level == 7 && !digitalRead(right) && right_state == true)
{
right_state = false;
frequency = frequency + 1;
if(frequency > 100)
{
frequency = 100;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");;
lcd.setCursor(0,1);
lcd.print(frequency);
servo_freq = 16000000/(frequency*16);
}
///////////////////////////////MENU 7////////////////////////////////

14 of 22 4/8/2020, 7:17 PM
///////////////////////////////MENU 8////////////////////////////////
if(menu_level == 8 && !digitalRead(up) && up_state == true)
{
up_state = false;
menu_8_level = menu_8_level - 1;
if(menu_8_level < 0)
{
menu_8_level = 2;
}
if(menu_8_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" ESC pot");
lcd.setCursor(0,1);
lcd.print(" ESC fine");
}
if(menu_8_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC pot");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC fine");
}
if(menu_8_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC fine");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC config");
}
}

if(menu_level == 8 && !digitalRead(down) && down_state == true)


{
down_state = false;
menu_8_level = menu_8_level + 1;
if(menu_8_level > 2)
{
menu_8_level = 0;
}
if(menu_8_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" ESC pot");
lcd.setCursor(0,1);
lcd.print(" ESC fine");
}
if(menu_8_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC pot");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC fine");
}

15 of 22 4/8/2020, 7:17 PM
if(menu_8_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ESC fine");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" ESC config");
}
}
///////////////////////////////MENU 8////////////////////////////////

///////////////////////////////MENU 9////////////////////////////////
if(menu_level == 9)
{
esc_width = map(analogRead(pot),0,1024,esc_width_min,esc_width_max);
OCR1A = esc_width;

unsigned long currentMillis = millis();


if(currentMillis - previousMillis >= 100)
{
previousMillis += 100;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("us: ");
lcd.print(esc_width);
}
}
///////////////////////////////MENU 9////////////////////////////////

///////////////////////////////MENU 10////////////////////////////////
if(menu_level == 10)
{
if(!digitalRead(left))
{
esc_width = esc_width - 1;
left_state = false;
delay(10);
}
if(!digitalRead(right))
{
esc_width = esc_width + 1;
right_state = false;
delay(10);
}
if(esc_width > esc_width_max) esc_width = esc_width_max;
if(esc_width < esc_width_min) esc_width = esc_width_min;

OCR1A = esc_width;

unsigned long currentMillis = millis();


if(currentMillis - previousMillis >= 100)
{
previousMillis += 100;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("us: ");
lcd.print(esc_width);
}

16 of 22 4/8/2020, 7:17 PM
}
///////////////////////////////MENU 10////////////////////////////////

///////////////////////////////MENU 11////////////////////////////////
if(menu_level == 11 && !digitalRead(up) && up_state == true)
{
up_state = false;
menu_11_level = menu_11_level - 1;
if(menu_11_level < 0)
{
menu_11_level = 2;
}
if(menu_11_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.print(" Max");
}
if(menu_11_level == 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Max");
}
if(menu_11_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Max");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Frequency");
}
}

if(menu_level == 11 && !digitalRead(down) && down_state == true)


{
down_state = false;
menu_11_level = menu_11_level + 1;
if(menu_11_level > 2)
{
menu_11_level = 0;
}
if(menu_11_level == 0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.print(" Max");
}
if(menu_11_level == 1)
{
lcd.clear();

17 of 22 4/8/2020, 7:17 PM
lcd.setCursor(0,0);
lcd.print(" Min");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Max");
}
if(menu_11_level == 2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Max");
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(" Frequency");
}
}
///////////////////////////////MENU 11////////////////////////////////

///////////////////////////////MENU 12////////////////////////////////
if(menu_level == 12 && !digitalRead(left) && left_state == true)
{
left_state = false;
esc_width_min = esc_width_min - 5;
if(esc_width_min < 100)
{
esc_width_min = 100;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);
lcd.print(esc_width_min);
}
if(menu_level == 12 && !digitalRead(right) && right_state == true)
{
right_state = false;
esc_width_min = esc_width_min + 5;
if(esc_width_min > esc_width_max)
{
esc_width_min = esc_width_max;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min:");
lcd.setCursor(0,1);
lcd.print(esc_width_min);
}
///////////////////////////////MENU 12////////////////////////////////

///////////////////////////////MENU 13////////////////////////////////
if(menu_level == 13 && !digitalRead(left) && left_state == true)
{
left_state = false;
esc_width_max= esc_width_max - 5;
if(esc_width_max < esc_width_min)
{
esc_width_max = esc_width_min;
}

18 of 22 4/8/2020, 7:17 PM
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(esc_width_max);
}
if(menu_level == 13 && !digitalRead(right) && right_state == true)
{
right_state = false;
esc_width_max = esc_width_max + 5;
if(esc_width_max > 4000)
{
esc_width_max = 40000;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max:");
lcd.setCursor(0,1);
lcd.print(esc_width_max);
}
///////////////////////////////MENU 13////////////////////////////////

///////////////////////////////MENU 14////////////////////////////////
if(menu_level == 14 && !digitalRead(left) && left_state == true)
{
left_state = false;
frequency= frequency - 1;
if(frequency < 10)
{
frequency = 10;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");
lcd.setCursor(0,1);
lcd.print(frequency);
esc_freq = 16000000/(frequency*16);
}
if(menu_level == 14 && !digitalRead(right) && right_state == true)
{
right_state = false;
frequency = frequency + 1;
if(frequency > 100)
{
frequency = 100;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set frequency:");;
lcd.setCursor(0,1);
lcd.print(frequency);
esc_freq = 16000000/(frequency*16);
}
///////////////////////////////MENU 14////////////////////////////////

///////////////////////////////MENU 15////////////////////////////////
if(menu_level == 15 && !digitalRead(left) && left_state == true)
{
left_state = false;
calib_min= calib_min - 5;
if(calib_min < 100)

19 of 22 4/8/2020, 7:17 PM
{
calib_min = 100;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min value:");
lcd.setCursor(0,1);
lcd.print(calib_min);
}

if(menu_level == 15 && !digitalRead(right) && right_state == true)


{
right_state = false;
calib_min= calib_min + 5;
if(calib_min > calib_max)
{
calib_min = calib_max;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set min value:");
lcd.setCursor(0,1);
lcd.print(calib_min);
}
if(menu_level == 15 && !digitalRead(sel) && sel_state == true)
{
sel_state = false;
menu_level = 16;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max value:");
lcd.setCursor(0,1);
lcd.print(calib_max);
}

if(menu_level == 16 && !digitalRead(left) && left_state == true)


{
left_state = false;
calib_max= calib_max - 5;
if(calib_max < calib_min)
{
calib_max = calib_min;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max value:");
lcd.setCursor(0,1);
lcd.print(calib_max);
}

if(menu_level == 16 && !digitalRead(right) && right_state == true)


{
right_state = false;
calib_max= calib_max + 5;
if(calib_max > 4000)
{
calib_max = 4000;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set max value:");
lcd.setCursor(0,1);
lcd.print(calib_max);
}

20 of 22 4/8/2020, 7:17 PM
if(menu_level == 16 && !digitalRead(sel) && sel_state == true)
{
sel_state = false;
menu_level = 17;
OCR1A = calib_max;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connect battery");
lcd.setCursor(0,1);
lcd.print("And press select");
}
if(menu_level == 17 && !digitalRead(sel) && sel_state == true)
{
sel_state = false;
OCR1A = calib_min;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Calibrating");
delay(1000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESC configured");
lcd.setCursor(0,1);
lcd.print("after beep");
delay(2000);
menu_level = 0;
menu_0_level = 0;
lcd.setCursor(0,0);
lcd.write(1);
lcd.print(" Servo control");
lcd.setCursor(0,1);
lcd.print(" ESC control");
}
///////////////////////////////MENU 15,16,17
////////////////////////////////
}//end void loop

21 of 22 4/8/2020, 7:17 PM
3 Comments Sort by Newest

Marco Antonio
puedes hacer tambien el codigo sin i2c por que no tengo por
fabor quiero hacer el proyecto
Like · Reply · 1 · 19w

Teodoro Jesus Infantes Yupan


Si te alcansa los pines claro que puedes hacer. en los
ejemplos tienes la configuracion del LCD y
acondiciona.
Like · Reply · 19w

Aat Tsani Atmaja


helo brother,,what application do you use to draw the
schematic above?
Like · Reply · 22w

Preston Hackett
I like your project, i've been trying to make the same type of

GO BACK
(eng_arduino_tut90.php)

ELECTRONOOBS 2020
Keep up you guys!

22 of 22 4/8/2020, 7:17 PM

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy