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.
Fork of Viaro_SpandiConcime_V2b by
main.cpp@0:b0a79a3a9da8, 2018-06-13 (annotated)
- Committer:
- nerit
- Date:
- Wed Jun 13 08:41:23 2018 +0000
- Revision:
- 0:b0a79a3a9da8
- Child:
- 1:59c30e854dfb
ControlloSpandiconcime V2 Viaro
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nerit | 0:b0a79a3a9da8 | 1 | #include "main.h" |
| nerit | 0:b0a79a3a9da8 | 2 | |
| nerit | 0:b0a79a3a9da8 | 3 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 4 | void DC_prepare(){ |
| nerit | 0:b0a79a3a9da8 | 5 | // direction or brake preparation |
| nerit | 0:b0a79a3a9da8 | 6 | if (DC_brake==1){ |
| nerit | 0:b0a79a3a9da8 | 7 | SDmotorInA=0; |
| nerit | 0:b0a79a3a9da8 | 8 | SDmotorInB=0; |
| nerit | 0:b0a79a3a9da8 | 9 | }else{ |
| nerit | 0:b0a79a3a9da8 | 10 | if (DC_forward==1){ |
| nerit | 0:b0a79a3a9da8 | 11 | SDmotorInA=1; |
| nerit | 0:b0a79a3a9da8 | 12 | SDmotorInB=0; |
| nerit | 0:b0a79a3a9da8 | 13 | }else{ |
| nerit | 0:b0a79a3a9da8 | 14 | SDmotorInA=0; |
| nerit | 0:b0a79a3a9da8 | 15 | SDmotorInB=1; |
| nerit | 0:b0a79a3a9da8 | 16 | } |
| nerit | 0:b0a79a3a9da8 | 17 | } |
| nerit | 0:b0a79a3a9da8 | 18 | // fault reading |
| nerit | 0:b0a79a3a9da8 | 19 | if (SDmotorInA==1){ |
| nerit | 0:b0a79a3a9da8 | 20 | SD_faultA=1; |
| nerit | 0:b0a79a3a9da8 | 21 | }else{ |
| nerit | 0:b0a79a3a9da8 | 22 | SD_faultA=0; |
| nerit | 0:b0a79a3a9da8 | 23 | } |
| nerit | 0:b0a79a3a9da8 | 24 | if (SDmotorInB==1){ |
| nerit | 0:b0a79a3a9da8 | 25 | SD_faultB=1; |
| nerit | 0:b0a79a3a9da8 | 26 | }else{ |
| nerit | 0:b0a79a3a9da8 | 27 | SD_faultB=0; |
| nerit | 0:b0a79a3a9da8 | 28 | } |
| nerit | 0:b0a79a3a9da8 | 29 | } |
| nerit | 0:b0a79a3a9da8 | 30 | |
| nerit | 0:b0a79a3a9da8 | 31 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 32 | void OffTheMotor(){ |
| nerit | 0:b0a79a3a9da8 | 33 | MotorPwmPin.write(0); // duty cycle=off - off the motor |
| nerit | 0:b0a79a3a9da8 | 34 | StopTheMotorWeGoTooSlow=1; |
| nerit | 0:b0a79a3a9da8 | 35 | DC_brake=1; |
| nerit | 0:b0a79a3a9da8 | 36 | DC_prepare(); |
| nerit | 0:b0a79a3a9da8 | 37 | } |
| nerit | 0:b0a79a3a9da8 | 38 | |
| nerit | 0:b0a79a3a9da8 | 39 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 40 | void ReadWheelInterrupt(){ //interrupt that read the wheel sensor |
| nerit | 0:b0a79a3a9da8 | 41 | TempRead=uSWheel.read_us(); |
| nerit | 0:b0a79a3a9da8 | 42 | ReadWheelArray.push(TempRead); |
| nerit | 0:b0a79a3a9da8 | 43 | uSWheel.reset(); |
| nerit | 0:b0a79a3a9da8 | 44 | } |
| nerit | 0:b0a79a3a9da8 | 45 | |
| nerit | 0:b0a79a3a9da8 | 46 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 47 | void ReadMotorInterrupt(){ //interrupt that read the motor sensor |
| nerit | 0:b0a79a3a9da8 | 48 | TempReadM=uSMotor.read_us(); |
| nerit | 0:b0a79a3a9da8 | 49 | ReadMotorArray.push(TempReadM); |
| nerit | 0:b0a79a3a9da8 | 50 | uSMotor.reset(); |
| nerit | 0:b0a79a3a9da8 | 51 | } |
| nerit | 0:b0a79a3a9da8 | 52 | |
| nerit | 0:b0a79a3a9da8 | 53 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 54 | void CheckPercentSwitch(){ //this below checks the add/take off Percent switches, with the control of the vibrations applied |
| nerit | 0:b0a79a3a9da8 | 55 | if(PlusPercentPin==1){ |
| nerit | 0:b0a79a3a9da8 | 56 | if(ChangeStatusOfPlusPercentPinToHigh==1){ |
| nerit | 0:b0a79a3a9da8 | 57 | ChangeStatusOfPlusPercentPinToHigh=0; |
| nerit | 0:b0a79a3a9da8 | 58 | PlusPercentPinTimerToHigh=millis(); |
| nerit | 0:b0a79a3a9da8 | 59 | }else if((millis()-PlusPercentPinTimerToHigh)>VibrationTimer){ |
| nerit | 0:b0a79a3a9da8 | 60 | ChangeStatusOfPlusPercentPinToLow=1; |
| nerit | 0:b0a79a3a9da8 | 61 | PercentPlus=1; |
| nerit | 0:b0a79a3a9da8 | 62 | } |
| nerit | 0:b0a79a3a9da8 | 63 | }else{ |
| nerit | 0:b0a79a3a9da8 | 64 | if(ChangeStatusOfPlusPercentPinToLow==1){ |
| nerit | 0:b0a79a3a9da8 | 65 | ChangeStatusOfPlusPercentPinToLow=0; |
| nerit | 0:b0a79a3a9da8 | 66 | PlusPercentPinTimerToLow=millis(); |
| nerit | 0:b0a79a3a9da8 | 67 | }else if((millis()-PlusPercentPinTimerToLow)>VibrationTimer){ |
| nerit | 0:b0a79a3a9da8 | 68 | ChangeStatusOfPlusPercentPinToHigh=1; |
| nerit | 0:b0a79a3a9da8 | 69 | PercentPlus=0; |
| nerit | 0:b0a79a3a9da8 | 70 | } |
| nerit | 0:b0a79a3a9da8 | 71 | } |
| nerit | 0:b0a79a3a9da8 | 72 | |
| nerit | 0:b0a79a3a9da8 | 73 | if(MinusPercentPin==1){ |
| nerit | 0:b0a79a3a9da8 | 74 | if(ChangeStatusOfMinusPercentPinToHigh==1){ |
| nerit | 0:b0a79a3a9da8 | 75 | ChangeStatusOfMinusPercentPinToHigh=0; |
| nerit | 0:b0a79a3a9da8 | 76 | MinusPercentPinTimerToHigh=millis(); |
| nerit | 0:b0a79a3a9da8 | 77 | }else if((millis()-MinusPercentPinTimerToHigh)>VibrationTimer){ |
| nerit | 0:b0a79a3a9da8 | 78 | ChangeStatusOfMinusPercentPinToLow=1; |
| nerit | 0:b0a79a3a9da8 | 79 | PercentMinus=1; |
| nerit | 0:b0a79a3a9da8 | 80 | } |
| nerit | 0:b0a79a3a9da8 | 81 | }else{ |
| nerit | 0:b0a79a3a9da8 | 82 | if(ChangeStatusOfMinusPercentPinToLow==1){ |
| nerit | 0:b0a79a3a9da8 | 83 | ChangeStatusOfMinusPercentPinToLow=0; |
| nerit | 0:b0a79a3a9da8 | 84 | MinusPercentPinTimerToLow=millis(); |
| nerit | 0:b0a79a3a9da8 | 85 | }else if((millis()-MinusPercentPinTimerToLow)>VibrationTimer){ |
| nerit | 0:b0a79a3a9da8 | 86 | ChangeStatusOfMinusPercentPinToHigh=1; |
| nerit | 0:b0a79a3a9da8 | 87 | PercentMinus=0; |
| nerit | 0:b0a79a3a9da8 | 88 | } |
| nerit | 0:b0a79a3a9da8 | 89 | } |
| nerit | 0:b0a79a3a9da8 | 90 | |
| nerit | 0:b0a79a3a9da8 | 91 | if(PercentPlus==1 && PercentMinus==0){ |
| nerit | 0:b0a79a3a9da8 | 92 | Percent=(float)1.1; |
| nerit | 0:b0a79a3a9da8 | 93 | } |
| nerit | 0:b0a79a3a9da8 | 94 | if(PercentPlus==0 && PercentMinus==1){ |
| nerit | 0:b0a79a3a9da8 | 95 | Percent=(float)0.9; |
| nerit | 0:b0a79a3a9da8 | 96 | } |
| nerit | 0:b0a79a3a9da8 | 97 | if(PercentPlus==0 && PercentMinus==0){ |
| nerit | 0:b0a79a3a9da8 | 98 | Percent=(float)1.0; |
| nerit | 0:b0a79a3a9da8 | 99 | } |
| nerit | 0:b0a79a3a9da8 | 100 | if(PercentPlus==1 && PercentMinus==1){ |
| nerit | 0:b0a79a3a9da8 | 101 | Percent=(float)1.0; |
| nerit | 0:b0a79a3a9da8 | 102 | //GENERATE AN ERROR SOMEHOW |
| nerit | 0:b0a79a3a9da8 | 103 | } |
| nerit | 0:b0a79a3a9da8 | 104 | } |
| nerit | 0:b0a79a3a9da8 | 105 | |
| nerit | 0:b0a79a3a9da8 | 106 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 107 | void CheckMotorCorrection(){ |
| nerit | 0:b0a79a3a9da8 | 108 | ElapsedM=0; |
| nerit | 0:b0a79a3a9da8 | 109 | a=0; |
| nerit | 0:b0a79a3a9da8 | 110 | for(i=0; i<(ReadMotorArray.size()-1); i++){ |
| nerit | 0:b0a79a3a9da8 | 111 | if(ReadMotorArray[i]!=1 && ReadMotorArray[i]!=0){ //avoid reading of 1 or 0 values in the array |
| nerit | 0:b0a79a3a9da8 | 112 | a++; //number of all the valid readings |
| nerit | 0:b0a79a3a9da8 | 113 | ElapsedM=ElapsedM+ReadMotorArray[i]; //all the valid readings are summed |
| nerit | 0:b0a79a3a9da8 | 114 | } |
| nerit | 0:b0a79a3a9da8 | 115 | } |
| nerit | 0:b0a79a3a9da8 | 116 | ElapsedM=ElapsedM/a; |
| nerit | 0:b0a79a3a9da8 | 117 | if((StopTheMotorWeGoTooSlow==0) && (ElapsedM!=1) && uSMotor.read_us()>(2*ElapsedM)){ |
| nerit | 0:b0a79a3a9da8 | 118 | MotorSensorSecurityCheck=MotorSensorSecurityCheck++; |
| nerit | 0:b0a79a3a9da8 | 119 | if(MotorSensorSecurityCheck>50){ |
| nerit | 0:b0a79a3a9da8 | 120 | MotorSensorError=1; |
| nerit | 0:b0a79a3a9da8 | 121 | } |
| nerit | 0:b0a79a3a9da8 | 122 | }else{ |
| nerit | 0:b0a79a3a9da8 | 123 | if(ReadMotorArray.last()==1){ |
| nerit | 0:b0a79a3a9da8 | 124 | MotorSpeedCorrected=10000; |
| nerit | 0:b0a79a3a9da8 | 125 | }else{ |
| nerit | 0:b0a79a3a9da8 | 126 | ReadMotorSpeed=float(60000000/(ElapsedM*4)); // rev/min |
| nerit | 0:b0a79a3a9da8 | 127 | motorPID.setSetPoint(WantedMotorSpeed); |
| nerit | 0:b0a79a3a9da8 | 128 | motorPID.setProcessValue(ReadMotorSpeed); |
| nerit | 0:b0a79a3a9da8 | 129 | MotorSpeedCorrected=motorPID.compute(); |
| nerit | 0:b0a79a3a9da8 | 130 | // pc.printf("\n\nMotorSpeedCorrectedF %f ",MotorSpeedCorrected); |
| nerit | 0:b0a79a3a9da8 | 131 | // pc.printf("\nWantedMotorSpeed %d ",WantedMotorSpeed); |
| nerit | 0:b0a79a3a9da8 | 132 | // pc.printf("\nReadMotorSpeed %d ",ReadMotorSpeed); |
| nerit | 0:b0a79a3a9da8 | 133 | // pc.printf("\nElapsed %d ",Elapsed); |
| nerit | 0:b0a79a3a9da8 | 134 | // pc.printf("\nElapsedM4 %d ",Elapsed*4); |
| nerit | 0:b0a79a3a9da8 | 135 | // pc.printf("\nTrigsPerWheelRevolution %d ",TrigsPerWheelRevolution); |
| nerit | 0:b0a79a3a9da8 | 136 | // pc.printf("\nWheelToMotorRatio %f ",WheelToMotorRatio); |
| nerit | 0:b0a79a3a9da8 | 137 | // pc.printf("\nPercent %f ",Percent); |
| nerit | 0:b0a79a3a9da8 | 138 | // pc.printf("\nMotorSpeedPwm %f ",MotorSpeedPwm); |
| nerit | 0:b0a79a3a9da8 | 139 | //MotorCorrection=WantedMotorSpeed/ReadMotorSpeed; |
| nerit | 0:b0a79a3a9da8 | 140 | MotorSensorSecurityCheck=0; |
| nerit | 0:b0a79a3a9da8 | 141 | } |
| nerit | 0:b0a79a3a9da8 | 142 | } |
| nerit | 0:b0a79a3a9da8 | 143 | } |
| nerit | 0:b0a79a3a9da8 | 144 | |
| nerit | 0:b0a79a3a9da8 | 145 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 146 | void CheckTimeElapsedFromLastTrig(){ //check time Elapsed from last wheel trig |
| nerit | 0:b0a79a3a9da8 | 147 | if((uSWheel.read_us()>(ReadWheelArray.last()*DecelerationControlRatio)) || (ReadWheelArray.last()==1) ){ //if the lag between the last read and now is more than *DecelerationControlRatio* times of the last trig or more of a max limit, or equal 1 -so, no reads- (this is an error control), it assumes the speed is too slow to act and resets |
| nerit | 0:b0a79a3a9da8 | 148 | OffTheMotor(); |
| nerit | 0:b0a79a3a9da8 | 149 | }else{ |
| nerit | 0:b0a79a3a9da8 | 150 | if(StopTheMotorWeGoTooSlow==1){ |
| nerit | 0:b0a79a3a9da8 | 151 | uSMotor.reset(); //reset the the millis of PreviousM read |
| nerit | 0:b0a79a3a9da8 | 152 | for (i=0; i<ConstArrayIns; i++) { |
| nerit | 0:b0a79a3a9da8 | 153 | ReadMotorArray.push((int)1); // | this fills the wheel sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 154 | MotorCorrection=1.0f; |
| nerit | 0:b0a79a3a9da8 | 155 | } |
| nerit | 0:b0a79a3a9da8 | 156 | } |
| nerit | 0:b0a79a3a9da8 | 157 | StopTheMotorWeGoTooSlow=0; |
| nerit | 0:b0a79a3a9da8 | 158 | } |
| nerit | 0:b0a79a3a9da8 | 159 | } |
| nerit | 0:b0a79a3a9da8 | 160 | |
| nerit | 0:b0a79a3a9da8 | 161 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 162 | void SetMotorSpeed(){ |
| nerit | 0:b0a79a3a9da8 | 163 | led=0; |
| nerit | 0:b0a79a3a9da8 | 164 | CheckTimeElapsedFromLastTrig(); |
| nerit | 0:b0a79a3a9da8 | 165 | if(MotorSensorError==1){ |
| nerit | 0:b0a79a3a9da8 | 166 | OffTheMotor(); |
| nerit | 0:b0a79a3a9da8 | 167 | // GENERATE MOTOR SENSOR ERROR |
| nerit | 0:b0a79a3a9da8 | 168 | } |
| nerit | 0:b0a79a3a9da8 | 169 | if(StopTheMotorWeGoTooSlow==0){ |
| nerit | 0:b0a79a3a9da8 | 170 | Elapsed=0; |
| nerit | 0:b0a79a3a9da8 | 171 | a=0; |
| nerit | 0:b0a79a3a9da8 | 172 | for(i=0; i<(ReadWheelArray.size()-1); i++){ |
| nerit | 0:b0a79a3a9da8 | 173 | if(ReadWheelArray[i]!=1 && ReadWheelArray[i]!=0){ //avoid reading of 1 or 0 values in the array |
| nerit | 0:b0a79a3a9da8 | 174 | a++; //number of all the valid readings |
| nerit | 0:b0a79a3a9da8 | 175 | Elapsed=Elapsed+ReadWheelArray[i]; //all the valid readings are summed |
| nerit | 0:b0a79a3a9da8 | 176 | } |
| nerit | 0:b0a79a3a9da8 | 177 | } |
| nerit | 0:b0a79a3a9da8 | 178 | Elapsed=Elapsed/a; //calculation of avarage of the valid readings |
| nerit | 0:b0a79a3a9da8 | 179 | CheckPercentSwitch(); |
| nerit | 0:b0a79a3a9da8 | 180 | // BELOW=(( WHEEL_REVOLUTIONS/MINUTES )* RATIO CHANGE * +/- % ); |
| nerit | 0:b0a79a3a9da8 | 181 | WantedMotorSpeed=(float)((60000000/(Elapsed*TrigsPerWheelRevolution))*WheelToMotorRatio*Percent); // rev/min |
| nerit | 0:b0a79a3a9da8 | 182 | if(MachineType=="idraulic"){ |
| nerit | 0:b0a79a3a9da8 | 183 | MotorSpeedCorrected=(float)((WantedMotorSpeed*(100-MinMotorPwm)/MaxMotorSpeed)+MinMotorPwm)/100.0f; //this pwm calculation accept the variable "MinMotorPwm" to set the minimal pwm point at which the motor can start. the scale won't be 0-255, but MinMotorPwm-255 |
| nerit | 0:b0a79a3a9da8 | 184 | } |
| nerit | 0:b0a79a3a9da8 | 185 | MotorPwmPin.write(MotorSpeedCorrected); |
| nerit | 0:b0a79a3a9da8 | 186 | led=1; |
| nerit | 0:b0a79a3a9da8 | 187 | } |
| nerit | 0:b0a79a3a9da8 | 188 | } |
| nerit | 0:b0a79a3a9da8 | 189 | |
| nerit | 0:b0a79a3a9da8 | 190 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 191 | void SwitchOnOff(){ //this below checks the on/off Percent switches, with the control of the vibrations and the Previous status (for variable reset purposes) applied |
| nerit | 0:b0a79a3a9da8 | 192 | if(OnOffPin==1){ |
| nerit | 0:b0a79a3a9da8 | 193 | if(ChangeStatusOfOnOffPinToHigh==1){ |
| nerit | 0:b0a79a3a9da8 | 194 | ChangeStatusOfOnOffPinToHigh=0; |
| nerit | 0:b0a79a3a9da8 | 195 | OnOffPinTimerToHigh=millis(); |
| nerit | 0:b0a79a3a9da8 | 196 | }else if((millis()-OnOffPinTimerToHigh)>VibrationTimer){ |
| nerit | 0:b0a79a3a9da8 | 197 | if(ChangeFromOffToOn==1){ |
| nerit | 0:b0a79a3a9da8 | 198 | uSWheel.reset(); |
| nerit | 0:b0a79a3a9da8 | 199 | uSMotor.reset(); |
| nerit | 0:b0a79a3a9da8 | 200 | MotorCorrection=(float)1; |
| nerit | 0:b0a79a3a9da8 | 201 | MotorSensorError=0; |
| nerit | 0:b0a79a3a9da8 | 202 | MotorSensorSecurityCheck=0; |
| nerit | 0:b0a79a3a9da8 | 203 | StopTheMotorWeGoTooSlow=0; |
| nerit | 0:b0a79a3a9da8 | 204 | for (i=0; i<ConstArrayIns; i++) { // | |
| nerit | 0:b0a79a3a9da8 | 205 | ReadWheelArray.push((int)1); // | this fills the wheel sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 206 | ReadMotorArray.push((int)1); // | this fills the wheel sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 207 | } // | |
| nerit | 0:b0a79a3a9da8 | 208 | ChangeFromOffToOn=0; |
| nerit | 0:b0a79a3a9da8 | 209 | } |
| nerit | 0:b0a79a3a9da8 | 210 | DC_brake=0; |
| nerit | 0:b0a79a3a9da8 | 211 | DC_prepare(); |
| nerit | 0:b0a79a3a9da8 | 212 | SetMotorSpeed(); |
| nerit | 0:b0a79a3a9da8 | 213 | } |
| nerit | 0:b0a79a3a9da8 | 214 | }else{ |
| nerit | 0:b0a79a3a9da8 | 215 | ChangeStatusOfOnOffPinToHigh=1; |
| nerit | 0:b0a79a3a9da8 | 216 | for (i=0; i<ConstArrayIns; i++) { |
| nerit | 0:b0a79a3a9da8 | 217 | ReadWheelArray.push((int)1); // | this fills the wheel sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 218 | ReadMotorArray.push((int)1); // | this fills the motor sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 219 | } |
| nerit | 0:b0a79a3a9da8 | 220 | ChangeFromOffToOn=1; |
| nerit | 0:b0a79a3a9da8 | 221 | OffTheMotor(); |
| nerit | 0:b0a79a3a9da8 | 222 | } |
| nerit | 0:b0a79a3a9da8 | 223 | } |
| nerit | 0:b0a79a3a9da8 | 224 | |
| nerit | 0:b0a79a3a9da8 | 225 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 226 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 227 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 228 | int main() { |
| nerit | 0:b0a79a3a9da8 | 229 | wait(1); |
| nerit | 0:b0a79a3a9da8 | 230 | millisStart(); |
| nerit | 0:b0a79a3a9da8 | 231 | uSMotor.start(); |
| nerit | 0:b0a79a3a9da8 | 232 | uSWheel.start(); |
| nerit | 0:b0a79a3a9da8 | 233 | WheelToMotorRatio=(float)(180/18); //RUOTA FONICA > MOTORE |
| nerit | 0:b0a79a3a9da8 | 234 | MotorPwmPin.period_us(2000); // freq 1khz |
| nerit | 0:b0a79a3a9da8 | 235 | MotorPwmPin.write(0.0f); // duty cycle=off |
| nerit | 0:b0a79a3a9da8 | 236 | OffTheMotor(); |
| nerit | 0:b0a79a3a9da8 | 237 | if(MachineType=="electric"){ |
| nerit | 0:b0a79a3a9da8 | 238 | MSToMotorNewCheck.attach(&CheckMotorCorrection, 0.1); //check motor correction every xx seconds |
| nerit | 0:b0a79a3a9da8 | 239 | } |
| nerit | 0:b0a79a3a9da8 | 240 | for (i=0; i<ConstArrayIns; i++) { |
| nerit | 0:b0a79a3a9da8 | 241 | ReadWheelArray.push((int)1); |
| nerit | 0:b0a79a3a9da8 | 242 | ReadMotorArray.push((int)1); // | this fills the wheel sensor array with "1" |
| nerit | 0:b0a79a3a9da8 | 243 | } |
| nerit | 0:b0a79a3a9da8 | 244 | // pc.printf("Hello World"); |
| nerit | 0:b0a79a3a9da8 | 245 | // pc.printf("%d",millis()); |
| nerit | 0:b0a79a3a9da8 | 246 | |
| nerit | 0:b0a79a3a9da8 | 247 | WheelSensorPin.rise(&ReadWheelInterrupt); //interrupt for wheel sensor, trigs when changes from 0 to 1 |
| nerit | 0:b0a79a3a9da8 | 248 | MotorSensorPin.rise(&ReadMotorInterrupt); //interrupt for motor sensor, trigs when changes from 0 to 1 |
| nerit | 0:b0a79a3a9da8 | 249 | |
| nerit | 0:b0a79a3a9da8 | 250 | |
| nerit | 0:b0a79a3a9da8 | 251 | //Analog input from 0.0 to 3.3V |
| nerit | 0:b0a79a3a9da8 | 252 | motorPID.setInputLimits(0, 42000); //70*secondosinaminute*trigsperwheelrevolutions |
| nerit | 0:b0a79a3a9da8 | 253 | //Pwm output from 0.0 to 1.0 |
| nerit | 0:b0a79a3a9da8 | 254 | motorPID.setOutputLimits(0.0f, 1.0f); |
| nerit | 0:b0a79a3a9da8 | 255 | motorPID.setMode(1); |
| nerit | 0:b0a79a3a9da8 | 256 | //If there's a bias. |
| nerit | 0:b0a79a3a9da8 | 257 | //motorPID.setBias(0.3); |
| nerit | 0:b0a79a3a9da8 | 258 | //motorPID.setMode(AUTO); |
| nerit | 0:b0a79a3a9da8 | 259 | //We want the process variable to be 1.7V |
| nerit | 0:b0a79a3a9da8 | 260 | motorPID.setSetPoint(21000); |
| nerit | 0:b0a79a3a9da8 | 261 | |
| nerit | 0:b0a79a3a9da8 | 262 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 263 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 264 | //*************************************************** |
| nerit | 0:b0a79a3a9da8 | 265 | while (1){ |
| nerit | 0:b0a79a3a9da8 | 266 | SwitchOnOff(); |
| nerit | 0:b0a79a3a9da8 | 267 | } |
| nerit | 0:b0a79a3a9da8 | 268 | } |
