motor dc driver with lcd nextion nx8048t050_011

Dependencies:   mbed QEI_hw NVIC_set_all_priorities SoftPWM

https://os.mbed.com/media/uploads/exarkun/wp_20180730_002.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180823_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180730_007.jpg https://os.mbed.com/media/uploads/exarkun/wp_20171120_004.jpg

https://os.mbed.com/media/uploads/exarkun/wp_20191002_006.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_004.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_005.jpg https://os.mbed.com/media/uploads/exarkun/wp_20190322_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180925_002.jpg https://os.mbed.com/media/uploads/exarkun/wp_20181010_006.jpg https://os.mbed.com/media/uploads/exarkun/wp_20181220_001.jpg

https://os.mbed.com/media/uploads/exarkun/wp_20181220_002.jpg

Committer:
exarkun
Date:
Thu Jul 09 08:30:19 2020 +0000
Revision:
2:e72b06f87c8b
Parent:
1:2fe82be93e80
driver motor with lcd control nextion nx8048t050

Who changed what in which revision?

UserRevisionLine numberNew contents of line
exarkun 1:2fe82be93e80 1 #include "timer.hpp"
exarkun 1:2fe82be93e80 2
exarkun 1:2fe82be93e80 3
exarkun 1:2fe82be93e80 4 //définition des timers.
exarkun 1:2fe82be93e80 5 Timer timer1;
exarkun 1:2fe82be93e80 6 //déclaration des differantes taches
exarkun 1:2fe82be93e80 7 void task1_switch(void);
exarkun 1:2fe82be93e80 8 //declaration des differantes interuption timer
exarkun 1:2fe82be93e80 9 Ticker __time_up113213132; //definition du Ticker, avec le nom “time_up1”
exarkun 1:2fe82be93e80 10 static int _nbTick = 0;
exarkun 1:2fe82be93e80 11 static int _nbTickMax = 0;
exarkun 1:2fe82be93e80 12 Timers_Buffer _timers;
exarkun 1:2fe82be93e80 13
exarkun 1:2fe82be93e80 14 #define NBTIMERS 10
exarkun 1:2fe82be93e80 15 int WaitTimers[NBTIMERS];
exarkun 1:2fe82be93e80 16
exarkun 1:2fe82be93e80 17 int _Wait2Step = 0;
exarkun 1:2fe82be93e80 18 bool Wait2(int Id, int nbMs)
exarkun 1:2fe82be93e80 19 {
exarkun 1:2fe82be93e80 20 switch(_Wait2Step)
exarkun 1:2fe82be93e80 21 {
exarkun 1:2fe82be93e80 22 case 0:
exarkun 1:2fe82be93e80 23 initTimer();
exarkun 1:2fe82be93e80 24 _Wait2Step = 1;
exarkun 1:2fe82be93e80 25 break;
exarkun 1:2fe82be93e80 26 case 1:
exarkun 1:2fe82be93e80 27 startTimer(Id, nbMs, oneShotTimer);
exarkun 1:2fe82be93e80 28 _Wait2Step = 2;
exarkun 1:2fe82be93e80 29 break;
exarkun 1:2fe82be93e80 30
exarkun 1:2fe82be93e80 31 case 2:
exarkun 1:2fe82be93e80 32 if(true == IsTimerElapsed(Id))
exarkun 1:2fe82be93e80 33 {
exarkun 1:2fe82be93e80 34 _Wait2Step = 1;
exarkun 1:2fe82be93e80 35 return true;
exarkun 1:2fe82be93e80 36 }
exarkun 1:2fe82be93e80 37 break;
exarkun 1:2fe82be93e80 38 }
exarkun 1:2fe82be93e80 39 return false;
exarkun 1:2fe82be93e80 40 }
exarkun 1:2fe82be93e80 41
exarkun 1:2fe82be93e80 42 ////////////////////////////////////////
exarkun 1:2fe82be93e80 43 // TASKS1 //
exarkun 1:2fe82be93e80 44 ////////////////////////////////////////
exarkun 1:2fe82be93e80 45 void initTimer()
exarkun 1:2fe82be93e80 46 {
exarkun 1:2fe82be93e80 47 //_nbTickMax = timeout;
exarkun 1:2fe82be93e80 48 __time_up113213132.attach(&task1_switch, 0.001);//initialisation du ticker a 1Khz "1ms".
exarkun 1:2fe82be93e80 49
exarkun 1:2fe82be93e80 50 }
exarkun 1:2fe82be93e80 51
exarkun 1:2fe82be93e80 52
exarkun 1:2fe82be93e80 53 static void task1_switch()
exarkun 1:2fe82be93e80 54 {
exarkun 1:2fe82be93e80 55
exarkun 1:2fe82be93e80 56 _nbTick++;
exarkun 1:2fe82be93e80 57
exarkun 1:2fe82be93e80 58 }
exarkun 1:2fe82be93e80 59
exarkun 1:2fe82be93e80 60
exarkun 1:2fe82be93e80 61 int getTickValue()
exarkun 1:2fe82be93e80 62 {
exarkun 1:2fe82be93e80 63 return _nbTick;
exarkun 1:2fe82be93e80 64 }
exarkun 1:2fe82be93e80 65
exarkun 1:2fe82be93e80 66 void inittimerBuffer()
exarkun 1:2fe82be93e80 67 {
exarkun 1:2fe82be93e80 68 _timers.count = 0;
exarkun 1:2fe82be93e80 69 _timers.first = null;
exarkun 1:2fe82be93e80 70 }
exarkun 1:2fe82be93e80 71
exarkun 1:2fe82be93e80 72 /*
exarkun 1:2fe82be93e80 73 * Id: identifiant de timer
exarkun 1:2fe82be93e80 74 * nbMsTimer: durée en ms
exarkun 1:2fe82be93e80 75 * option: autoReloadTimer/oneShotTimer
exarkun 1:2fe82be93e80 76 * */
exarkun 1:2fe82be93e80 77 void startTimer(int Id, int nbMsTimer, Timer_option option)
exarkun 1:2fe82be93e80 78 {
exarkun 1:2fe82be93e80 79 int i;
exarkun 1:2fe82be93e80 80 TimerElement *current;
exarkun 1:2fe82be93e80 81 _timers.lastCall = _nbTick; // enregistre le dernier acces a la stucture
exarkun 1:2fe82be93e80 82 if(_timers.count == 0) // pas de timer
exarkun 1:2fe82be93e80 83 {
exarkun 1:2fe82be93e80 84 _timers.first = (TimerElement *)malloc(sizeof(TimerElement));
exarkun 1:2fe82be93e80 85 _timers.first->Id = Id;
exarkun 1:2fe82be93e80 86 _timers.first->nb_ms = nbMsTimer;
exarkun 1:2fe82be93e80 87 _timers.first->oldTick = getTickValue();
exarkun 1:2fe82be93e80 88 _timers.first->prev = null;
exarkun 1:2fe82be93e80 89 _timers.first->next = null;
exarkun 1:2fe82be93e80 90 _timers.first->option = option;
exarkun 1:2fe82be93e80 91 _timers.count ++;
exarkun 1:2fe82be93e80 92 }
exarkun 1:2fe82be93e80 93 else
exarkun 1:2fe82be93e80 94 {
exarkun 1:2fe82be93e80 95 current = _timers.first;
exarkun 1:2fe82be93e80 96 for(i=0; i<_timers.count; i++)
exarkun 1:2fe82be93e80 97 {
exarkun 1:2fe82be93e80 98 if(current->Id == Id)
exarkun 1:2fe82be93e80 99 {
exarkun 1:2fe82be93e80 100 // trouvé => mis a jour
exarkun 1:2fe82be93e80 101 _timers.first->oldTick = getTickValue();
exarkun 1:2fe82be93e80 102 }
exarkun 1:2fe82be93e80 103 if(i != _timers.count-1)
exarkun 1:2fe82be93e80 104 current = current->next;
exarkun 1:2fe82be93e80 105 }
exarkun 1:2fe82be93e80 106
exarkun 1:2fe82be93e80 107 // pas trouvé => ajout
exarkun 1:2fe82be93e80 108 current->next = (TimerElement *)malloc(sizeof(TimerElement));
exarkun 1:2fe82be93e80 109 current->next->Id = Id;
exarkun 1:2fe82be93e80 110 current->next->prev = current;
exarkun 1:2fe82be93e80 111 current->next->next = null;
exarkun 1:2fe82be93e80 112 current->next->nb_ms = nbMsTimer;
exarkun 1:2fe82be93e80 113 current->next->oldTick = getTickValue();
exarkun 1:2fe82be93e80 114 current->next->option = option;
exarkun 1:2fe82be93e80 115 _timers.count ++;
exarkun 1:2fe82be93e80 116 }
exarkun 1:2fe82be93e80 117 }
exarkun 1:2fe82be93e80 118
exarkun 1:2fe82be93e80 119 static void removeTimerElement(TimerElement *current);
exarkun 1:2fe82be93e80 120 static void removeTimerElement(TimerElement *current)
exarkun 1:2fe82be93e80 121 {
exarkun 1:2fe82be93e80 122 if(_timers.count == 0) return;
exarkun 1:2fe82be93e80 123 if(_timers.count == 1) // 1 timer
exarkun 1:2fe82be93e80 124 {
exarkun 1:2fe82be93e80 125 _timers.first = null;
exarkun 1:2fe82be93e80 126 _timers.lastCall = 0;
exarkun 1:2fe82be93e80 127 }
exarkun 1:2fe82be93e80 128 else if(current->prev == null) // premier de la liste
exarkun 1:2fe82be93e80 129 {
exarkun 1:2fe82be93e80 130 _timers.first = current->next;
exarkun 1:2fe82be93e80 131 _timers.first->prev = null;
exarkun 1:2fe82be93e80 132 }
exarkun 1:2fe82be93e80 133 else if(current->next == null) // dernier de la liste
exarkun 1:2fe82be93e80 134 {
exarkun 1:2fe82be93e80 135 current->prev->next = null;
exarkun 1:2fe82be93e80 136 }
exarkun 1:2fe82be93e80 137 else
exarkun 1:2fe82be93e80 138 {
exarkun 1:2fe82be93e80 139 current->prev->next = current->next;
exarkun 1:2fe82be93e80 140 current->next->prev = current->prev;
exarkun 1:2fe82be93e80 141 }
exarkun 1:2fe82be93e80 142 free(current);
exarkun 1:2fe82be93e80 143 _timers.count --;
exarkun 1:2fe82be93e80 144 }
exarkun 1:2fe82be93e80 145
exarkun 1:2fe82be93e80 146 bool IsTimerElapsed(int Id)
exarkun 1:2fe82be93e80 147 {
exarkun 1:2fe82be93e80 148 TimerElement *current;
exarkun 1:2fe82be93e80 149 int i;
exarkun 1:2fe82be93e80 150 if(_timers.count == 0) return false;
exarkun 1:2fe82be93e80 151 current = _timers.first;
exarkun 1:2fe82be93e80 152 for(i=0; i<_timers.count; i++)
exarkun 1:2fe82be93e80 153 {
exarkun 1:2fe82be93e80 154 if(current->Id == Id)
exarkun 1:2fe82be93e80 155 {
exarkun 1:2fe82be93e80 156 // trouvé => retour valeur
exarkun 1:2fe82be93e80 157 if(getTickValue() > (current->oldTick + current->nb_ms))
exarkun 1:2fe82be93e80 158 {
exarkun 1:2fe82be93e80 159 switch(current->option)
exarkun 1:2fe82be93e80 160 {
exarkun 1:2fe82be93e80 161 case oneShotTimer:
exarkun 1:2fe82be93e80 162 removeTimerElement(current);
exarkun 1:2fe82be93e80 163 break;
exarkun 1:2fe82be93e80 164 case autoReloadTimer:
exarkun 1:2fe82be93e80 165 current->oldTick = getTickValue();
exarkun 1:2fe82be93e80 166 break;
exarkun 1:2fe82be93e80 167 }
exarkun 1:2fe82be93e80 168 return true;
exarkun 1:2fe82be93e80 169 }
exarkun 1:2fe82be93e80 170 }
exarkun 1:2fe82be93e80 171 if(i != _timers.count-1)
exarkun 1:2fe82be93e80 172 current = current->next;
exarkun 1:2fe82be93e80 173 }
exarkun 1:2fe82be93e80 174 return false;
exarkun 1:2fe82be93e80 175 }
exarkun 1:2fe82be93e80 176
exarkun 1:2fe82be93e80 177 void killTimer(int Id)
exarkun 1:2fe82be93e80 178 {
exarkun 1:2fe82be93e80 179 TimerElement *current;
exarkun 1:2fe82be93e80 180 int i;
exarkun 1:2fe82be93e80 181 if(_timers.count == 0) return;
exarkun 1:2fe82be93e80 182 current = _timers.first;
exarkun 1:2fe82be93e80 183 for(i=0; i<_timers.count; i++)
exarkun 1:2fe82be93e80 184 {
exarkun 1:2fe82be93e80 185 if(current->Id == Id)
exarkun 1:2fe82be93e80 186 {
exarkun 1:2fe82be93e80 187 // trouvé => suppression
exarkun 1:2fe82be93e80 188 removeTimerElement(current);
exarkun 1:2fe82be93e80 189 return;
exarkun 1:2fe82be93e80 190 }
exarkun 1:2fe82be93e80 191 current = current->next;
exarkun 1:2fe82be93e80 192 }
exarkun 1:2fe82be93e80 193 }
exarkun 1:2fe82be93e80 194
exarkun 1:2fe82be93e80 195 void ResetTimer(int Id)
exarkun 1:2fe82be93e80 196 {
exarkun 1:2fe82be93e80 197 TimerElement *current;
exarkun 1:2fe82be93e80 198 int i;
exarkun 1:2fe82be93e80 199 if(_timers.count == 0) return;
exarkun 1:2fe82be93e80 200 current = _timers.first;
exarkun 1:2fe82be93e80 201 for(i=0; i<_timers.count; i++)
exarkun 1:2fe82be93e80 202 {
exarkun 1:2fe82be93e80 203 if(current->Id == Id)
exarkun 1:2fe82be93e80 204 {
exarkun 1:2fe82be93e80 205 // trouvé => reset
exarkun 1:2fe82be93e80 206 current->oldTick = getTickValue();
exarkun 1:2fe82be93e80 207 return;
exarkun 1:2fe82be93e80 208 }
exarkun 1:2fe82be93e80 209 current = current->next;
exarkun 1:2fe82be93e80 210 }
exarkun 1:2fe82be93e80 211 }