Paints a rotating FabLab Munich logo on an oscilloscope screen

Dependencies:   FastPWM mbed

Committer:
drayde
Date:
Tue Jun 23 08:32:04 2015 +0000
Revision:
0:5276f16d6ac8
Working version with blanking

Who changed what in which revision?

UserRevisionLine numberNew 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 }