Главное меню

Юридическая помощь

Рекламодателям

Рекламодателям

Путь на сайте

Новая лампа.




#define R_PIN 11
#define G_PIN 9
#define B_PIN 10
#include <Adafruit_VL53L0X.h> // Библиотека для работы с VL53L0X
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
#include <EEPROM.h>

 

#include <GRGB.h>
GRGB led(COMMON_CATHODE, R_PIN, G_PIN, B_PIN);

 

    int  data_yr = 50;
   
  int data_cv = 50;

 

int a,b=1,c=1;

 

void setup() {
    Serial.begin(9600); // Инициализация последовательного монитора
  if (!lox.begin()) { // Проверка подключения VL53L0X
    Serial.println("Не удалось обнаружить VL53L0X. Проверьте подключение!");
    while (1);
  }
   
    //EEPROM.begin(100);   // для esp8266/esp32

 

int dist;
    // объявляем переменные, которые будем писать

 

    //EEPROM.commit();     // для esp8266/esp32
//EEPROM.put(0, 255);
    // объявляем переменные, куда будем читать
 
    // читаем точно так же, как писали




EEPROM.get(12, data_cv);
EEPROM.get(10, data_yr);
applyMode();
}

 

void loop() {
     VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, false); // Получение данных о расстоянии
 
  int dist = measure.RangeMilliMeter; // получаем расстояние




 if (dist>8000) dist=0;
 static uint32_t tout;

 

int p;
 if (dist<1) {
tout=millis();
 }




a=millis();
if ((millis()-tout<2000)&&(dist>150 && dist<255)){
c=c+1;
}

 

if (( c % 2 == 0)&&(dist<1)){
 // led.setBrightness(0);
 fireTick();
}
else{
 applyMode();
// led.setBrightness(255);
}

 

if ((millis()-tout<2000)&&(dist>10 && dist<150)){

 

b=b+1;
//Serial.println(b);
}

 

if ((dist>20 && dist<255)&&(millis()-tout>2000)) {

 

  int16_t  data_yr;
 data_yr = dist;

 

 EEPROM.put(10, data_yr);
delay (100);
 
}

 

     int data_yr;
     int data_cv;
     EEPROM.get(10, data_yr);
EEPROM.get(12, data_cv);






if (( b % 2 == 0)&&(dist<1)){
  led.setBrightness(0);
}
else{
 led.setBrightness(255);
}

 

}

 

void applyMode(){
 
      int8_t  data_yr = 50;
     int8_t data_cv = 50;

 

EEPROM.get(10, data_yr);
EEPROM.get(12, data_cv);
 
   led.setWheel8(data_yr,data_cv);

 

}
void fireTick() {
  static uint32_t rnd_tmr, move_tmr;
  static int rnd_val, fil_val;
 
  // таймер 100мс, генерирует случайные значения
  if (millis() - rnd_tmr > 300) {
    rnd_tmr = millis();
    rnd_val = random(0, 13);
  }
 
  // таймер 20мс, плавно движется к rnd_val
  if (millis() - move_tmr > 20) {
    move_tmr = millis();
    // эксп фильтр, на выходе получится число 0..120
    fil_val += (rnd_val * 10 - fil_val) / 5;

 

    // преобразуем в яркость от 100 до 255
    int data_yr = map(fil_val, 0, 120, 100, 255);

 

    // преобразуем в цвет как текущий цвет + (0.. 24)
    int data_cv =  fil_val / 5;
    led.setWheel8(data_yr,data_cv);
  }
}

*************************************************************************
Для stm32 эмулятор

https://www.chippiko.eu.org/2020/06/stm32-eeprom-arduino.html

D. Progam Code STM32 EEPROM Emulation

Program:
#include <EEPROM.h>

const int addressEEPROM_min = 0;              // Specify the address restrictions you want to use.
const int addressEEPROM_max = 4095;           // For example, the maximum is 4095, which means we allocate 4KB of memory (4096 bytes) for the Virtual EEPROM.

float latitude =   4.158919;                  // This is an example of data that you want to save to EEPROM.
float longitude = 96.124843;                  // Coordinate data consisting of Latitude and Longitude.

