Advertisement
aalh

clue_test

Jul 25th, 2022
957
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.13 KB | None | 0 0
  1. #include <Adafruit_Si7021.h>
  2.  
  3. #include <Adafruit_SHT4x.h>
  4.  
  5. #include <Adafruit_Arcada.h>
  6. #include <Adafruit_SPIFlash.h>
  7. #include <Adafruit_Sensor.h>
  8. #include <Adafruit_LSM6DS33.h>
  9. #include <Adafruit_LIS3MDL.h>
  10. #include <Adafruit_SHT31.h>
  11. #include <Adafruit_APDS9960.h>
  12. #include <Adafruit_BMP280.h>
  13.  
  14. #include <PDM.h>
  15.  
  16. #define WHITE_LED 43
  17.  
  18. Adafruit_Arcada arcada;
  19. Adafruit_LSM6DS33 lsm6ds33;
  20. Adafruit_LIS3MDL lis3mdl;
  21. Adafruit_SHT31 sht30;
  22. Adafruit_APDS9960 apds9960;
  23. Adafruit_BMP280 bmp280;
  24. Adafruit_Si7021 si7021;
  25. Adafruit_SHT4x sht40;
  26. extern PDMClass PDM;
  27. extern Adafruit_FlashTransport_QSPI flashTransport;
  28. extern Adafruit_SPIFlash Arcada_QSPI_Flash;
  29.  
  30. uint32_t buttons, last_buttons;
  31. uint8_t j = 0;  // neopixel counter for rainbow
  32.  
  33. // Check the timer callback, this function is called every millisecond!
  34. volatile uint16_t milliseconds = 0;
  35. void timercallback() {
  36.   analogWrite(LED_BUILTIN, milliseconds);  // pulse the LED
  37.   if (milliseconds == 0) {
  38.     milliseconds = 255;
  39.   } else {
  40.     milliseconds--;
  41.   }
  42. }
  43.  
  44. void setup() {
  45.   Serial.begin(115200);
  46.  
  47.   // enable NFC pins  
  48.   if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){
  49.     Serial.println("Fix NFC pins");
  50.     NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
  51.     while (NRF_NVMC->READY == NVMC_READY_READY_Busy);
  52.     NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
  53.     while (NRF_NVMC->READY == NVMC_READY_READY_Busy);
  54.     NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
  55.     while (NRF_NVMC->READY == NVMC_READY_READY_Busy);
  56.     Serial.println("Done");
  57.     NVIC_SystemReset();
  58.   }
  59.  
  60.   pinMode(WHITE_LED, OUTPUT);
  61.   digitalWrite(WHITE_LED, LOW);
  62.  
  63.   Serial.println("Hello! Arcada Clue test");
  64.   if (!arcada.arcadaBegin()) {
  65.     Serial.print("Failed to begin");
  66.     while (1);
  67.   }
  68.   arcada.displayBegin();
  69.   Serial.println("Arcada display begin");
  70.  
  71.   for (int i=0; i<250; i+=10) {
  72.     arcada.setBacklight(i);
  73.     delay(1);
  74.   }
  75.  
  76.   arcada.display->setCursor(0, 0);
  77.   arcada.display->setTextWrap(true);
  78.   arcada.display->setTextSize(2);
  79.  
  80.   /********** Check MIC */
  81.   PDM.onReceive(onPDMdata);
  82.   if (!PDM.begin(1, 16000)) {
  83.     Serial.println("**Failed to start PDM!");
  84.   }
  85.  
  86.   /********** Check QSPI manually */
  87.   if (!Arcada_QSPI_Flash.begin()){
  88.     Serial.println("Could not find flash on QSPI bus!");
  89.     arcada.display->setTextColor(ARCADA_RED);
  90.     arcada.display->println("QSPI Flash FAIL");
  91.   } else {
  92.     uint32_t jedec;
  93.     jedec = Arcada_QSPI_Flash.getJEDECID();
  94.     Serial.print("JEDEC ID: 0x"); Serial.println(jedec, HEX);
  95.     arcada.display->setTextColor(ARCADA_GREEN);
  96.     arcada.display->print("QSPI JEDEC: 0x"); arcada.display->println(jedec, HEX);
  97.   }
  98.  
  99.    /********** Check filesystem next */
  100.   if (!arcada.filesysBegin()) {
  101.     Serial.println("Failed to load filesys");
  102.     arcada.display->setTextColor(ARCADA_YELLOW);
  103.     arcada.display->println("Filesystem not found");
  104.   } else {
  105.     Serial.println("Filesys OK!");
  106.     arcada.display->setTextColor(ARCADA_GREEN);
  107.     arcada.display->println("Filesystem OK");
  108.   }
  109.  
  110.   arcada.display->setTextColor(ARCADA_WHITE);
  111.   arcada.display->println("Sensors Found: ");
  112.  
  113.   /********** Check SHT4x */
  114.   if (!sht40.begin()) {
  115.     Serial.println("No sht40 found");
  116.     arcada.display->setTextColor(ARCADA_RED);
  117.   } else {
  118.     Serial.println("**sht40 OK!");
  119.     arcada.display->setTextColor(ARCADA_GREEN);
  120.   }
  121.   arcada.display->print("SHT4x ");
  122.  
  123.   /********** Check SI7021 */
  124.   if (!si7021.begin()) {
  125.     Serial.println("No SI7021 found");
  126.     arcada.display->setTextColor(ARCADA_RED);
  127.   } else {
  128.     Serial.println("**si7021 OK!");
  129.     arcada.display->setTextColor(ARCADA_GREEN);
  130.   }
  131.   arcada.display->print("si7021 ");
  132.  
  133.   /********** Check APDS */
  134.   if (!apds9960.begin()) {
  135.     Serial.println("No APDS9960 found");
  136.     arcada.display->setTextColor(ARCADA_RED);
  137.   } else {
  138.     Serial.println("**APDS9960 OK!");
  139.     arcada.display->setTextColor(ARCADA_GREEN);
  140.     apds9960.enableColor(true);
  141.   }
  142.   arcada.display->print("APDS9960 ");
  143.  
  144.   /********** Check LSM6DS33 */
  145.   if (!lsm6ds33.begin_I2C()) {
  146.     Serial.println("No LSM6DS33 found");
  147.     arcada.display->setTextColor(ARCADA_RED);
  148.   } else {
  149.     Serial.println("**LSM6DS33 OK!");
  150.     arcada.display->setTextColor(ARCADA_GREEN);
  151.   }
  152.   arcada.display->println("LSM6DS33 ");
  153.  
  154.   /********** Check LIS3MDL */
  155.   if (!lis3mdl.begin_I2C()) {
  156.     Serial.println("No LIS3MDL found");
  157.     arcada.display->setTextColor(ARCADA_RED);
  158.   } else {
  159.     Serial.println("**LIS3MDL OK!");
  160.     arcada.display->setTextColor(ARCADA_GREEN);
  161.   }
  162.   arcada.display->print("LIS3MDL ");
  163.  
  164.   /********** Check SHT3x */
  165.   if (!sht30.begin(0x44)) {
  166.     Serial.println("No SHT30 found");
  167.     arcada.display->setTextColor(ARCADA_RED);
  168.   } else {
  169.     Serial.println("**SHT30 OK!");
  170.     arcada.display->setTextColor(ARCADA_GREEN);
  171.   }
  172.   arcada.display->print("SHT30 ");
  173.  
  174.   /********** Check BMP280 */
  175.   if (!bmp280.begin()) {
  176.     Serial.println("No BMP280 found");
  177.     arcada.display->setTextColor(ARCADA_RED);
  178.   } else {
  179.     Serial.println("**BMP280 OK!");
  180.     arcada.display->setTextColor(ARCADA_GREEN);
  181.   }
  182.   arcada.display->println("BMP280");
  183.  
  184.   buttons = last_buttons = 0;
  185.   arcada.timerCallback(1000, timercallback);
  186.   arcada.display->setTextWrap(false);
  187. }
  188.  
  189.  
  190. void loop() {
  191.   sensors_event_t humidity, accel, gyro, mag, temp;
  192.   arcada.display->setTextColor(ARCADA_WHITE, ARCADA_BLACK);
  193.   arcada.display->setCursor(0, 100);
  194.  
  195.   arcada.display->print("Temp: ");
  196.   arcada.display->print(bmp280.readTemperature());
  197.   arcada.display->print(" C");
  198.   arcada.display->println("         ");
  199.  
  200.   arcada.display->print("Baro: ");
  201.   arcada.display->print(bmp280.readPressure()/100);
  202.   arcada.display->print(" hPa");
  203.   arcada.display->println("         ");
  204.  
  205.   arcada.display->print("Humid: ");
  206.   arcada.display->print(sht30.readHumidity());
  207.   arcada.display->print(" %");
  208.   arcada.display->println("         ");
  209.  
  210.   sht40.setPrecision(SHT4X_HIGH_PRECISION);
  211.   arcada.display->print("T4mp: ");
  212.   sht40.getEvent(&humidity, &temp);
  213.   arcada.display->print(temp.temperature);
  214.   arcada.display->print(" C");
  215.   arcada.display->println("         ");
  216.   arcada.display->print("H4mid: ");
  217.   arcada.display->print(humidity.relative_humidity);
  218.   arcada.display->print(" %");
  219.   arcada.display->println("         ");
  220.  
  221.   arcada.display->print("Tsmp: ");
  222.   arcada.display->print(si7021.readTemperature());
  223.   arcada.display->print(" C");
  224.   arcada.display->println("         ");
  225.  
  226.   arcada.display->print("Hsmid: ");
  227.   arcada.display->print(si7021.readHumidity());
  228.   arcada.display->print(" %");
  229.   arcada.display->println("         ");
  230.  
  231.   uint16_t r, g, b, c;
  232.   //wait for color data to be ready
  233.   while(! apds9960.colorDataReady()) {
  234.     delay(5);
  235.   }
  236.   apds9960.getColorData(&r, &g, &b, &c);
  237.   arcada.display->print("Light: ");
  238.   arcada.display->print(c);
  239.   arcada.display->println("         ");
  240.  
  241.   lsm6ds33.getEvent(&accel, &gyro, &temp);
  242.   lis3mdl.getEvent(&mag);
  243.   arcada.display->print("Accel:");
  244.   arcada.display->print(accel.acceleration.x, 1);
  245.   arcada.display->print(",");
  246.   arcada.display->print(accel.acceleration.y, 1);
  247.   arcada.display->print(",");
  248.   arcada.display->print(accel.acceleration.z, 1);
  249.   arcada.display->println("         ");
  250.  
  251.   arcada.display->print("Gyro:");
  252.   arcada.display->print(gyro.gyro.x, 1);
  253.   arcada.display->print(",");
  254.   arcada.display->print(gyro.gyro.y, 1);
  255.   arcada.display->print(",");
  256.   arcada.display->print(gyro.gyro.z, 1);
  257.   arcada.display->println("         ");
  258.  
  259.   arcada.display->print("Mag:");
  260.   arcada.display->print(mag.magnetic.x, 1);
  261.   arcada.display->print(",");
  262.   arcada.display->print(mag.magnetic.y, 1);
  263.   arcada.display->print(",");
  264.   arcada.display->print(mag.magnetic.z, 1);
  265.   arcada.display->println("         ");
  266.  
  267.   uint32_t pdm_vol = getPDMwave(256);
  268.   Serial.print("PDM volume: "); Serial.println(pdm_vol);
  269.   arcada.display->print("Mic: ");
  270.   arcada.display->print(pdm_vol);
  271.   arcada.display->println("      ");
  272.    
  273.   Serial.printf("Drawing %d NeoPixels\n", arcada.pixels.numPixels());  
  274.   for(int32_t i=0; i< arcada.pixels.numPixels(); i++) {
  275.      arcada.pixels.setPixelColor(i, Wheel(((i * 256 / arcada.pixels.numPixels()) + j*5) & 255));
  276.   }
  277.   arcada.pixels.show();
  278.   j++;
  279.  
  280.   uint8_t pressed_buttons = arcada.readButtons();
  281.  
  282.   if (pressed_buttons & ARCADA_BUTTONMASK_A) {
  283.     Serial.println("BUTTON A");
  284.     tone(ARCADA_AUDIO_OUT, 4000, 100);
  285.   } else {
  286.     tone(ARCADA_AUDIO_OUT, 0);
  287.   }
  288.   if (pressed_buttons & ARCADA_BUTTONMASK_B) {
  289.     Serial.println("BUTTON B");
  290.     digitalWrite(WHITE_LED, HIGH);
  291.   } else {
  292.     digitalWrite(WHITE_LED, LOW);
  293.   }
  294.   last_buttons = buttons;
  295. }
  296.  
  297.  
  298. // Input a value 0 to 255 to get a color value.
  299. // The colours are a transition r - g - b - back to r.
  300. uint32_t Wheel(byte WheelPos) {
  301.   if(WheelPos < 85) {
  302.    return arcada.pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  303.   } else if(WheelPos < 170) {
  304.    WheelPos -= 85;
  305.    return arcada.pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  306.   } else {
  307.    WheelPos -= 170;
  308.    return arcada.pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  309.   }
  310. }
  311.  
  312.  
  313. /*****************************************************************/
  314.  
  315. int16_t minwave, maxwave;
  316. short sampleBuffer[256];// buffer to read samples into, each sample is 16-bits
  317. volatile int samplesRead;// number of samples read
  318.  
  319. int32_t getPDMwave(int32_t samples) {
  320.   minwave = 30000;
  321.   maxwave = -30000;
  322.  
  323.   while (samples > 0) {
  324.     if (!samplesRead) {
  325.       yield();
  326.       continue;
  327.     }
  328.     for (int i = 0; i < samplesRead; i++) {
  329.       minwave = min(sampleBuffer[i], minwave);
  330.       maxwave = max(sampleBuffer[i], maxwave);
  331.       //Serial.println(sampleBuffer[i]);
  332.       samples--;
  333.     }
  334.     // clear the read count
  335.     samplesRead = 0;
  336.   }
  337.   return maxwave-minwave;  
  338. }
  339.  
  340.  
  341. void onPDMdata() {
  342.   // query the number of bytes available
  343.   int bytesAvailable = PDM.available();
  344.  
  345.   // read into the sample buffer
  346.   PDM.read(sampleBuffer, bytesAvailable);
  347.  
  348.   // 16-bit, 2 bytes per sample
  349.   samplesRead = bytesAvailable / 2;
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement