Обновление до версии 0.3.0
- обновлен elbear_fw_bootloader - добавлена проверка контрольной суммы каждой строки hex файла. - в модуль работы с АЦП добавлена функция analogReadResolution(). Функция analogRead() теперь возвращает усредненное по 10 измерениям значение. - общая функция обработки прерываний перенесена в память RAM. Обработчики прерываний модулей External Interrupts и Advanced I/O (функция tone()) так же перенесены в память RAM для увеличения скорости выполнения кода. - в пакет добавлены библиотеки EEPROM, Servo, SoftSerial, NeoPixel, MFRC522 адаптированные для работы с платой Elbear Ace-Uno. - добавлено описание особенностей работы с пакетом
This commit is contained in:
1 parent
2044614aba
commit
7261b03ea1
114 files changed
+11064
-666
No files matched your search
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* EEPROM Clear
|
||||
*
|
||||
* Sets all of the bytes of the EEPROM to 0.
|
||||
* Please see eeprom_iteration for a more in depth
|
||||
* look at how to traverse the EEPROM.
|
||||
*
|
||||
* This example code is in the public domain.
|
||||
*/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
void setup() {
|
||||
// initialize the LED pin as an output.
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
EEPROM.begin();
|
||||
|
||||
/***
|
||||
Iterate through each byte of the EEPROM storage.
|
||||
***/
|
||||
|
||||
for (int i = 0 ; i < EEPROM.length() ; i++) {
|
||||
EEPROM.write(i, 0);
|
||||
}
|
||||
|
||||
// turn the LED on when we're done
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/** Empty loop. **/
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/***
|
||||
CRC algorithm generated by pycrc ( https://github.com/tpircher/pycrc ).
|
||||
|
||||
A CRC is a simple way of checking whether data has changed or become corrupted.
|
||||
This example calculates a CRC value directly on the EEPROM values.
|
||||
The purpose of this example is to highlight how the EEPROM object can be used just like an array.
|
||||
***/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
void setup() {
|
||||
|
||||
//Start serial
|
||||
Serial.begin(9600);
|
||||
EEPROM.begin();
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
//Print length of data to run CRC on.
|
||||
Serial.print("EEPROM length: ");
|
||||
Serial.println(EEPROM.length());
|
||||
|
||||
//Print the result of calling eeprom_crc()
|
||||
Serial.print("CRC32 of EEPROM data: 0x");
|
||||
Serial.println(eeprom_crc(), HEX);
|
||||
Serial.print("\n\nDone!");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/* Empty loop */
|
||||
}
|
||||
|
||||
unsigned long eeprom_crc(void) {
|
||||
|
||||
const unsigned long crc_table[16] = {
|
||||
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
|
||||
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
|
||||
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
|
||||
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
|
||||
};
|
||||
|
||||
unsigned long crc = ~0L;
|
||||
|
||||
for (int index = 0 ; index < EEPROM.length() ; ++index) {
|
||||
crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4);
|
||||
crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4);
|
||||
crc = ~crc;
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/***
|
||||
eeprom_get example.
|
||||
|
||||
This shows how to use the EEPROM.get() method.
|
||||
|
||||
To pre-set the EEPROM data, run the example sketch eeprom_put.
|
||||
This sketch will run without it, however, the values shown
|
||||
will be shown from what ever is already on the EEPROM.
|
||||
|
||||
This may cause the serial object to print out a large string
|
||||
of garbage if there is no null character inside one of the strings
|
||||
loaded.
|
||||
***/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
|
||||
float f = 0.00f; //Variable to store data read from EEPROM.
|
||||
int eeAddress = 0; //EEPROM address to start reading from
|
||||
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
Serial.print("Read float from EEPROM: ");
|
||||
|
||||
//Get the float data from the EEPROM at position 'eeAddress'
|
||||
EEPROM.get(eeAddress, f);
|
||||
Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float.
|
||||
|
||||
/***
|
||||
As get also returns a reference to 'f', you can use it inline.
|
||||
E.g: Serial.print( EEPROM.get( eeAddress, f ) );
|
||||
***/
|
||||
|
||||
/***
|
||||
Get can be used with custom structures too.
|
||||
I have separated this into an extra function.
|
||||
***/
|
||||
|
||||
secondTest(); //Run the next test.
|
||||
}
|
||||
|
||||
struct MyObject {
|
||||
float field1;
|
||||
byte field2;
|
||||
char name[10];
|
||||
};
|
||||
|
||||
void secondTest() {
|
||||
int eeAddress = sizeof(float); //Move address to the next byte after float 'f'.
|
||||
|
||||
MyObject customVar; //Variable to store custom object read from EEPROM.
|
||||
EEPROM.get(eeAddress, customVar);
|
||||
|
||||
Serial.println("Read custom object from EEPROM: ");
|
||||
Serial.println(customVar.field1);
|
||||
Serial.println(customVar.field2);
|
||||
Serial.println(customVar.name);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/* Empty loop */
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/***
|
||||
eeprom_iteration example.
|
||||
|
||||
A set of example snippets highlighting the
|
||||
simplest methods for traversing the EEPROM.
|
||||
|
||||
Running this sketch is not necessary, this is
|
||||
simply highlighting certain programming methods.
|
||||
***/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
|
||||
/***
|
||||
Iterate the EEPROM using a for loop.
|
||||
***/
|
||||
|
||||
for (int index = 0 ; index < EEPROM.length() ; index++) {
|
||||
|
||||
//Add one to each cell in the EEPROM
|
||||
EEPROM[ index ] += 1;
|
||||
}
|
||||
|
||||
/***
|
||||
Iterate the EEPROM using a while loop.
|
||||
***/
|
||||
|
||||
int index = 0;
|
||||
|
||||
while (index < EEPROM.length()) {
|
||||
|
||||
//Add one to each cell in the EEPROM
|
||||
EEPROM[ index ] += 1;
|
||||
index++;
|
||||
}
|
||||
|
||||
/***
|
||||
Iterate the EEPROM using a do-while loop.
|
||||
***/
|
||||
|
||||
int idx = 0; //Used 'idx' to avoid name conflict with 'index' above.
|
||||
|
||||
do {
|
||||
|
||||
//Add one to each cell in the EEPROM
|
||||
EEPROM[ idx ] += 1;
|
||||
idx++;
|
||||
} while (idx < EEPROM.length());
|
||||
|
||||
|
||||
} //End of setup function.
|
||||
|
||||
void loop() {}
|
||||
@@ -0,0 +1,56 @@
|
||||
/***
|
||||
eeprom_put example.
|
||||
|
||||
This shows how to use the EEPROM.put() method.
|
||||
Also, this sketch will pre-set the EEPROM data for the
|
||||
example sketch eeprom_get.
|
||||
|
||||
Note, unlike the single byte version EEPROM.write(),
|
||||
the put method will use update semantics. As in a byte
|
||||
will only be written to the EEPROM if the data is actually
|
||||
different.
|
||||
***/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
struct MyObject {
|
||||
float field1;
|
||||
byte field2;
|
||||
char name[10];
|
||||
};
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
float f = 123.456f; //Variable to store in EEPROM.
|
||||
int eeAddress = 0; //Location we want the data to be put.
|
||||
|
||||
|
||||
//One simple call, with the address first and the object second.
|
||||
EEPROM.put(eeAddress, f);
|
||||
|
||||
Serial.println("Written float data type!");
|
||||
|
||||
/** Put is designed for use with custom structures also. **/
|
||||
|
||||
//Data to store.
|
||||
MyObject customVar = {
|
||||
3.14f,
|
||||
65,
|
||||
"Working!"
|
||||
};
|
||||
|
||||
eeAddress += sizeof(float); //Move address to the next byte after float 'f'.
|
||||
|
||||
EEPROM.put(eeAddress, customVar);
|
||||
Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/* Empty loop */
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* EEPROM Read
|
||||
*
|
||||
* Reads the value of each byte of the EEPROM and prints it
|
||||
* to the computer.
|
||||
*/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
// start reading from the first byte (address 0) of the EEPROM
|
||||
int address = 0;
|
||||
byte value;
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
// initialize serial and wait for port to open:
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// read a byte from the current address of the EEPROM
|
||||
value = EEPROM.read(address);
|
||||
|
||||
Serial.print(address);
|
||||
Serial.print("\t");
|
||||
Serial.print(value, DEC);
|
||||
Serial.println();
|
||||
|
||||
address = address + 1;
|
||||
if (address == EEPROM.length()) {
|
||||
address = 0;
|
||||
}
|
||||
|
||||
delay(500);
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/***
|
||||
EEPROM Update method
|
||||
|
||||
Stores values read from analog input 0 into the EEPROM.
|
||||
These values will stay in the EEPROM when the board is
|
||||
turned off and may be retrieved later by another sketch.
|
||||
|
||||
If a value has not changed in the EEPROM, it is not overwritten
|
||||
which would reduce the life span of the EEPROM unnecessarily.
|
||||
***/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
|
||||
int address = 0;
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/***
|
||||
need to divide by 4 because analog inputs range from
|
||||
0 to 1023 and each byte of the EEPROM can only hold a
|
||||
value from 0 to 255.
|
||||
***/
|
||||
int val = analogRead(0) / 4;
|
||||
|
||||
/***
|
||||
Update the particular EEPROM cell.
|
||||
these values will remain there when the board is
|
||||
turned off.
|
||||
***/
|
||||
EEPROM.update(address, val);
|
||||
|
||||
/***
|
||||
The function EEPROM.update(address, val) is equivalent to the following:
|
||||
|
||||
if( EEPROM.read(address) != val ){
|
||||
EEPROM.write(address, val);
|
||||
}
|
||||
***/
|
||||
|
||||
address = address + 1;
|
||||
if (address == EEPROM.length()) {
|
||||
address = 0;
|
||||
}
|
||||
|
||||
delay(100);
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* EEPROM Write
|
||||
*
|
||||
* Stores values read from analog input 0 into the EEPROM.
|
||||
* These values will stay in the EEPROM when the board is
|
||||
* turned off and may be retrieved later by another sketch.
|
||||
*/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
|
||||
int addr = 0;
|
||||
|
||||
void setup() {
|
||||
EEPROM.begin();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/***
|
||||
Need to divide by 4 because analog inputs range from
|
||||
0 to 1023 and each byte of the EEPROM can only hold a
|
||||
value from 0 to 255.
|
||||
***/
|
||||
|
||||
int val = analogRead(0) / 4;
|
||||
|
||||
/***
|
||||
Write the value to the appropriate byte of the EEPROM.
|
||||
these values will remain there when the board is
|
||||
turned off.
|
||||
***/
|
||||
|
||||
EEPROM.write(addr, val);
|
||||
|
||||
addr = addr + 1;
|
||||
if (addr == EEPROM.length()) {
|
||||
addr = 0;
|
||||
}
|
||||
|
||||
delay(100);
|
||||
}
|
||||
Reference in new issue
Block a user