Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG herkulex mbed
main.cpp
- Committer:
- genath6
- Date:
- 2018-06-21
- Revision:
- 0:d109c328c59a
- Child:
- 1:0672bec4f646
File content as of revision 0:d109c328c59a:
#include "mbed.h"
#include "TS_DISCO_F746NG.h"
#include "LCD_DISCO_F746NG.h"
#include "herkulex.h"
#define SERVO_ID 0x02
Herkulex sv(PC_6, PC_7, 115200);
DigitalOut led(LED1);
LCD_DISCO_F746NG lcd;
TS_DISCO_F746NG ts;
int main()
{
TS_StateTypeDef TS_State;
uint16_t x, y;
uint8_t text[28];
uint8_t nom[50];
uint8_t status;
uint8_t idx;
uint8_t cleared = 0;
uint8_t prev_nb_touches = 0;
int init=0, init1=0;
int position = 0;
float positiondeg = 0;
lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"HerkuleX Smart Robot Servo", CENTER_MODE);
lcd.SetBackColor(LCD_COLOR_BLACK);
lcd.SetTextColor(LCD_COLOR_WHITE);
wait(1);
status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
if (status != TS_OK) {
lcd.Clear(LCD_COLOR_RED);
lcd.SetBackColor(LCD_COLOR_RED);
lcd.SetTextColor(LCD_COLOR_WHITE);
lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
} else {
lcd.Clear(LCD_COLOR_GREEN);
lcd.SetBackColor(LCD_COLOR_GREEN);
lcd.SetTextColor(LCD_COLOR_WHITE);
lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
}
/**
* @brief Draws a rectangle.
* @param Xpos: X position
* @param Ypos: Y position
* @param Width: Rectangle width
* @param Height: Rectangle height
* @retval None
*/
lcd.SetFont(&Font12);
lcd.SetBackColor(LCD_COLOR_WHITE);
lcd.SetTextColor(LCD_COLOR_WHITE);
sv.clear(SERVO_ID);
sv.leds(SERVO_ID, 4);
sv.setTorque(SERVO_ID, TORQUE_ON);
//sv.getStatus(SERVO_ID);
//sv.getPos(SERVO_ID);
wait(1);
sv.positionControl(SERVO_ID, 21, 60, GLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
while(1) {
//position = sv.getPos(SERVO_ID);
sprintf((char*)text, "position : %d", position);
lcd.DisplayStringAt(200, LINE(10), (uint8_t *)&text, LEFT_MODE);
positiondeg = float(position)*0.325;
//display current position
lcd.SetBackColor(LCD_COLOR_WHITE);
lcd.SetTextColor(LCD_COLOR_BLACK);
sprintf((char*)text, "current position: %d degrees", int(positiondeg));
lcd.DisplayStringAt(10, LINE(21), (uint8_t *)&text, CENTER_MODE);
//button Init
lcd.SetTextColor(LCD_COLOR_BLACK);
lcd.DrawRect(380,40,50,25);
lcd.SetBackColor(LCD_COLOR_WHITE);
lcd.SetTextColor(LCD_COLOR_BLACK);
sprintf((char*)text,"Init");
lcd.DisplayStringAt(392, LINE(4), (uint8_t *)&text, LEFT_MODE);
init=init+1;
/*sprintf((char*)text,"%d",init);
lcd.DisplayStringAt(0, LINE(21), (uint8_t *)&text, LEFT_MODE);
wait_ms(20);*/
//button Uturn
lcd.SetTextColor(LCD_COLOR_BLACK); //choisi la couleur du texte
lcd.DrawRect(380,90,50,25); //trace le rectangle
lcd.SetBackColor(LCD_COLOR_WHITE); //choisi la couleur à l'arière du texte
lcd.SetTextColor(LCD_COLOR_BLACK); //choisi la couleur du texte
sprintf((char*)text,"U-turn"); //ecrit "Uturn"
lcd.DisplayStringAt(385, LINE(8), (uint8_t *)&text, LEFT_MODE);
//choisi la ligne où ecrire
//button +10
lcd.SetTextColor(LCD_COLOR_BLACK);
lcd.DrawRect(380,140,50,25);
lcd.SetBackColor(LCD_COLOR_WHITE);
lcd.SetTextColor(LCD_COLOR_BLACK);
sprintf((char*)text,"+10");
lcd.DisplayStringAt(391, LINE(12), (uint8_t *)&text, LEFT_MODE);
//button -10
lcd.SetTextColor(LCD_COLOR_BLACK);
lcd.DrawRect(380,190,50,25);
lcd.SetBackColor(LCD_COLOR_WHITE);
lcd.SetTextColor(LCD_COLOR_BLACK);
sprintf((char*)text,"-10");
lcd.DisplayStringAt(391, LINE(16), (uint8_t *)&text, LEFT_MODE);
//middle circle
lcd.SetTextColor(LCD_COLOR_BLACK);
lcd.DrawCircle(240, 136, 100);
ts.GetState(&TS_State);
if (TS_State.touchDetected) { //when finger detected
// Clear lines corresponding to old touches coordinates
if (TS_State.touchDetected < prev_nb_touches) {
for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
lcd.ClearStringLine(idx);
}
}
prev_nb_touches = TS_State.touchDetected;
cleared = 0;
//sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
//lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
for (idx = 0; idx < TS_State.touchDetected; idx++) {
x = TS_State.touchX[idx];
y = TS_State.touchY[idx];
//sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
//lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
}
//filling button Init
if (TS_State.touchDetected&(380<x & x<430)&(40<y & y<65)) {
lcd.FillRect(380, 40, 50, 25);
sv.positionControl(SERVO_ID, 21, 60, GLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
}
//filling button Uturn
if (TS_State.touchDetected&(380<x & x<430)&(90<y & y<115)) {
lcd.FillRect(380,90,50,25);
position = sv.getPos(SERVO_ID);
if( position <= 490)
{ sv.positionControl(SERVO_ID, 554 + position, 60, BLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
}
}
//filling button +10
if (TS_State.touchDetected&(380<x & x<430)&(140<y & y<165)) {
lcd.FillRect(380,140,50,25);
position = sv.getPos(SERVO_ID);
if( position <= 972)
{ sv.positionControl(SERVO_ID, 30 + position, 60, BLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
}
}
//filling button -10
if (TS_State.touchDetected&(380<x & x<430)&(190<y & y<215)) {
lcd.FillRect(380,190,50,25);
position = sv.getPos(SERVO_ID);
if( position >= 51)
{ sv.positionControl(SERVO_ID, position - 30, 60, BLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
}
}
//filling circle
if (TS_State.touchDetected&(140<x & x<340)&(36<y & y<236)) {
lcd.FillCircle(240,136,100);
sv.positionControl(SERVO_ID, 1002-(((x-140)*5)), 60, BLED_ON);
wait(1);
sv.getStatus(SERVO_ID);
position = sv.getPos(SERVO_ID);
}
//init=0;
//finger follower
/*if (TS_State.touchDetected&(0<x & x<480)&(0<y & y<272)) {
lcd.FillCircle(x, y, 10);
}*/
//lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_WHITE);
} else { //when no finger detected
if (!cleared) {
lcd.Clear(LCD_COLOR_WHITE);
sprintf((char*)text, "Alim Voltage: 7.4 V");
lcd.DisplayStringAt(0, LINE(5), (uint8_t *)&text, LEFT_MODE);
sprintf((char*)text, "Current MAX: 450 mA");
lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, LEFT_MODE);
//title display
lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"HerkuleX Servo Controler", CENTER_MODE);
//name display
sprintf((char*)nom, "Yann MARTIN");
lcd.DisplayStringAt(0, LINE(17), (uint8_t *)&nom, LEFT_MODE);
sprintf((char*)nom, "Karl BISWESE");
lcd.DisplayStringAt(0, LINE(18), (uint8_t *)&nom, LEFT_MODE);
sprintf((char*)nom, "Genath NAGENTHIRAN");
lcd.DisplayStringAt(0, LINE(19), (uint8_t *)&nom, LEFT_MODE);
cleared = 1;
}
}
}
}