_ycebnaua_praktika1/stand_code/Test_Lab из 2303.ino

331 lines
10 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#define PIN_LED1 12
#define PIN_LED2 13
#define PIN_LED3 15
#define PIN_LIGHT_A0 A0
#define FASTLED_ESP8266_RAW_PIN_ORDER
#include <FastLED.h>
#define NUM_LEDS_IN_STRIPLINE 8
#define DATA_PIN 16
CRGB ledsLine[NUM_LEDS_IN_STRIPLINE];
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;
double baseline; // baseline pressure
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;
char webPageMain[] PROGMEM = R"=====(
<safasf>
</asfasf>
)=====";
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Begin scanning\n");
Serial.println(webPageMain);
LedCheck();
LightCheck();
StripLineCheck();
PresureSensorCheck();
AxelerometerCheck();
GuesturesSensorCheck();
}
void loop() {
// LedCheck();
// Tumbler();
//delay(2000);
// Serial.println("\nLoop");
}
void LedCheck()
{
pinMode(PIN_LED1, OUTPUT);
pinMode(PIN_LED2, OUTPUT);
pinMode(PIN_LED3, OUTPUT);
// pinMode(PIN_LED4, OUTPUT);
int decay1 = 500;
delay(decay1);
Serial.println("\nПРОГРАММА ТЕСТИРОВАНИЯ МАКЕТА - ПО КУРСУ ПРОЕКТИРОВАНИЕ ВСТРОЕННЫХ ПРИЛОЖЕНИЙ");
Serial.println("\n1.ПРОВЕРКА СВЕТОДИОДОВ");
digitalWrite(PIN_LED1, 1);
Serial.println("СИНИЙ - ON");
delay(decay1);
digitalWrite(PIN_LED1, 0);
digitalWrite(PIN_LED2, 1);
// Serial.println("LED1 - OFF");
Serial.println("ЗЕЛЕНЫЙ - ON");
delay(decay1);
digitalWrite(PIN_LED2, 0);
digitalWrite(PIN_LED3, 1);
// Serial.println("LED2 - OFF");
Serial.println("ЖЕЛТЫЙ - ON");
delay(decay1);
digitalWrite(PIN_LED3, 0);
// digitalWrite(PIN_LED4, 1);
// Serial.println("LED3 - OFF");
Serial.println("ЕСЛИ СВЕТОДИОДЫ ЗАГОРЕЛИСЬ ПО ОЧЕРЕДИ - ПОДКЛЮЧЕНИЕ ПРАВИЛЬНОЕ\n");
delay(decay1);
// digitalWrite(PIN_LED4, 0);
// Serial.println("LED3 - OFF");
}
void LightCheck()
{
Serial.println("\n2.ПРОВЕРКА ДАТЧИКА ОСВЕЩЕННОСТИ");
int val = analogRead(PIN_LIGHT_A0);
if(val != 0 && val != 1023)
{
Serial.print("ЕСЛИ ЗНАЧЕНИЕ НАХОДИТСЯ В ПРЕДЕЛАХ 0..1023, ДАТЧИК РАБОТАЕТ ПРАВИЛЬНО = ");
Serial.println(val);
}
else
Serial.println("ДАТЧИК ОСВЕЩЕННОСТИ НЕ РАБОТАЕТ\nПРОВЕРЬТЕ ПОДКЛЮЧЕНИЕ\n");
delay(3000);
}
void StripLineCheck()
{
Serial.println("\n3.ПРОВЕРКА ЛИНЕЙКИ СВЕТОДИОДОВ");
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(ledsLine, NUM_LEDS_IN_STRIPLINE);
int decay = 50;
for(int i = 0; i < NUM_LEDS_IN_STRIPLINE; i++)
{
ledsLine[i] = CRGB::Red;
FastLED.show();
delay(decay);
//ledsLineNow turn the LED off, then pause
ledsLine[i] = CRGB::Black;
FastLED.show();
delay(decay);
ledsLine[i] = CRGB::DarkViolet ;
FastLED.show();
delay(decay);
// Now turn the LED off, then pause
ledsLine[i] = CRGB::Black;
FastLED.show();
delay(decay);
ledsLine[i] = CRGB::NavajoWhite;
FastLED.show();
delay(decay);
// Now turn the LED off, then pause
ledsLine[i] = CRGB::Black;
FastLED.show();
delay(decay);
ledsLine[i] = CRGB::Salmon;
FastLED.show();
delay(decay);
// Now turn the LED off, then pause
ledsLine[i] = CRGB::Black;
FastLED.show();
delay(decay);
}
Serial.println("\nЕСЛИ СВЕТОДИОДЫ МИГАЮТ РАЗНЫМИ ЦВЕТАМИ: OK");
Serial.println("ЕСЛИ СВЕТОДИОДЫ НЕ МИГАЮТ: ОШИБКА\n");
delay(1000);
}
double getPressure()
{
char status;
double T,P,p0,a;
// You must first get a temperature measurement to perform a pressure reading.
// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Use '&T' to provide the address of T to the function.
// Function returns 1 if successful, 0 if failure.
status = pressure.getTemperature(T);
if (status != 0)
{
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Use '&P' to provide the address of P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
return(P);
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
}
void PresureSensorCheck()
{
double T;
char status;
pressure.begin();
delay(30);
if (pressure.begin())
Serial.println("4.ДАТЧИК ДАВЛЕНИЯ - HW-596 (BMP180)");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 - ОШИБКА (НЕ ПОДКЛЮЧЕН?)\n\n");
while(1); // Pause forever.
}
// Get the baseline pressure:
baseline = getPressure();
Serial.print("ДАВЛЕНИЕ: ");
Serial.print(baseline);
Serial.println(" мбар");
Serial.print("ДАВЛЕНИЕ: ");
Serial.print(baseline*0.750062);
Serial.println(" мм.рт.ст.");
Serial.println("ЕСЛИ ЦИФРЫ БЛИЗКИ К АТМОСФЕРНОМУ ДАВЛЕНИЮ: OK");
Serial.println("ЕСЛИ НОЛЬ: ОШИБКА, ПРОВЕРИТЬ ПОДКЛЮЧЕНИЕ\n\n");
/*
status = pressure.getTemperature(T);
delay(status);
if (status != 0)
{
// Print out the measurement:
Serial.print("ТЕМПЕРАТУРА: ");
Serial.print(T,1);
Serial.print(" град\n\n");
}
*/
}
void AxelerometerCheck()
{
Serial.println("5.АКСЕЛЕРОМЕТР - ADXL345");
/* Initialise the sensor */
if(!accel.begin())
{
/* There was a problem detecting the ADXL345 ... check your connections */
Serial.println("ADXL345 НЕ ДЕТЕКТИРУЕТСЯ. ПРОВЕРИТЬ СОЕДИНЕНИЕ.");
while(1);
}
/* Set the range to whatever is appropriate for your project */
accel.setRange(ADXL345_RANGE_16_G);
// accel.setRange(ADXL345_RANGE_8_G);
// accel.setRange(ADXL345_RANGE_4_G);
// accel.setRange(ADXL345_RANGE_2_G);
int i = 0;
/* Display the results (acceleration is measured in m/s^2) */
while(i++ < 10)
{
/* Get a new sensor event */
sensors_event_t event;
accel.getEvent(&event);
Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 ");
delay(300);
}
Serial.println("ЕСЛИ ПРИСУТСТВУЮТ РАЗНЫЕ ЗНАЧЕНИЯ БЛИЗКИЕ к 9.6: OK");
Serial.println("ЕСЛИ НЕТ ЗНАЧЕНИЙ, ОШИБКА. НУЖНО ПРОВЕРИТЬ ПОДКЛЮЧЕНИЕ\n");
}
void GuesturesSensorCheck()
{
Serial.println(F("6.ДАТЧИК ЖЕСТОВ, ЦВЕТА, ПРИБЛИЖЕНИЯ И ОСВЕЩЕННОСИ APDS-9960"));
// Serial.println(F("SparkFun APDS-9960 - ColorSensor"));
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 light sensor (no interrupts)
if ( apds.enableLightSensor(false) ) {
Serial.println(F("Light sensor is now running"));
} else {
Serial.println(F("Something went wrong during light sensor init!"));
}
// Wait for initialization and calibration to finish
delay(300);
int i = 0;
while(i++ < 10)
{
// Read the light levels (ambient, red, green, blue)
if ( !apds.readAmbientLight(ambient_light) ||
!apds.readRedLight(red_light) ||
!apds.readGreenLight(green_light) ||
!apds.readBlueLight(blue_light) ) {
Serial.println("ОШИБКА ПРИ ЧТЕНИИ ПАРАМЕТРОВ");
} else {
Serial.print("Ambient: ");
Serial.print(ambient_light);
Serial.print(" Red: ");
Serial.print(red_light);
Serial.print(" Green: ");
Serial.print(green_light);
Serial.print(" Blue: ");
Serial.println(blue_light);
}
// Wait 1 second before next reading
delay(300);
}
Serial.println(F("\nЕСЛИ ПРИСУТСТВУЮТ РАЗНЫЕ ЗНАЧЕНИЯ ЦВЕТОВ: OK"));
Serial.print("\n\n\n ТЕСТИРОВАНИЕ ЗАВЕРШЕНО");
}
void Tumbler(){
}