int addressLat = 0;                           // The number of characters in the latitude value is 8, so the address starts from 0 to 8.
int addressLon = 9;                           // The number of characters in the longitude value is 9, so the address starts from 9 to 17.

void setup()
{
  Serial.begin(9600);
  delay(100);

  String lat = String (latitude, 6);         // Data to be saved to EEPROM is a String. This line is used for the conversion of float to String.
  String lon = String (longitude, 6);        // Value 6 shows how many digits behind the comma will be converted.

  // ------------------- Write Data Commands -------------------
  Serial.println(" -----------------------------------------");
  Serial.println("| Writing Latitude to EEPROM  | Saved |");
  EEPROMwrite(addressLat, lat);
  Serial.println("| Writing Longitude to EEPROM | Saved |");
  EEPROMwrite(addressLon, lon);
  Serial.println(" -----------------------------------------");
  Serial.println("\n");
  delay(1000);
  //----------------------------------------------------------

  // ------------------- Read Data Commands -------------------
  Serial.println("Baca data dari EEPROM.....");
  Serial.print("Latitude  : ");
  Serial.println(EEPROMread(addressLat, 8));  // Get data from address 0 with 8 characters.
  Serial.print("Longitude : ");
  Serial.println(EEPROMread(addressLon, 9));  // Get data from address 9 with a total of 9 characters.
  Serial.println("\n");
  delay(1000);
  //----------------------------------------------------------

  Serial.println("Now, please COMMENT *Write Data Commands* to deactivate data write commands to EEPROM.");
  delay(5000);
  Serial.println("Then, please press the reset button or remove STM32 from the computer to see whether the data from the EEPROM is still stored or not.");
} 

void loop()
{

}

String EEPROMread(int StartAddr, int StringLength)
{
  char buf[StringLength + 1];
  eeprom_read_string(StartAddr, buf, StringLength + 1);
  String dataStr = buf;
  return dataStr;
}

void EEPROMwrite(int StartAddr, String DataString)
{
  int val = DataString.length() + 1;
  char StringChar[val];
  char buff[val];

  DataString.toCharArray(StringChar, val);
  strcpy(buff, StringChar);
  eeprom_write_string(StartAddr, buff);
}

boolean eeprom_is_addr_ok(int addr)
{
  return ((addr >= addressEEPROM_min) && (addr <= addressEEPROM_max));
}

boolean eeprom_write_bytes(int startAddr, const byte* array, int numBytes)
{
  int i;

  if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes))
  {
    return false;
  }

  for (i = 0; i < numBytes; i++)
  {
    EEPROM.write(startAddr + i, array[i]);
  }
  return true;
}

boolean eeprom_write_string(int addr, const char* string)
{
  int numBytes;                                                    // number of actual bytes to be written

  numBytes = strlen(string) + 1;                                   // Write string content plus byte terminator string (0x00)
  return eeprom_write_bytes(addr, (const byte*)string, numBytes);
}

boolean eeprom_read_string(int addr, char* buffer, int bufSize)
{
  byte ch;                                                         // read bytes from eeprom
  int bytesRead;                                                   // number of bytes read so far

  if (!eeprom_is_addr_ok(addr))                                    // check the starting address
  {
    return false;
  }

  if (bufSize == 0)                                                // how can we store bytes in an empty buffer?
  {
    return false;
  }

  if (bufSize == 1)                                                
  {
    buffer[0] = 0;
    return true;
  }

  bytesRead = 0;                                                   // initialize a byte counter
  ch = EEPROM.read(addr + bytesRead);                              // read the next byte from eeprom
  buffer[bytesRead] = ch;                                          // save it in the user's buffer
  bytesRead++;

  // if no stop conditions are met, read the next byte from the eeprom
  while ( (ch != 0x00) && (bytesRead < bufSize) && ((addr + bytesRead) <= addressEEPROM_max) )
  {
    ch = EEPROM.read(addr + bytesRead);
    buffer[bytesRead] = ch;                                        // save it in the user's buffer
    bytesRead++;
  }

  if ((ch != 0x00) && (bytesRead >= 1))                            // make sure the user buffer has the string terminator, (0x00) as the last byte
  {
    buffer[bytesRead - 1] = 0;
  }
  return true;
}