/* OneindigeThermometer - Kamp alfa - fablabDeMakerij - Dirk Sarens Deze sketch stuurt 28 RGB leds van het type WS2812B aan. Deze leds staan op een strip van 28x1 Installeren van de library Adafruit NeoPixel. Deze sketch maakt gebruik van een library van Adafruit waardoor de leds heel gemakkelijk kunnen worden in- en uitgeschakeld. Ga naar schets - Bibliotheek gebruiken - Bibliotheken beheren. Geef 'neopixel' in bij filter, klik bij Adafruit NeoPixel op 'meer info' en op 'installeren' Controleer of de bibliotheek is geïnstalleerd door te kijken of er bij Bestand - Voorbeelden 'Adafruit NeoPixel' staat. 3Di gebruikt de Digispark microcontroller. Start het programma */ #include ; #include //maak gebruik van de bibliotheek Adafruit_NeoPixel Adafruit_NeoPixel OT = Adafruit_NeoPixel(28,1); const int MPU=0x68; //I2C adres van de MPU-6050 int16_t AcX,AcY,AcZ,Tmp; //16-bit integers int tcal; //calibratie variabele double t,temp; uint32_t rood = OT.Color(255, 0, 0); //maak een variabele van het type 'uint32-t' met de naam 'rood' en plaats daarin een waarde die wordt gevormd door combinaties van R,G en B (in dit geval alleen rood) uint32_t groen = OT.Color(0, 255, 0);//maak groen uint32_t blauw = OT.Color(0, 0, 255);//maak blauw uint32_t magenta = OT.Color(255, 0, 255);//maak magenta uint32_t cyaan = OT.Color(0, 255, 255); //maak cyaan uint32_t geel = OT.Color(255, 255, 0); //maak geel uint32_t wit = OT.Color(255, 255, 255); //maak wit (alles aan) void setup() { Wire.begin(); //initiate wire library and I2C Wire.beginTransmission(MPU); //begin transmission to I2C slave device Wire.write(0x6B); //PWR_MGMT_1 register Wire.write(0); //set to zero (wakes up the MPU-6050) Wire.endTransmission(true); //ends transmission to I2C slave device OT.begin(); //maak je object klaar OT.setBrightness(100); //zet de helderheid wat lager (getal tussen 0 en 255) OT.show(); //toon de ingestelde kleuren (aangezien er nog geen kleuren zijn ingesteld, betekent dit hier: zet de display uit) tcal = -7; //Verander dit getal een beetje, bv. -8 of - 10 of -5 of -3 als je thermometer niet de juiste temperatuur aangeeft. } void loop() { Wire.beginTransmission(MPU); //begin transmission to I2C slave device Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); //restarts transmission to I2C slave device Wire.requestFrom(MPU,8); //request 8 registers in total //lees de data van de versnellingsmeter AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) 0x3C (ACCEL_XOUT_L) AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) 0x3E (ACCEL_YOUT_L) AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) 0x40 (ACCEL_ZOUT_L) //lees de temperatuur Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) 0x42 (TEMP_OUT_L) //Berekening van de temperatuur t = Tmp/340 + 36.53; //Hier wordt de temperatuur van de sensor omgevormd naar een celsius-waarde t = t + tcal; //Hier wordt de temperatuur wat aangepast indien deze zou afwijken if (byte(t) == 0){temp=19;} if (byte(t) == 1){temp=18;} if (byte(t) == 2){temp=17;} if (byte(t) == 3){temp=16;} if (byte(t) == 4){temp=15;} if (byte(t) == 5){temp=14;} if (byte(t) == 6){temp=13;} if (byte(t) == 7){temp=12;} if (byte(t) == 8){temp=11;} if (byte(t) == 9){temp=10;} if (byte(t) == 10){temp=9;} if (byte(t) == 11){temp=8;} if (byte(t) == 12){temp=7;} if (byte(t) == 13){temp=6;} if (byte(t) == 14){temp=5;} if (byte(t) == 15){temp=4;} if (byte(t) == 16){temp=3;} if (byte(t) == 17){temp=2;} if (byte(t) == 18){temp=1;} if (byte(t) == 19){temp=0;} if (byte(t) == 20){temp=27;} if (byte(t) == 21){temp=26;} if (byte(t) == 22){temp=25;} if (byte(t) == 23){temp=24;} if (byte(t) == 24){temp=23;} if (byte(t) == 25){temp=22;} if (byte(t) == 26){temp=21;} if (byte(t) == 27){temp=20;} /* hier vind je een aantal mogelijke instructies die je kan gebruiken om de leds aan te sturen OT.clear(); alle leds uit OT.setBrightness(getal); zet de helderheid (een getal tussen 0 en 255) OT.setPixelColor(n,R,G,B); geef pixel n de juiste RGB-kleur (n tussen 0 en 27 R,G,B tussen 0 en 255) OT.setPixelColor(n, kleur); geef pixel n de voorafingestelde kleur (n tussen 0 en 27) OT.fill(kleur,vanaf,aantal); geef een 'aantal' leds een voorafingestelde kleur. Begin bij 'vanaf' OT.fill(kleur,vanaf); geef alle leds vanaf 'vanaf' tot het einde een voorafingestelde kleur OT.fill(kleur); geef alle leds een vooraf ingestelde kleur OT.show(); toon de kleuren delay(getal); wacht 'getal' milliseconden. 1000 milliseconden is 1 seconde */ if (AcX > 8000 && AcY < 1000) //Als de spiegel rechtstaat { OT.clear(); OT.setPixelColor(temp,groen); OT.show(); delay(1000); } if (AcX < 1000 && AcY < -8000) //als je de spiegel 90° tegenwijzerzin draait { for(byte n=0;n<28;n++) { OT.setPixelColor(n,rood); } OT.show(); } if (AcX < 1000 && AcY > 8000) //als je de spiegel 90° uurwijzerzin draait { for(byte n=0;n<28;n++) { OT.setPixelColor(n,wit); } OT.show(); } if (AcX < -8000 && AcY < 1000) //Als je de spiegel 180° draait, volgt er een lichtshow { colorWipe(OT.Color(255, 0, 0), 50); // Red colorWipe(OT.Color(0, 255, 0), 50); // Green colorWipe(OT.Color(0, 0, 255), 50); // Blue theaterChase(OT.Color(127, 127, 127), 50); // White theaterChase(OT.Color(127, 0, 0), 50); // Red theaterChase(OT.Color( 0, 0, 127), 50); // Blue rainbowCycle(20); } } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i