Ligth animation fore hall
Dependencies: FastPWM HCSR04 NeoStrip mbed
main.cpp@0:dcef095e5883, 2015-09-08 (annotated)
- Committer:
- gert_lauritsen
- Date:
- Tue Sep 08 15:23:32 2015 +0000
- Revision:
- 0:dcef095e5883
Med ekstra filter p? sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gert_lauritsen | 0:dcef095e5883 | 1 | #include "mbed.h" |
gert_lauritsen | 0:dcef095e5883 | 2 | #include "HCSR04.h" |
gert_lauritsen | 0:dcef095e5883 | 3 | #include "NeoStrip.h" |
gert_lauritsen | 0:dcef095e5883 | 4 | |
gert_lauritsen | 0:dcef095e5883 | 5 | #define MinDist 150 |
gert_lauritsen | 0:dcef095e5883 | 6 | #define PeriodeTime 100 |
gert_lauritsen | 0:dcef095e5883 | 7 | #define Nsensor 6 |
gert_lauritsen | 0:dcef095e5883 | 8 | |
gert_lauritsen | 0:dcef095e5883 | 9 | HCSR04 *sensor1; |
gert_lauritsen | 0:dcef095e5883 | 10 | HCSR04 *sensor2; |
gert_lauritsen | 0:dcef095e5883 | 11 | HCSR04 *sensor3; |
gert_lauritsen | 0:dcef095e5883 | 12 | HCSR04 *sensor4; |
gert_lauritsen | 0:dcef095e5883 | 13 | HCSR04 *sensor5; |
gert_lauritsen | 0:dcef095e5883 | 14 | HCSR04 *sensor6; |
gert_lauritsen | 0:dcef095e5883 | 15 | |
gert_lauritsen | 0:dcef095e5883 | 16 | Timeout Delay; |
gert_lauritsen | 0:dcef095e5883 | 17 | |
gert_lauritsen | 0:dcef095e5883 | 18 | Serial pc(USBTX, USBRX); |
gert_lauritsen | 0:dcef095e5883 | 19 | //int SectionSize[8]={16,16,16,16,16,16,16,16}; |
gert_lauritsen | 0:dcef095e5883 | 20 | int SectionSize[8]= {500,343,285,270,395,443,16,16}; |
gert_lauritsen | 0:dcef095e5883 | 21 | int N=2268; |
gert_lauritsen | 0:dcef095e5883 | 22 | |
gert_lauritsen | 0:dcef095e5883 | 23 | int TimeToNet=0; |
gert_lauritsen | 0:dcef095e5883 | 24 | int CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 25 | bool ThereAreSomeThing=0; |
gert_lauritsen | 0:dcef095e5883 | 26 | int ThereAreNothing=0; |
gert_lauritsen | 0:dcef095e5883 | 27 | |
gert_lauritsen | 0:dcef095e5883 | 28 | //int N=128; |
gert_lauritsen | 0:dcef095e5883 | 29 | |
gert_lauritsen | 0:dcef095e5883 | 30 | NeoStrip strip(p22, N); |
gert_lauritsen | 0:dcef095e5883 | 31 | |
gert_lauritsen | 0:dcef095e5883 | 32 | double LED[8]; //power status |
gert_lauritsen | 0:dcef095e5883 | 33 | int LedOnOff[8]; //Hvis 1 sættes skal den lave et loop |
gert_lauritsen | 0:dcef095e5883 | 34 | bool InAktive; |
gert_lauritsen | 0:dcef095e5883 | 35 | int color[3]= {255,255,255}; |
gert_lauritsen | 0:dcef095e5883 | 36 | |
gert_lauritsen | 0:dcef095e5883 | 37 | long DistArr[6]; |
gert_lauritsen | 0:dcef095e5883 | 38 | int SensorTOCall=0; |
gert_lauritsen | 0:dcef095e5883 | 39 | |
gert_lauritsen | 0:dcef095e5883 | 40 | int hueToRGB(float h); |
gert_lauritsen | 0:dcef095e5883 | 41 | void CallNewSensor(); |
gert_lauritsen | 0:dcef095e5883 | 42 | void pattern1(); |
gert_lauritsen | 0:dcef095e5883 | 43 | extern "C" void mbed_reset(); |
gert_lauritsen | 0:dcef095e5883 | 44 | // display a shifting rainbow, all colors have maximum |
gert_lauritsen | 0:dcef095e5883 | 45 | // saturation and value, with evenly spaced hue |
gert_lauritsen | 0:dcef095e5883 | 46 | void pattern1() |
gert_lauritsen | 0:dcef095e5883 | 47 | { |
gert_lauritsen | 0:dcef095e5883 | 48 | static float dh = 360.0 / N; |
gert_lauritsen | 0:dcef095e5883 | 49 | static float x = 0; |
gert_lauritsen | 0:dcef095e5883 | 50 | |
gert_lauritsen | 0:dcef095e5883 | 51 | for (int i = 0; i < N; i++) |
gert_lauritsen | 0:dcef095e5883 | 52 | strip.setPixel(i, hueToRGB((dh * i) - x)); |
gert_lauritsen | 0:dcef095e5883 | 53 | |
gert_lauritsen | 0:dcef095e5883 | 54 | x += 1; |
gert_lauritsen | 0:dcef095e5883 | 55 | if (x > 360) |
gert_lauritsen | 0:dcef095e5883 | 56 | x = 0; |
gert_lauritsen | 0:dcef095e5883 | 57 | } |
gert_lauritsen | 0:dcef095e5883 | 58 | |
gert_lauritsen | 0:dcef095e5883 | 59 | // Converts HSV to RGB with the given hue, assuming |
gert_lauritsen | 0:dcef095e5883 | 60 | // maximum saturation and value |
gert_lauritsen | 0:dcef095e5883 | 61 | int hueToRGB(float h) |
gert_lauritsen | 0:dcef095e5883 | 62 | { |
gert_lauritsen | 0:dcef095e5883 | 63 | // lots of floating point magic from the internet and scratching my head |
gert_lauritsen | 0:dcef095e5883 | 64 | float r, g, b; |
gert_lauritsen | 0:dcef095e5883 | 65 | if (h > 360) |
gert_lauritsen | 0:dcef095e5883 | 66 | h -= 360; |
gert_lauritsen | 0:dcef095e5883 | 67 | if (h < 0) |
gert_lauritsen | 0:dcef095e5883 | 68 | h += 360; |
gert_lauritsen | 0:dcef095e5883 | 69 | int i = (int)(h / 60.0); |
gert_lauritsen | 0:dcef095e5883 | 70 | float f = (h / 60.0) - i; |
gert_lauritsen | 0:dcef095e5883 | 71 | float q = 1 - f; |
gert_lauritsen | 0:dcef095e5883 | 72 | |
gert_lauritsen | 0:dcef095e5883 | 73 | switch (i % 6) { |
gert_lauritsen | 0:dcef095e5883 | 74 | case 0: |
gert_lauritsen | 0:dcef095e5883 | 75 | r = 1; |
gert_lauritsen | 0:dcef095e5883 | 76 | g = f; |
gert_lauritsen | 0:dcef095e5883 | 77 | b = 0; |
gert_lauritsen | 0:dcef095e5883 | 78 | break; |
gert_lauritsen | 0:dcef095e5883 | 79 | case 1: |
gert_lauritsen | 0:dcef095e5883 | 80 | r = q; |
gert_lauritsen | 0:dcef095e5883 | 81 | g = 1; |
gert_lauritsen | 0:dcef095e5883 | 82 | b = 0; |
gert_lauritsen | 0:dcef095e5883 | 83 | break; |
gert_lauritsen | 0:dcef095e5883 | 84 | case 2: |
gert_lauritsen | 0:dcef095e5883 | 85 | r = 0; |
gert_lauritsen | 0:dcef095e5883 | 86 | g = 1; |
gert_lauritsen | 0:dcef095e5883 | 87 | b = f; |
gert_lauritsen | 0:dcef095e5883 | 88 | break; |
gert_lauritsen | 0:dcef095e5883 | 89 | case 3: |
gert_lauritsen | 0:dcef095e5883 | 90 | r = 0; |
gert_lauritsen | 0:dcef095e5883 | 91 | g = q; |
gert_lauritsen | 0:dcef095e5883 | 92 | b = 1; |
gert_lauritsen | 0:dcef095e5883 | 93 | break; |
gert_lauritsen | 0:dcef095e5883 | 94 | case 4: |
gert_lauritsen | 0:dcef095e5883 | 95 | r = f; |
gert_lauritsen | 0:dcef095e5883 | 96 | g = 0; |
gert_lauritsen | 0:dcef095e5883 | 97 | b = 1; |
gert_lauritsen | 0:dcef095e5883 | 98 | break; |
gert_lauritsen | 0:dcef095e5883 | 99 | case 5: |
gert_lauritsen | 0:dcef095e5883 | 100 | r = 1; |
gert_lauritsen | 0:dcef095e5883 | 101 | g = 0; |
gert_lauritsen | 0:dcef095e5883 | 102 | b = q; |
gert_lauritsen | 0:dcef095e5883 | 103 | break; |
gert_lauritsen | 0:dcef095e5883 | 104 | default: |
gert_lauritsen | 0:dcef095e5883 | 105 | r = 0; |
gert_lauritsen | 0:dcef095e5883 | 106 | g = 0; |
gert_lauritsen | 0:dcef095e5883 | 107 | b = 0; |
gert_lauritsen | 0:dcef095e5883 | 108 | break; |
gert_lauritsen | 0:dcef095e5883 | 109 | } |
gert_lauritsen | 0:dcef095e5883 | 110 | |
gert_lauritsen | 0:dcef095e5883 | 111 | // scale to integers and return the packed value |
gert_lauritsen | 0:dcef095e5883 | 112 | uint8_t R = (uint8_t)(r * 255); |
gert_lauritsen | 0:dcef095e5883 | 113 | uint8_t G = (uint8_t)(g * 255); |
gert_lauritsen | 0:dcef095e5883 | 114 | uint8_t B = (uint8_t)(b * 255); |
gert_lauritsen | 0:dcef095e5883 | 115 | |
gert_lauritsen | 0:dcef095e5883 | 116 | return (R << 16) | (G << 8) | B; |
gert_lauritsen | 0:dcef095e5883 | 117 | } |
gert_lauritsen | 0:dcef095e5883 | 118 | |
gert_lauritsen | 0:dcef095e5883 | 119 | void update() |
gert_lauritsen | 0:dcef095e5883 | 120 | { |
gert_lauritsen | 0:dcef095e5883 | 121 | int LEDNr=0; |
gert_lauritsen | 0:dcef095e5883 | 122 | for (int j=0; j<Nsensor; j++) { |
gert_lauritsen | 0:dcef095e5883 | 123 | for (int i=0; i<SectionSize[j]; i++) { |
gert_lauritsen | 0:dcef095e5883 | 124 | strip.setPixel(LEDNr,LED[j]*color[0],LED[j]*color[1],LED[j]*color[2]); |
gert_lauritsen | 0:dcef095e5883 | 125 | LEDNr++; |
gert_lauritsen | 0:dcef095e5883 | 126 | } |
gert_lauritsen | 0:dcef095e5883 | 127 | } |
gert_lauritsen | 0:dcef095e5883 | 128 | strip.write(); |
gert_lauritsen | 0:dcef095e5883 | 129 | } |
gert_lauritsen | 0:dcef095e5883 | 130 | |
gert_lauritsen | 0:dcef095e5883 | 131 | void ReadColorFactor() |
gert_lauritsen | 0:dcef095e5883 | 132 | { |
gert_lauritsen | 0:dcef095e5883 | 133 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
gert_lauritsen | 0:dcef095e5883 | 134 | char str[10]; |
gert_lauritsen | 0:dcef095e5883 | 135 | |
gert_lauritsen | 0:dcef095e5883 | 136 | FILE *fp = fopen("/local/color.txt", "r"); // Open "out.txt" on the local file system for writing |
gert_lauritsen | 0:dcef095e5883 | 137 | if (fp) { |
gert_lauritsen | 0:dcef095e5883 | 138 | //fscanf(fp,"%[^\n]",str); |
gert_lauritsen | 0:dcef095e5883 | 139 | printf("Reading color.txt \r\n"); |
gert_lauritsen | 0:dcef095e5883 | 140 | fgets(str, 10, fp); |
gert_lauritsen | 0:dcef095e5883 | 141 | printf("%s\r\n",str); |
gert_lauritsen | 0:dcef095e5883 | 142 | color[0]=atoi(str); |
gert_lauritsen | 0:dcef095e5883 | 143 | fgets(str, 10, fp); |
gert_lauritsen | 0:dcef095e5883 | 144 | printf("%s\r\n",str); |
gert_lauritsen | 0:dcef095e5883 | 145 | color[1]=atoi(str); |
gert_lauritsen | 0:dcef095e5883 | 146 | fgets(str, 10, fp); |
gert_lauritsen | 0:dcef095e5883 | 147 | printf("%s\r\n",str); |
gert_lauritsen | 0:dcef095e5883 | 148 | color[2]=atoi(str); |
gert_lauritsen | 0:dcef095e5883 | 149 | fclose(fp); |
gert_lauritsen | 0:dcef095e5883 | 150 | } else |
gert_lauritsen | 0:dcef095e5883 | 151 | printf("Cant open file\r\n"); |
gert_lauritsen | 0:dcef095e5883 | 152 | } |
gert_lauritsen | 0:dcef095e5883 | 153 | |
gert_lauritsen | 0:dcef095e5883 | 154 | void CalcNew() |
gert_lauritsen | 0:dcef095e5883 | 155 | { |
gert_lauritsen | 0:dcef095e5883 | 156 | for (int i=0; i<Nsensor; i++) { |
gert_lauritsen | 0:dcef095e5883 | 157 | if ((LedOnOff[i]==2) && (LED[i]>=0)) LED[i]-=0.1; //falder |
gert_lauritsen | 0:dcef095e5883 | 158 | if (LedOnOff[i]==1) { |
gert_lauritsen | 0:dcef095e5883 | 159 | LED[i]+=0.1; |
gert_lauritsen | 0:dcef095e5883 | 160 | //InAktive=0; //stiger |
gert_lauritsen | 0:dcef095e5883 | 161 | } |
gert_lauritsen | 0:dcef095e5883 | 162 | if (LED[i]>1) { //Skift til at gå ned igen |
gert_lauritsen | 0:dcef095e5883 | 163 | LedOnOff[i]=2; |
gert_lauritsen | 0:dcef095e5883 | 164 | LED[i]=1; |
gert_lauritsen | 0:dcef095e5883 | 165 | } |
gert_lauritsen | 0:dcef095e5883 | 166 | if ((LedOnOff[i]==2) && (LED[i]<=0.02)) { //SLuk |
gert_lauritsen | 0:dcef095e5883 | 167 | LED[i]=0; |
gert_lauritsen | 0:dcef095e5883 | 168 | LedOnOff[i]=0; |
gert_lauritsen | 0:dcef095e5883 | 169 | } |
gert_lauritsen | 0:dcef095e5883 | 170 | } |
gert_lauritsen | 0:dcef095e5883 | 171 | update(); |
gert_lauritsen | 0:dcef095e5883 | 172 | } |
gert_lauritsen | 0:dcef095e5883 | 173 | |
gert_lauritsen | 0:dcef095e5883 | 174 | |
gert_lauritsen | 0:dcef095e5883 | 175 | void SetAll(float p) |
gert_lauritsen | 0:dcef095e5883 | 176 | { |
gert_lauritsen | 0:dcef095e5883 | 177 | for (int i=0; i<N; i++) { |
gert_lauritsen | 0:dcef095e5883 | 178 | strip.setPixel(i,p*255,p*255,p*255); |
gert_lauritsen | 0:dcef095e5883 | 179 | } |
gert_lauritsen | 0:dcef095e5883 | 180 | strip.write(); |
gert_lauritsen | 0:dcef095e5883 | 181 | } |
gert_lauritsen | 0:dcef095e5883 | 182 | |
gert_lauritsen | 0:dcef095e5883 | 183 | void SetAllOn() |
gert_lauritsen | 0:dcef095e5883 | 184 | { |
gert_lauritsen | 0:dcef095e5883 | 185 | for (int i=0; i<N; i++) { |
gert_lauritsen | 0:dcef095e5883 | 186 | strip.setPixel(i,color[0],color[1],color[2]); |
gert_lauritsen | 0:dcef095e5883 | 187 | } |
gert_lauritsen | 0:dcef095e5883 | 188 | strip.write(); |
gert_lauritsen | 0:dcef095e5883 | 189 | } |
gert_lauritsen | 0:dcef095e5883 | 190 | |
gert_lauritsen | 0:dcef095e5883 | 191 | |
gert_lauritsen | 0:dcef095e5883 | 192 | void distance6(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 193 | { |
gert_lauritsen | 0:dcef095e5883 | 194 | //printf("Distance2: %d %.2f \n\r",Duration, LED[1]); |
gert_lauritsen | 0:dcef095e5883 | 195 | DistArr[5]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 196 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 197 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 198 | LedOnOff[5]=1; |
gert_lauritsen | 0:dcef095e5883 | 199 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 200 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 201 | } else { |
gert_lauritsen | 0:dcef095e5883 | 202 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 203 | SensorTOCall=6; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 204 | } |
gert_lauritsen | 0:dcef095e5883 | 205 | } else { |
gert_lauritsen | 0:dcef095e5883 | 206 | LedOnOff[5]=2; |
gert_lauritsen | 0:dcef095e5883 | 207 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 208 | } |
gert_lauritsen | 0:dcef095e5883 | 209 | } |
gert_lauritsen | 0:dcef095e5883 | 210 | |
gert_lauritsen | 0:dcef095e5883 | 211 | |
gert_lauritsen | 0:dcef095e5883 | 212 | void distance5(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 213 | { |
gert_lauritsen | 0:dcef095e5883 | 214 | //printf("Distance1: %d %.2f \n\r",Duration, LED[0]); |
gert_lauritsen | 0:dcef095e5883 | 215 | DistArr[4]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 216 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 217 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 218 | LedOnOff[4]=1; |
gert_lauritsen | 0:dcef095e5883 | 219 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 220 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 221 | } else { |
gert_lauritsen | 0:dcef095e5883 | 222 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 223 | SensorTOCall=5; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 224 | } |
gert_lauritsen | 0:dcef095e5883 | 225 | } else { |
gert_lauritsen | 0:dcef095e5883 | 226 | LedOnOff[4]=2; |
gert_lauritsen | 0:dcef095e5883 | 227 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 228 | SensorTOCall=6; |
gert_lauritsen | 0:dcef095e5883 | 229 | } |
gert_lauritsen | 0:dcef095e5883 | 230 | Delay.attach(&CallNewSensor,0.005); //5ms mellem sensor |
gert_lauritsen | 0:dcef095e5883 | 231 | |
gert_lauritsen | 0:dcef095e5883 | 232 | // sensor6->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 233 | } |
gert_lauritsen | 0:dcef095e5883 | 234 | |
gert_lauritsen | 0:dcef095e5883 | 235 | void distance4(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 236 | { |
gert_lauritsen | 0:dcef095e5883 | 237 | //printf("Distance4: %d %.2f \n\r",Duration, LED[3]); |
gert_lauritsen | 0:dcef095e5883 | 238 | DistArr[3]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 239 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 240 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 241 | LedOnOff[3]=1; |
gert_lauritsen | 0:dcef095e5883 | 242 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 243 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 244 | } else { |
gert_lauritsen | 0:dcef095e5883 | 245 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 246 | SensorTOCall=4; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 247 | } |
gert_lauritsen | 0:dcef095e5883 | 248 | } else { |
gert_lauritsen | 0:dcef095e5883 | 249 | LedOnOff[3]=2; |
gert_lauritsen | 0:dcef095e5883 | 250 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 251 | SensorTOCall=5; |
gert_lauritsen | 0:dcef095e5883 | 252 | } |
gert_lauritsen | 0:dcef095e5883 | 253 | Delay.attach(&CallNewSensor,0.005); //5ms mellem sensor |
gert_lauritsen | 0:dcef095e5883 | 254 | |
gert_lauritsen | 0:dcef095e5883 | 255 | // sensor5->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 256 | } |
gert_lauritsen | 0:dcef095e5883 | 257 | |
gert_lauritsen | 0:dcef095e5883 | 258 | void distance3(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 259 | { |
gert_lauritsen | 0:dcef095e5883 | 260 | //printf("Distance3: %d %.2f \n\r",Duration, LED[2]); |
gert_lauritsen | 0:dcef095e5883 | 261 | DistArr[2]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 262 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 263 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 264 | LedOnOff[2]=1; |
gert_lauritsen | 0:dcef095e5883 | 265 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 266 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 267 | } else { |
gert_lauritsen | 0:dcef095e5883 | 268 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 269 | SensorTOCall=3; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 270 | } |
gert_lauritsen | 0:dcef095e5883 | 271 | } else { |
gert_lauritsen | 0:dcef095e5883 | 272 | LedOnOff[2]=2; |
gert_lauritsen | 0:dcef095e5883 | 273 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 274 | SensorTOCall=4; |
gert_lauritsen | 0:dcef095e5883 | 275 | } |
gert_lauritsen | 0:dcef095e5883 | 276 | Delay.attach(&CallNewSensor,0.005); //5ms mellem sensor |
gert_lauritsen | 0:dcef095e5883 | 277 | |
gert_lauritsen | 0:dcef095e5883 | 278 | //sensor4->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 279 | } |
gert_lauritsen | 0:dcef095e5883 | 280 | |
gert_lauritsen | 0:dcef095e5883 | 281 | void distance2(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 282 | { |
gert_lauritsen | 0:dcef095e5883 | 283 | //printf("Distance2: %d %.2f \n\r",Duration, LED[1]); |
gert_lauritsen | 0:dcef095e5883 | 284 | DistArr[1]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 285 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 286 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 287 | LedOnOff[1]=1; |
gert_lauritsen | 0:dcef095e5883 | 288 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 289 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 290 | } else { |
gert_lauritsen | 0:dcef095e5883 | 291 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 292 | SensorTOCall=2; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 293 | } |
gert_lauritsen | 0:dcef095e5883 | 294 | } else { |
gert_lauritsen | 0:dcef095e5883 | 295 | LedOnOff[1]=2; |
gert_lauritsen | 0:dcef095e5883 | 296 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 297 | SensorTOCall=3; |
gert_lauritsen | 0:dcef095e5883 | 298 | } |
gert_lauritsen | 0:dcef095e5883 | 299 | Delay.attach(&CallNewSensor,0.005); //5ms mellem sensor |
gert_lauritsen | 0:dcef095e5883 | 300 | } |
gert_lauritsen | 0:dcef095e5883 | 301 | |
gert_lauritsen | 0:dcef095e5883 | 302 | |
gert_lauritsen | 0:dcef095e5883 | 303 | void distance1(long Duration) |
gert_lauritsen | 0:dcef095e5883 | 304 | { |
gert_lauritsen | 0:dcef095e5883 | 305 | |
gert_lauritsen | 0:dcef095e5883 | 306 | DistArr[0]=Duration; |
gert_lauritsen | 0:dcef095e5883 | 307 | if (Duration<MinDist) { |
gert_lauritsen | 0:dcef095e5883 | 308 | if (CallAgain) { |
gert_lauritsen | 0:dcef095e5883 | 309 | LedOnOff[0]=1; |
gert_lauritsen | 0:dcef095e5883 | 310 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 311 | ThereAreSomeThing=1; |
gert_lauritsen | 0:dcef095e5883 | 312 | } else { |
gert_lauritsen | 0:dcef095e5883 | 313 | CallAgain++; |
gert_lauritsen | 0:dcef095e5883 | 314 | SensorTOCall=1; //kalder sig selv igen |
gert_lauritsen | 0:dcef095e5883 | 315 | } |
gert_lauritsen | 0:dcef095e5883 | 316 | } else { |
gert_lauritsen | 0:dcef095e5883 | 317 | LedOnOff[0]=2; |
gert_lauritsen | 0:dcef095e5883 | 318 | CallAgain=0; |
gert_lauritsen | 0:dcef095e5883 | 319 | SensorTOCall=2; |
gert_lauritsen | 0:dcef095e5883 | 320 | } |
gert_lauritsen | 0:dcef095e5883 | 321 | Delay.attach(&CallNewSensor,0.005); //5ms mellem sensor |
gert_lauritsen | 0:dcef095e5883 | 322 | } |
gert_lauritsen | 0:dcef095e5883 | 323 | |
gert_lauritsen | 0:dcef095e5883 | 324 | void CallNewSensor() |
gert_lauritsen | 0:dcef095e5883 | 325 | { |
gert_lauritsen | 0:dcef095e5883 | 326 | switch (SensorTOCall) { |
gert_lauritsen | 0:dcef095e5883 | 327 | case 1: |
gert_lauritsen | 0:dcef095e5883 | 328 | sensor1->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 329 | break; |
gert_lauritsen | 0:dcef095e5883 | 330 | case 2: |
gert_lauritsen | 0:dcef095e5883 | 331 | sensor2->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 332 | break; |
gert_lauritsen | 0:dcef095e5883 | 333 | case 3: |
gert_lauritsen | 0:dcef095e5883 | 334 | sensor3->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 335 | break; |
gert_lauritsen | 0:dcef095e5883 | 336 | case 4: |
gert_lauritsen | 0:dcef095e5883 | 337 | sensor4->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 338 | break; |
gert_lauritsen | 0:dcef095e5883 | 339 | case 5: |
gert_lauritsen | 0:dcef095e5883 | 340 | sensor5->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 341 | break; |
gert_lauritsen | 0:dcef095e5883 | 342 | case 6: |
gert_lauritsen | 0:dcef095e5883 | 343 | sensor6->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 344 | break; |
gert_lauritsen | 0:dcef095e5883 | 345 | } |
gert_lauritsen | 0:dcef095e5883 | 346 | } |
gert_lauritsen | 0:dcef095e5883 | 347 | |
gert_lauritsen | 0:dcef095e5883 | 348 | int main() |
gert_lauritsen | 0:dcef095e5883 | 349 | { |
gert_lauritsen | 0:dcef095e5883 | 350 | pc.baud(115200); |
gert_lauritsen | 0:dcef095e5883 | 351 | printf("Test af sensor\r\n"); |
gert_lauritsen | 0:dcef095e5883 | 352 | sensor1= new HCSR04(p5,p6,distance1); |
gert_lauritsen | 0:dcef095e5883 | 353 | sensor2= new HCSR04(p7,p8,distance2); |
gert_lauritsen | 0:dcef095e5883 | 354 | sensor3= new HCSR04(p9,p10,distance3); |
gert_lauritsen | 0:dcef095e5883 | 355 | sensor4= new HCSR04(p11,p12,distance4); |
gert_lauritsen | 0:dcef095e5883 | 356 | sensor5= new HCSR04(p13,p14,distance5); |
gert_lauritsen | 0:dcef095e5883 | 357 | sensor6= new HCSR04(p15,p16,distance6); |
gert_lauritsen | 0:dcef095e5883 | 358 | ReadColorFactor(); |
gert_lauritsen | 0:dcef095e5883 | 359 | N=0; |
gert_lauritsen | 0:dcef095e5883 | 360 | for (int a=0; a<8; a++) N+=SectionSize[a]; |
gert_lauritsen | 0:dcef095e5883 | 361 | printf("Numbers of LED %d\r\n",N); |
gert_lauritsen | 0:dcef095e5883 | 362 | |
gert_lauritsen | 0:dcef095e5883 | 363 | float bright = 0.2; // 20% is plenty for indoor use |
gert_lauritsen | 0:dcef095e5883 | 364 | strip.setBrightness(bright); // set default brightness |
gert_lauritsen | 0:dcef095e5883 | 365 | |
gert_lauritsen | 0:dcef095e5883 | 366 | SetAll(0); |
gert_lauritsen | 0:dcef095e5883 | 367 | |
gert_lauritsen | 0:dcef095e5883 | 368 | while(1) { |
gert_lauritsen | 0:dcef095e5883 | 369 | ThereAreSomeThing=0; |
gert_lauritsen | 0:dcef095e5883 | 370 | sensor1->Trigger(); |
gert_lauritsen | 0:dcef095e5883 | 371 | wait(0.05); |
gert_lauritsen | 0:dcef095e5883 | 372 | if (ThereAreSomeThing) ThereAreNothing=0; else ThereAreNothing++; |
gert_lauritsen | 0:dcef095e5883 | 373 | if (ThereAreNothing>6000) { //5 minutter ingenting |
gert_lauritsen | 0:dcef095e5883 | 374 | InAktive=2; //Inaktiv på den måde at denskal lave noget |
gert_lauritsen | 0:dcef095e5883 | 375 | } |
gert_lauritsen | 0:dcef095e5883 | 376 | if ((ThereAreSomeThing==0) && (InAktive==2)) InAktive=0; //gå tilbage til almindeligt mode |
gert_lauritsen | 0:dcef095e5883 | 377 | if (InAktive) { |
gert_lauritsen | 0:dcef095e5883 | 378 | if (TimeToNet) TimeToNet--; |
gert_lauritsen | 0:dcef095e5883 | 379 | if ((InAktive==2) && (TimeToNet==0)) { //gør noget |
gert_lauritsen | 0:dcef095e5883 | 380 | LED[rand() % 6]=1; //Tænder for en tilfældig |
gert_lauritsen | 0:dcef095e5883 | 381 | //Der skal gå et stykke tid |
gert_lauritsen | 0:dcef095e5883 | 382 | TimeToNet=60; //3 sek |
gert_lauritsen | 0:dcef095e5883 | 383 | CalcNew(); |
gert_lauritsen | 0:dcef095e5883 | 384 | } |
gert_lauritsen | 0:dcef095e5883 | 385 | } |
gert_lauritsen | 0:dcef095e5883 | 386 | if (InAktive==0) { |
gert_lauritsen | 0:dcef095e5883 | 387 | CalcNew(); |
gert_lauritsen | 0:dcef095e5883 | 388 | LedOnOff[0]=2; |
gert_lauritsen | 0:dcef095e5883 | 389 | LedOnOff[1]=2; |
gert_lauritsen | 0:dcef095e5883 | 390 | LedOnOff[2]=2; |
gert_lauritsen | 0:dcef095e5883 | 391 | LedOnOff[3]=2; |
gert_lauritsen | 0:dcef095e5883 | 392 | LedOnOff[4]=2; |
gert_lauritsen | 0:dcef095e5883 | 393 | LedOnOff[5]=2; |
gert_lauritsen | 0:dcef095e5883 | 394 | LedOnOff[6]=2; |
gert_lauritsen | 0:dcef095e5883 | 395 | LedOnOff[7]=2; |
gert_lauritsen | 0:dcef095e5883 | 396 | printf("Sensor %d %d %d %d %d %d \r",DistArr[0],DistArr[1],DistArr[2],DistArr[3],DistArr[4],DistArr[5]); |
gert_lauritsen | 0:dcef095e5883 | 397 | } |
gert_lauritsen | 0:dcef095e5883 | 398 | if (pc.readable()) { |
gert_lauritsen | 0:dcef095e5883 | 399 | switch(pc.getc()) { |
gert_lauritsen | 0:dcef095e5883 | 400 | case '1': |
gert_lauritsen | 0:dcef095e5883 | 401 | LedOnOff[0]=1; |
gert_lauritsen | 0:dcef095e5883 | 402 | break; |
gert_lauritsen | 0:dcef095e5883 | 403 | case '2': |
gert_lauritsen | 0:dcef095e5883 | 404 | LedOnOff[1]=1; |
gert_lauritsen | 0:dcef095e5883 | 405 | break; |
gert_lauritsen | 0:dcef095e5883 | 406 | case '3': |
gert_lauritsen | 0:dcef095e5883 | 407 | LedOnOff[2]=1; |
gert_lauritsen | 0:dcef095e5883 | 408 | break; |
gert_lauritsen | 0:dcef095e5883 | 409 | case '4': |
gert_lauritsen | 0:dcef095e5883 | 410 | LedOnOff[3]=1; |
gert_lauritsen | 0:dcef095e5883 | 411 | break; |
gert_lauritsen | 0:dcef095e5883 | 412 | case '5': |
gert_lauritsen | 0:dcef095e5883 | 413 | LedOnOff[4]=1; |
gert_lauritsen | 0:dcef095e5883 | 414 | break; |
gert_lauritsen | 0:dcef095e5883 | 415 | case '6': |
gert_lauritsen | 0:dcef095e5883 | 416 | LedOnOff[5]=1; |
gert_lauritsen | 0:dcef095e5883 | 417 | break; |
gert_lauritsen | 0:dcef095e5883 | 418 | //case 'a': InAktive=1; break; |
gert_lauritsen | 0:dcef095e5883 | 419 | case 'k': { |
gert_lauritsen | 0:dcef095e5883 | 420 | InAktive=1; |
gert_lauritsen | 0:dcef095e5883 | 421 | SetAllOn(); |
gert_lauritsen | 0:dcef095e5883 | 422 | printf("All On !!!!\r\n"); |
gert_lauritsen | 0:dcef095e5883 | 423 | } |
gert_lauritsen | 0:dcef095e5883 | 424 | break; |
gert_lauritsen | 0:dcef095e5883 | 425 | case 'K': |
gert_lauritsen | 0:dcef095e5883 | 426 | InAktive=0; |
gert_lauritsen | 0:dcef095e5883 | 427 | break; |
gert_lauritsen | 0:dcef095e5883 | 428 | |
gert_lauritsen | 0:dcef095e5883 | 429 | case 'c': |
gert_lauritsen | 0:dcef095e5883 | 430 | printf("Color R %d G %d B %d\r\n",color[0],color[1],color[2]); |
gert_lauritsen | 0:dcef095e5883 | 431 | break; |
gert_lauritsen | 0:dcef095e5883 | 432 | case 'r': |
gert_lauritsen | 0:dcef095e5883 | 433 | mbed_reset(); |
gert_lauritsen | 0:dcef095e5883 | 434 | break; |
gert_lauritsen | 0:dcef095e5883 | 435 | case 'b': { |
gert_lauritsen | 0:dcef095e5883 | 436 | bright+=0.1; |
gert_lauritsen | 0:dcef095e5883 | 437 | if (bright>1.01) bright=0; |
gert_lauritsen | 0:dcef095e5883 | 438 | strip.setBrightness(bright); // set default brightness |
gert_lauritsen | 0:dcef095e5883 | 439 | printf("brigth %.2f\r\n",bright); |
gert_lauritsen | 0:dcef095e5883 | 440 | } |
gert_lauritsen | 0:dcef095e5883 | 441 | break; |
gert_lauritsen | 0:dcef095e5883 | 442 | } |
gert_lauritsen | 0:dcef095e5883 | 443 | } |
gert_lauritsen | 0:dcef095e5883 | 444 | } |
gert_lauritsen | 0:dcef095e5883 | 445 | } |