![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Paints a rotating FabLab Munich logo on an oscilloscope screen
main.cpp@0:5276f16d6ac8, 2015-06-23 (annotated)
- Committer:
- drayde
- Date:
- Tue Jun 23 08:32:04 2015 +0000
- Revision:
- 0:5276f16d6ac8
Working version with blanking
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
drayde | 0:5276f16d6ac8 | 1 | #include "mbed.h" |
drayde | 0:5276f16d6ac8 | 2 | #include "FastPWM.h" |
drayde | 0:5276f16d6ac8 | 3 | |
drayde | 0:5276f16d6ac8 | 4 | #define min(x,y) ((x > y) ? y : x) |
drayde | 0:5276f16d6ac8 | 5 | #define max(x,y) ((x > y) ? x : y) |
drayde | 0:5276f16d6ac8 | 6 | |
drayde | 0:5276f16d6ac8 | 7 | FastPWM pwmout1(p21); |
drayde | 0:5276f16d6ac8 | 8 | FastPWM pwmout2(p22); |
drayde | 0:5276f16d6ac8 | 9 | DigitalOut gnd(p23); |
drayde | 0:5276f16d6ac8 | 10 | DigitalOut zout(p30); |
drayde | 0:5276f16d6ac8 | 11 | |
drayde | 0:5276f16d6ac8 | 12 | |
drayde | 0:5276f16d6ac8 | 13 | const float waitTime = 0.000005f; |
drayde | 0:5276f16d6ac8 | 14 | const float waitTimeOnOff = waitTime * 5; |
drayde | 0:5276f16d6ac8 | 15 | |
drayde | 0:5276f16d6ac8 | 16 | const uint16_t linesCount = 3; |
drayde | 0:5276f16d6ac8 | 17 | uint16_t lines[3] = { 50, 58, 59 }; |
drayde | 0:5276f16d6ac8 | 18 | |
drayde | 0:5276f16d6ac8 | 19 | const uint16_t count = 50 + 58 + 59; |
drayde | 0:5276f16d6ac8 | 20 | float tline[count*2] = { |
drayde | 0:5276f16d6ac8 | 21 | 48.369133f, 28.8248990f, |
drayde | 0:5276f16d6ac8 | 22 | 48.368286f, 39.8623760f, |
drayde | 0:5276f16d6ac8 | 23 | 48.351325f, 46.3102450f, |
drayde | 0:5276f16d6ac8 | 24 | 48.334335f, 52.7581170f, |
drayde | 0:5276f16d6ac8 | 25 | 49.475196f, 53.4183200f, |
drayde | 0:5276f16d6ac8 | 26 | 50.616059f, 54.0785220f, |
drayde | 0:5276f16d6ac8 | 27 | 53.243757f, 55.5576550f, |
drayde | 0:5276f16d6ac8 | 28 | 54.606233f, 56.1411410f, |
drayde | 0:5276f16d6ac8 | 29 | 57.114615f, 56.6511700f, |
drayde | 0:5276f16d6ac8 | 30 | 59.375927f, 56.5156330f, |
drayde | 0:5276f16d6ac8 | 31 | 60.874326f, 55.9204990f, |
drayde | 0:5276f16d6ac8 | 32 | 62.091060f, 55.0463890f, |
drayde | 0:5276f16d6ac8 | 33 | 63.381650f, 52.9297760f, |
drayde | 0:5276f16d6ac8 | 34 | 64.112835f, 49.9910160f, |
drayde | 0:5276f16d6ac8 | 35 | 64.245790f, 32.3980810f, |
drayde | 0:5276f16d6ac8 | 36 | 64.135779f, 15.2194990f, |
drayde | 0:5276f16d6ac8 | 37 | 61.394651f, 8.323464f, |
drayde | 0:5276f16d6ac8 | 38 | 56.287969f, 3.161953f, |
drayde | 0:5276f16d6ac8 | 39 | 53.549629f, 1.670959f, |
drayde | 0:5276f16d6ac8 | 40 | 50.809912f, 0.864901f, |
drayde | 0:5276f16d6ac8 | 41 | 48.551553f, 0.663871f, |
drayde | 0:5276f16d6ac8 | 42 | 46.319378f, 0.703653f, |
drayde | 0:5276f16d6ac8 | 43 | 46.319384f, 0.703653f, |
drayde | 0:5276f16d6ac8 | 44 | 41.771884f, 1.630293f, |
drayde | 0:5276f16d6ac8 | 45 | 37.661210f, 3.244895f, |
drayde | 0:5276f16d6ac8 | 46 | 25.652307f, 10.270239f, |
drayde | 0:5276f16d6ac8 | 47 | 10.447255f, 19.245676f, |
drayde | 0:5276f16d6ac8 | 48 | 6.857494f, 21.672420f, |
drayde | 0:5276f16d6ac8 | 49 | 4.501644f, 24.214656f, |
drayde | 0:5276f16d6ac8 | 50 | 2.165276f, 28.217320f, |
drayde | 0:5276f16d6ac8 | 51 | 1.003558f, 32.887381f, |
drayde | 0:5276f16d6ac8 | 52 | 0.753147f, 36.341157f, |
drayde | 0:5276f16d6ac8 | 53 | 0.721389f, 42.459346f, |
drayde | 0:5276f16d6ac8 | 54 | 0.739268f, 44.880336f, |
drayde | 0:5276f16d6ac8 | 55 | 0.757146f, 47.301322f, |
drayde | 0:5276f16d6ac8 | 56 | 0.937623f, 46.759876f, |
drayde | 0:5276f16d6ac8 | 57 | 1.118101f, 46.218430f, |
drayde | 0:5276f16d6ac8 | 58 | 2.914027f, 42.413677f, |
drayde | 0:5276f16d6ac8 | 59 | 5.642516f, 39.020793f, |
drayde | 0:5276f16d6ac8 | 60 | 7.916307f, 37.067662f, |
drayde | 0:5276f16d6ac8 | 61 | 12.748684f, 34.2152480f, |
drayde | 0:5276f16d6ac8 | 62 | 22.498228f, 28.6411190f, |
drayde | 0:5276f16d6ac8 | 63 | 32.483871f, 22.8936240f, |
drayde | 0:5276f16d6ac8 | 64 | 36.322240f, 20.7285960f, |
drayde | 0:5276f16d6ac8 | 65 | 38.208913f, 19.9188070f, |
drayde | 0:5276f16d6ac8 | 66 | 41.846881f, 19.3307290f, |
drayde | 0:5276f16d6ac8 | 67 | 44.771649f, 20.3007020f, |
drayde | 0:5276f16d6ac8 | 68 | 46.961058f, 22.6148930f, |
drayde | 0:5276f16d6ac8 | 69 | 48.222403f, 26.0716500f, |
drayde | 0:5276f16d6ac8 | 70 | 48.369133f, 28.8248990f, |
drayde | 0:5276f16d6ac8 | 71 | |
drayde | 0:5276f16d6ac8 | 72 | 31.218976f, 43.621458f, |
drayde | 0:5276f16d6ac8 | 73 | 28.831117f, 44.931821f, |
drayde | 0:5276f16d6ac8 | 74 | 26.009916f, 46.631259f, |
drayde | 0:5276f16d6ac8 | 75 | 23.556446f, 49.026798f, |
drayde | 0:5276f16d6ac8 | 76 | 22.262607f, 51.745174f, |
drayde | 0:5276f16d6ac8 | 77 | 22.384654f, 54.559435f, |
drayde | 0:5276f16d6ac8 | 78 | 24.067583f, 57.178886f, |
drayde | 0:5276f16d6ac8 | 79 | 25.752292f, 58.675306f, |
drayde | 0:5276f16d6ac8 | 80 | 28.113957f, 60.172644f, |
drayde | 0:5276f16d6ac8 | 81 | 40.067016f, 67.088425f, |
drayde | 0:5276f16d6ac8 | 82 | 51.982667f, 74.028337f, |
drayde | 0:5276f16d6ac8 | 83 | 54.866337f, 75.620116f, |
drayde | 0:5276f16d6ac8 | 84 | 56.919580f, 76.396709f, |
drayde | 0:5276f16d6ac8 | 85 | 59.404296f, 76.966447f, |
drayde | 0:5276f16d6ac8 | 86 | 62.191090f, 77.081175f, |
drayde | 0:5276f16d6ac8 | 87 | 64.275877f, 77.036236f, |
drayde | 0:5276f16d6ac8 | 88 | 65.584705f, 76.841860f, |
drayde | 0:5276f16d6ac8 | 89 | 70.340268f, 75.182687f, |
drayde | 0:5276f16d6ac8 | 90 | 74.042962f, 72.548870f, |
drayde | 0:5276f16d6ac8 | 91 | 76.787694f, 68.775052f, |
drayde | 0:5276f16d6ac8 | 92 | 78.626446f, 63.868977f, |
drayde | 0:5276f16d6ac8 | 93 | 79.264536f, 60.552604f, |
drayde | 0:5276f16d6ac8 | 94 | 79.381633f, 56.203943f, |
drayde | 0:5276f16d6ac8 | 95 | 79.252152f, 38.311577f, |
drayde | 0:5276f16d6ac8 | 96 | 79.104273f, 25.613174f, |
drayde | 0:5276f16d6ac8 | 97 | 78.591456f, 22.154913f, |
drayde | 0:5276f16d6ac8 | 98 | 77.214888f, 18.660728f, |
drayde | 0:5276f16d6ac8 | 99 | 76.492625f, 17.328795f, |
drayde | 0:5276f16d6ac8 | 100 | 75.812292f, 16.259090f, |
drayde | 0:5276f16d6ac8 | 101 | 72.476318f, 12.892882f, |
drayde | 0:5276f16d6ac8 | 102 | 67.620877f, 9.627348f, |
drayde | 0:5276f16d6ac8 | 103 | 65.809337f, 8.594852f, |
drayde | 0:5276f16d6ac8 | 104 | 63.213505f, 7.108777f, |
drayde | 0:5276f16d6ac8 | 105 | 60.964386f, 5.831115f, |
drayde | 0:5276f16d6ac8 | 106 | 59.986438f, 5.299696f, |
drayde | 0:5276f16d6ac8 | 107 | 59.980032f, 5.353375f, |
drayde | 0:5276f16d6ac8 | 108 | 60.066736f, 5.482429f, |
drayde | 0:5276f16d6ac8 | 109 | 60.066708f, 5.482429f, |
drayde | 0:5276f16d6ac8 | 110 | 60.306470f, 5.764849f, |
drayde | 0:5276f16d6ac8 | 111 | 60.668044f, 6.187257f, |
drayde | 0:5276f16d6ac8 | 112 | 61.959456f, 7.984005f, |
drayde | 0:5276f16d6ac8 | 113 | 63.130244f, 10.042883f, |
drayde | 0:5276f16d6ac8 | 114 | 63.985197f, 12.073989f, |
drayde | 0:5276f16d6ac8 | 115 | 64.609554f, 14.235729f, |
drayde | 0:5276f16d6ac8 | 116 | 64.757758f, 14.858139f, |
drayde | 0:5276f16d6ac8 | 117 | 64.905961f, 15.480547f, |
drayde | 0:5276f16d6ac8 | 118 | 64.890439f, 23.990692f, |
drayde | 0:5276f16d6ac8 | 119 | 64.874916f, 32.500838f, |
drayde | 0:5276f16d6ac8 | 120 | 64.824032f, 45.300649f, |
drayde | 0:5276f16d6ac8 | 121 | 64.736554f, 50.304271f, |
drayde | 0:5276f16d6ac8 | 122 | 63.087355f, 54.874838f, |
drayde | 0:5276f16d6ac8 | 123 | 59.623785f, 57.154567f, |
drayde | 0:5276f16d6ac8 | 124 | 57.634136f, 57.346340f, |
drayde | 0:5276f16d6ac8 | 125 | 55.508274f, 57.100453f, |
drayde | 0:5276f16d6ac8 | 126 | 51.885523f, 55.531368f, |
drayde | 0:5276f16d6ac8 | 127 | 35.685767f, 46.165152f, |
drayde | 0:5276f16d6ac8 | 128 | 32.571639f, 44.368667f, |
drayde | 0:5276f16d6ac8 | 129 | 31.218976f, 43.621458f, |
drayde | 0:5276f16d6ac8 | 130 | |
drayde | 0:5276f16d6ac8 | 131 | 42.495038f, 36.333182f, |
drayde | 0:5276f16d6ac8 | 132 | 47.729039f, 33.339953f, |
drayde | 0:5276f16d6ac8 | 133 | 47.729039f, 31.792619f, |
drayde | 0:5276f16d6ac8 | 134 | 47.729039f, 30.245284f, |
drayde | 0:5276f16d6ac8 | 135 | 47.625985f, 26.717286f, |
drayde | 0:5276f16d6ac8 | 136 | 47.164493f, 24.643814f, |
drayde | 0:5276f16d6ac8 | 137 | 46.478075f, 23.109990f, |
drayde | 0:5276f16d6ac8 | 138 | 45.520018f, 21.850785f, |
drayde | 0:5276f16d6ac8 | 139 | 43.226395f, 20.277306f, |
drayde | 0:5276f16d6ac8 | 140 | 40.550203f, 20.025078f, |
drayde | 0:5276f16d6ac8 | 141 | 37.608442f, 20.881826f, |
drayde | 0:5276f16d6ac8 | 142 | 32.431660f, 23.694032f, |
drayde | 0:5276f16d6ac8 | 143 | 22.173406f, 29.600607f, |
drayde | 0:5276f16d6ac8 | 144 | 12.539847f, 35.112122f, |
drayde | 0:5276f16d6ac8 | 145 | 8.374712f, 37.564272f, |
drayde | 0:5276f16d6ac8 | 146 | 6.497140f, 39.076506f, |
drayde | 0:5276f16d6ac8 | 147 | 2.228777f, 45.204719f, |
drayde | 0:5276f16d6ac8 | 148 | 1.118711f, 48.737560f, |
drayde | 0:5276f16d6ac8 | 149 | 0.740503f, 52.468628f, |
drayde | 0:5276f16d6ac8 | 150 | 1.260493f, 55.998071f, |
drayde | 0:5276f16d6ac8 | 151 | 2.775410f, 59.505567f, |
drayde | 0:5276f16d6ac8 | 152 | 8.519716f, 65.985043f, |
drayde | 0:5276f16d6ac8 | 153 | 10.531177f, 67.378454f, |
drayde | 0:5276f16d6ac8 | 154 | 15.567997f, 70.274288f, |
drayde | 0:5276f16d6ac8 | 155 | 21.383807f, 73.564774f, |
drayde | 0:5276f16d6ac8 | 156 | 28.254901f, 77.453774f, |
drayde | 0:5276f16d6ac8 | 157 | 39.292928f, 83.643126f, |
drayde | 0:5276f16d6ac8 | 158 | 42.354181f, 84.917021f, |
drayde | 0:5276f16d6ac8 | 159 | 46.105708f, 85.540547f, |
drayde | 0:5276f16d6ac8 | 160 | 49.712607f, 85.446400f, |
drayde | 0:5276f16d6ac8 | 161 | 54.147520f, 84.133871f, |
drayde | 0:5276f16d6ac8 | 162 | 59.058497f, 81.676193f, |
drayde | 0:5276f16d6ac8 | 163 | 60.921011f, 80.589179f, |
drayde | 0:5276f16d6ac8 | 164 | 63.492770f, 79.108980f, |
drayde | 0:5276f16d6ac8 | 165 | 65.646859f, 77.865843f, |
drayde | 0:5276f16d6ac8 | 166 | 66.505190f, 77.348785f, |
drayde | 0:5276f16d6ac8 | 167 | 66.096247f, 77.412454f, |
drayde | 0:5276f16d6ac8 | 168 | 65.203488f, 77.565531f, |
drayde | 0:5276f16d6ac8 | 169 | 62.315773f, 77.788296f, |
drayde | 0:5276f16d6ac8 | 170 | 59.386050f, 77.614347f, |
drayde | 0:5276f16d6ac8 | 171 | 56.239433f, 76.880110f, |
drayde | 0:5276f16d6ac8 | 172 | 53.680922f, 75.794481f, |
drayde | 0:5276f16d6ac8 | 173 | 51.913305f, 74.763871f, |
drayde | 0:5276f16d6ac8 | 174 | 48.616599f, 72.838788f, |
drayde | 0:5276f16d6ac8 | 175 | 38.314969f, 66.847449f, |
drayde | 0:5276f16d6ac8 | 176 | 28.321931f, 61.061033f, |
drayde | 0:5276f16d6ac8 | 177 | 26.512461f, 59.978255f, |
drayde | 0:5276f16d6ac8 | 178 | 25.293782f, 59.179132f, |
drayde | 0:5276f16d6ac8 | 179 | 23.881259f, 57.943434f, |
drayde | 0:5276f16d6ac8 | 180 | 22.714720f, 56.673829f, |
drayde | 0:5276f16d6ac8 | 181 | 22.121329f, 55.670882f, |
drayde | 0:5276f16d6ac8 | 182 | 21.667488f, 54.594427f, |
drayde | 0:5276f16d6ac8 | 183 | 21.527371f, 53.052012f, |
drayde | 0:5276f16d6ac8 | 184 | 21.682559f, 51.350046f, |
drayde | 0:5276f16d6ac8 | 185 | 23.171367f, 48.408091f, |
drayde | 0:5276f16d6ac8 | 186 | 25.935771f, 45.874712f, |
drayde | 0:5276f16d6ac8 | 187 | 29.616191f, 43.719389f, |
drayde | 0:5276f16d6ac8 | 188 | 37.261038f, 39.326411f, |
drayde | 0:5276f16d6ac8 | 189 | 42.495038f, 36.333182f, |
drayde | 0:5276f16d6ac8 | 190 | }; |
drayde | 0:5276f16d6ac8 | 191 | |
drayde | 0:5276f16d6ac8 | 192 | uint16_t line[count*2]; |
drayde | 0:5276f16d6ac8 | 193 | |
drayde | 0:5276f16d6ac8 | 194 | uint16_t xPos, yPos; |
drayde | 0:5276f16d6ac8 | 195 | int32_t offsetx; |
drayde | 0:5276f16d6ac8 | 196 | int32_t offsety; |
drayde | 0:5276f16d6ac8 | 197 | |
drayde | 0:5276f16d6ac8 | 198 | void lineFromTo(int32_t tx1, int32_t ty1, int32_t tx2, int32_t ty2) |
drayde | 0:5276f16d6ac8 | 199 | { |
drayde | 0:5276f16d6ac8 | 200 | int32_t yd = (ty2 - ty1); |
drayde | 0:5276f16d6ac8 | 201 | int32_t xd = (tx2 - tx1); |
drayde | 0:5276f16d6ac8 | 202 | |
drayde | 0:5276f16d6ac8 | 203 | if (abs(xd) > abs(yd)) |
drayde | 0:5276f16d6ac8 | 204 | { |
drayde | 0:5276f16d6ac8 | 205 | int32_t yinc = yd / ((tx2-tx1) >> 16); |
drayde | 0:5276f16d6ac8 | 206 | int32_t y = ty1; |
drayde | 0:5276f16d6ac8 | 207 | uint16_t x = tx1 >> 16; |
drayde | 0:5276f16d6ac8 | 208 | uint16_t x2 = tx2 >> 16; |
drayde | 0:5276f16d6ac8 | 209 | |
drayde | 0:5276f16d6ac8 | 210 | if (xd == 0) |
drayde | 0:5276f16d6ac8 | 211 | return; |
drayde | 0:5276f16d6ac8 | 212 | |
drayde | 0:5276f16d6ac8 | 213 | while (1) |
drayde | 0:5276f16d6ac8 | 214 | { |
drayde | 0:5276f16d6ac8 | 215 | pwmout1.pulsewidth_ticks(x); |
drayde | 0:5276f16d6ac8 | 216 | pwmout2.pulsewidth_ticks((uint16_t)(y >> 16)); |
drayde | 0:5276f16d6ac8 | 217 | wait(waitTime); |
drayde | 0:5276f16d6ac8 | 218 | if (x == x2) |
drayde | 0:5276f16d6ac8 | 219 | break; |
drayde | 0:5276f16d6ac8 | 220 | if (xd > 0) { |
drayde | 0:5276f16d6ac8 | 221 | y += yinc; |
drayde | 0:5276f16d6ac8 | 222 | x++; |
drayde | 0:5276f16d6ac8 | 223 | } else { |
drayde | 0:5276f16d6ac8 | 224 | y -= yinc; |
drayde | 0:5276f16d6ac8 | 225 | x--; |
drayde | 0:5276f16d6ac8 | 226 | } |
drayde | 0:5276f16d6ac8 | 227 | } |
drayde | 0:5276f16d6ac8 | 228 | } |
drayde | 0:5276f16d6ac8 | 229 | else |
drayde | 0:5276f16d6ac8 | 230 | { |
drayde | 0:5276f16d6ac8 | 231 | int32_t xinc = xd / ((ty2-ty1) >> 16); |
drayde | 0:5276f16d6ac8 | 232 | int32_t x = tx1; |
drayde | 0:5276f16d6ac8 | 233 | uint16_t y = ty1 >> 16; |
drayde | 0:5276f16d6ac8 | 234 | uint16_t y2 = ty2 >> 16; |
drayde | 0:5276f16d6ac8 | 235 | |
drayde | 0:5276f16d6ac8 | 236 | if (yd == 0) |
drayde | 0:5276f16d6ac8 | 237 | return; |
drayde | 0:5276f16d6ac8 | 238 | |
drayde | 0:5276f16d6ac8 | 239 | while (1) |
drayde | 0:5276f16d6ac8 | 240 | { |
drayde | 0:5276f16d6ac8 | 241 | pwmout1.pulsewidth_ticks((uint16_t)(x >> 16)); |
drayde | 0:5276f16d6ac8 | 242 | pwmout2.pulsewidth_ticks(y); |
drayde | 0:5276f16d6ac8 | 243 | wait(waitTime); |
drayde | 0:5276f16d6ac8 | 244 | if (y == y2) |
drayde | 0:5276f16d6ac8 | 245 | break; |
drayde | 0:5276f16d6ac8 | 246 | if (yd > 0) { |
drayde | 0:5276f16d6ac8 | 247 | x += xinc; |
drayde | 0:5276f16d6ac8 | 248 | y++; |
drayde | 0:5276f16d6ac8 | 249 | } else { |
drayde | 0:5276f16d6ac8 | 250 | x -= xinc; |
drayde | 0:5276f16d6ac8 | 251 | y--; |
drayde | 0:5276f16d6ac8 | 252 | } |
drayde | 0:5276f16d6ac8 | 253 | } |
drayde | 0:5276f16d6ac8 | 254 | } |
drayde | 0:5276f16d6ac8 | 255 | } |
drayde | 0:5276f16d6ac8 | 256 | |
drayde | 0:5276f16d6ac8 | 257 | |
drayde | 0:5276f16d6ac8 | 258 | void lineWithRotation(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) |
drayde | 0:5276f16d6ac8 | 259 | { |
drayde | 0:5276f16d6ac8 | 260 | // calculate with 32 bits to have the necessary precision |
drayde | 0:5276f16d6ac8 | 261 | int32_t tx1 = x1 << 16; |
drayde | 0:5276f16d6ac8 | 262 | int32_t ty1 = y1 << 16; |
drayde | 0:5276f16d6ac8 | 263 | int32_t tx2 = x2 << 16; |
drayde | 0:5276f16d6ac8 | 264 | int32_t ty2 = y2 << 16; |
drayde | 0:5276f16d6ac8 | 265 | |
drayde | 0:5276f16d6ac8 | 266 | const int32_t horizon = 100; |
drayde | 0:5276f16d6ac8 | 267 | ty1 += (tx1 - (127 << 16)) * offsety / 127 * (y1 - horizon) / 127; |
drayde | 0:5276f16d6ac8 | 268 | ty2 += (tx2 - (127 << 16)) * offsety / 127 * (y2 - horizon) / 127; |
drayde | 0:5276f16d6ac8 | 269 | |
drayde | 0:5276f16d6ac8 | 270 | tx1 = (127 << 16) + (tx1 - (127 << 16)) * offsetx / 127; |
drayde | 0:5276f16d6ac8 | 271 | tx2 = (127 << 16) + (tx2 - (127 << 16)) * offsetx / 127; |
drayde | 0:5276f16d6ac8 | 272 | |
drayde | 0:5276f16d6ac8 | 273 | lineFromTo(tx1, ty1, tx2, ty2); |
drayde | 0:5276f16d6ac8 | 274 | } |
drayde | 0:5276f16d6ac8 | 275 | |
drayde | 0:5276f16d6ac8 | 276 | |
drayde | 0:5276f16d6ac8 | 277 | void setRotation(float rotation) |
drayde | 0:5276f16d6ac8 | 278 | { |
drayde | 0:5276f16d6ac8 | 279 | offsetx = (int32_t)(127 * sin(rotation)); |
drayde | 0:5276f16d6ac8 | 280 | offsety = (int32_t)(30 * cos(rotation)); |
drayde | 0:5276f16d6ac8 | 281 | } |
drayde | 0:5276f16d6ac8 | 282 | |
drayde | 0:5276f16d6ac8 | 283 | void moveTo(uint16_t x, uint16_t y) |
drayde | 0:5276f16d6ac8 | 284 | { |
drayde | 0:5276f16d6ac8 | 285 | lineWithRotation(xPos, yPos, x, y); |
drayde | 0:5276f16d6ac8 | 286 | xPos = x; |
drayde | 0:5276f16d6ac8 | 287 | yPos = y; |
drayde | 0:5276f16d6ac8 | 288 | } |
drayde | 0:5276f16d6ac8 | 289 | |
drayde | 0:5276f16d6ac8 | 290 | |
drayde | 0:5276f16d6ac8 | 291 | int main() |
drayde | 0:5276f16d6ac8 | 292 | { |
drayde | 0:5276f16d6ac8 | 293 | gnd = 0; |
drayde | 0:5276f16d6ac8 | 294 | zout = 1; |
drayde | 0:5276f16d6ac8 | 295 | pwmout1.period_ticks(256); |
drayde | 0:5276f16d6ac8 | 296 | pwmout2.period_ticks(256); |
drayde | 0:5276f16d6ac8 | 297 | |
drayde | 0:5276f16d6ac8 | 298 | |
drayde | 0:5276f16d6ac8 | 299 | /* |
drayde | 0:5276f16d6ac8 | 300 | // test signal |
drayde | 0:5276f16d6ac8 | 301 | while (1) |
drayde | 0:5276f16d6ac8 | 302 | { |
drayde | 0:5276f16d6ac8 | 303 | pwmout1 = 0.5f; |
drayde | 0:5276f16d6ac8 | 304 | pwmout2 = 0.5f; |
drayde | 0:5276f16d6ac8 | 305 | zout = zout ? 0 : 1; |
drayde | 0:5276f16d6ac8 | 306 | } |
drayde | 0:5276f16d6ac8 | 307 | */ |
drayde | 0:5276f16d6ac8 | 308 | |
drayde | 0:5276f16d6ac8 | 309 | float minx = 999999; |
drayde | 0:5276f16d6ac8 | 310 | float maxx = -999999; |
drayde | 0:5276f16d6ac8 | 311 | float miny = 999999; |
drayde | 0:5276f16d6ac8 | 312 | float maxy = -999999; |
drayde | 0:5276f16d6ac8 | 313 | |
drayde | 0:5276f16d6ac8 | 314 | for (uint16_t i = 0; i<count; i++) |
drayde | 0:5276f16d6ac8 | 315 | { |
drayde | 0:5276f16d6ac8 | 316 | float x = tline[i*2]; |
drayde | 0:5276f16d6ac8 | 317 | float y = tline[i*2+1]; |
drayde | 0:5276f16d6ac8 | 318 | minx = min(minx, x); |
drayde | 0:5276f16d6ac8 | 319 | miny = min(miny, y); |
drayde | 0:5276f16d6ac8 | 320 | maxx = max(maxx, x); |
drayde | 0:5276f16d6ac8 | 321 | maxy = max(maxy, y); |
drayde | 0:5276f16d6ac8 | 322 | } |
drayde | 0:5276f16d6ac8 | 323 | |
drayde | 0:5276f16d6ac8 | 324 | float dx = maxx - minx; |
drayde | 0:5276f16d6ac8 | 325 | float dy = maxy - miny; |
drayde | 0:5276f16d6ac8 | 326 | |
drayde | 0:5276f16d6ac8 | 327 | float margin = 8.0f; // do not use full range (needed for perspective correction) |
drayde | 0:5276f16d6ac8 | 328 | float multy = 254.9f - 2 * margin; |
drayde | 0:5276f16d6ac8 | 329 | float offy = 0.01f + margin; |
drayde | 0:5276f16d6ac8 | 330 | float multx = multy; |
drayde | 0:5276f16d6ac8 | 331 | float offx = offy; |
drayde | 0:5276f16d6ac8 | 332 | |
drayde | 0:5276f16d6ac8 | 333 | for (uint16_t i = 0; i<count; i++) |
drayde | 0:5276f16d6ac8 | 334 | { |
drayde | 0:5276f16d6ac8 | 335 | float x = tline[i*2]; |
drayde | 0:5276f16d6ac8 | 336 | float y = tline[i*2+1]; |
drayde | 0:5276f16d6ac8 | 337 | uint16_t xint = (uint16_t)((x - minx) / dx * multx + offx); |
drayde | 0:5276f16d6ac8 | 338 | uint16_t yint = (uint16_t)((y - miny) / dy * multy + offy); |
drayde | 0:5276f16d6ac8 | 339 | line[i*2] = xint; |
drayde | 0:5276f16d6ac8 | 340 | line[i*2+1] = yint; |
drayde | 0:5276f16d6ac8 | 341 | } |
drayde | 0:5276f16d6ac8 | 342 | |
drayde | 0:5276f16d6ac8 | 343 | float rotation = 0; |
drayde | 0:5276f16d6ac8 | 344 | |
drayde | 0:5276f16d6ac8 | 345 | while(1) |
drayde | 0:5276f16d6ac8 | 346 | { |
drayde | 0:5276f16d6ac8 | 347 | setRotation(rotation); |
drayde | 0:5276f16d6ac8 | 348 | rotation += 0.025f; |
drayde | 0:5276f16d6ac8 | 349 | |
drayde | 0:5276f16d6ac8 | 350 | uint16_t pos = 0; |
drayde | 0:5276f16d6ac8 | 351 | for (uint16_t index=0; index<linesCount; index++) |
drayde | 0:5276f16d6ac8 | 352 | { |
drayde | 0:5276f16d6ac8 | 353 | wait(waitTimeOnOff); |
drayde | 0:5276f16d6ac8 | 354 | zout = 1; //off |
drayde | 0:5276f16d6ac8 | 355 | wait(waitTime); |
drayde | 0:5276f16d6ac8 | 356 | moveTo(line[pos*2], line[pos*2+1]); |
drayde | 0:5276f16d6ac8 | 357 | wait(waitTime); |
drayde | 0:5276f16d6ac8 | 358 | zout = 0; // on! |
drayde | 0:5276f16d6ac8 | 359 | wait(waitTimeOnOff); |
drayde | 0:5276f16d6ac8 | 360 | pos++; |
drayde | 0:5276f16d6ac8 | 361 | for (uint16_t i = 1; i<lines[index]; i++,pos++) |
drayde | 0:5276f16d6ac8 | 362 | { |
drayde | 0:5276f16d6ac8 | 363 | moveTo(line[pos*2], line[pos*2+1]); |
drayde | 0:5276f16d6ac8 | 364 | } |
drayde | 0:5276f16d6ac8 | 365 | } |
drayde | 0:5276f16d6ac8 | 366 | } |
drayde | 0:5276f16d6ac8 | 367 | } |