Skip to content

Commit 9c7aa72

Browse files
committed
Улучшение пары методов
Перед началом выполнения методов burnZeroAndMaxPositions и burnMaxAngleAndConfigurationValue проверяется подключение датчика по I2C
1 parent 6a02f86 commit 9c7aa72

File tree

2 files changed

+57
-50
lines changed

2 files changed

+57
-50
lines changed

src/AMS_AS5600.cpp

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
** GitHub - https://github.com/S-LABc
1515
** Gmail - romansklyar15@gmail.com
1616
*
17-
* Copyright (C) 2022. v1.3 / License MIT / Скляр Роман S-LAB
17+
* Copyright (C) 2022. v1.4 / License MIT / Скляр Роман S-LAB
1818
*/
1919

2020
#include "AMS_AS5600.h"
@@ -1311,6 +1311,7 @@ word AS5600::getMagnitude(void) {
13111311
* AS5600_FLAG_SPECIAL_VERIFY_DISABLE
13121312
* AS5600_FLAG_SPECIAL_VERIFY_ENABLE
13131313
* @return:
1314+
* AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED
13141315
* AS5600_BURN_REPROT_MAGNET_NOT_FOUND
13151316
* AS5600_BURN_REPROT_WRITE_OK
13161317
* AS5600_BURN_REPROT_WRITE_WRONG
@@ -1319,40 +1320,42 @@ word AS5600::getMagnitude(void) {
13191320
* AS5600_BURN_REPROT_ATTEMPTS_ENDED
13201321
*/
13211322
AS5600BurnReports AS5600::burnZeroAndMaxPositions(AS5600SpecialVerifyFlags _use_special_verify) {
1322-
AS5600BurnReports result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
1323-
// Собираем значениях из критически выжных регистров
1324-
byte burn_count = AS5600::getBurnPositionsCount();
1325-
word z_pos = AS5600::getZeroPosition();
1326-
word m_pos = AS5600::getMaxPosition();
1327-
1328-
if(burn_count < AS5600_MAX_VALUE_ZMCO) { // Если ресурс для записи не исчерпан
1329-
if(z_pos && m_pos) { // Если значения начального и максимального положения не 0
1330-
// Наличие магнита проверяем НА ПОСЛЕДНЕМ ШАГЕ, перед отправлением команды на запись!
1331-
if(AS5600::isMagnetDetected()) { // Если магнит обнаружен
1332-
AS5600::AS_WriteOneByte(AS5600_BURN_REG, AS5600_CMD_BURN_ANGLE); // Отправляем команду записи
1333-
if(_use_special_verify) { // Если используется проверка записанного
1334-
AS5600::loadSavedValues(); // Загружаем из памяти ранее записанные данные
1335-
// Получаем загруженные данные для сравнения
1336-
word z_pos_now = AS5600::getZeroPosition();
1337-
word m_pos_now = AS5600::getMaxPosition();
1338-
if(z_pos == z_pos_now && m_pos == m_pos_now) { // Если записываемые данные совпадают с сохраненными
1339-
result = AS5600_BURN_REPROT_WRITE_OK;
1323+
AS5600BurnReports result = AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED;
1324+
1325+
if(AS5600::isConnected()) { // Если датчик подключен
1326+
// Собираем значениях из критически выжных регистров
1327+
byte burn_count = AS5600::getBurnPositionsCount();
1328+
word z_pos = AS5600::getZeroPosition();
1329+
word m_pos = AS5600::getMaxPosition();
1330+
if(burn_count < AS5600_MAX_VALUE_ZMCO) { // Если ресурс для записи не исчерпан
1331+
if(z_pos && m_pos) { // Если значения начального и максимального положения не 0
1332+
// Наличие магнита проверяем НА ПОСЛЕДНЕМ ШАГЕ, перед отправлением команды на запись!
1333+
if(AS5600::isMagnetDetected()) { // Если магнит обнаружен
1334+
AS5600::AS_WriteOneByte(AS5600_BURN_REG, AS5600_CMD_BURN_ANGLE); // Отправляем команду записи
1335+
if(_use_special_verify) { // Если используется проверка записанного
1336+
AS5600::loadSavedValues(); // Загружаем из памяти ранее записанные данные
1337+
// Получаем загруженные данные для сравнения
1338+
word z_pos_now = AS5600::getZeroPosition();
1339+
word m_pos_now = AS5600::getMaxPosition();
1340+
if(z_pos == z_pos_now && m_pos == m_pos_now) { // Если записываемые данные совпадают с сохраненными
1341+
result = AS5600_BURN_REPROT_WRITE_OK;
1342+
}else {
1343+
result = AS5600_BURN_REPROT_WRITE_WRONG;
1344+
}
13401345
}else {
1341-
result = AS5600_BURN_REPROT_WRITE_WRONG;
1346+
result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY;
13421347
}
13431348
}else {
1344-
result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY;
1349+
result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
13451350
}
13461351
}else {
1347-
result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
1352+
result = AS5600_BURN_REPROT_ZPOS_MPOS_NOT_SET;
13481353
}
13491354
}else {
1350-
result = AS5600_BURN_REPROT_ZPOS_MPOS_NOT_SET;
1355+
result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
13511356
}
1352-
}else {
1353-
result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
13541357
}
1355-
1358+
13561359
return result;
13571360
}
13581361
/*
@@ -1363,6 +1366,7 @@ AS5600BurnReports AS5600::burnZeroAndMaxPositions(AS5600SpecialVerifyFlags _use_
13631366
* AS5600_FLAG_SPECIAL_VERIFY_DISABLE
13641367
* AS5600_FLAG_SPECIAL_VERIFY_ENABLE
13651368
* @return:
1369+
* AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED
13661370
* AS5600_BURN_REPROT_MAGNET_NOT_FOUND
13671371
* AS5600_BURN_REPROT_WRITE_OK
13681372
* AS5600_BURN_REPROT_WRITE_WRONG
@@ -1371,38 +1375,40 @@ AS5600BurnReports AS5600::burnZeroAndMaxPositions(AS5600SpecialVerifyFlags _use_
13711375
* AS5600_BURN_REPROT_ATTEMPTS_ENDED
13721376
*/
13731377
AS5600BurnReports AS5600::burnMaxAngleAndConfigurationValue(AS5600SpecialVerifyFlags _use_special_verify) {
1374-
AS5600BurnReports result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
1375-
// Собираем значениях из критически выжных регистров
1376-
byte burn_count = AS5600::getBurnPositionsCount();
1377-
word m_ang = AS5600::getMaxAngle();
1378-
word conf = AS5600::getRawConfigurationValue();
1378+
AS5600BurnReports result = AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED;
13791379

1380-
if(burn_count == 0) { // Если ресурс для записи не исчерпан
1381-
if(AS5600::getMaxAngle() >= AS5600_MIN_ANGLE_VALUE_DEC) { // Если значение угла подходит
1382-
// Наличие магнита проверяем НА ПОСЛЕДНЕМ ШАГЕ, перед отправлением команды на запись!
1383-
if(AS5600::isMagnetDetected()) { // Если магнит обнаружен
1384-
AS5600::AS_WriteOneByte(AS5600_BURN_REG, AS5600_CMD_BURN_SETTINGS); // Отправляем команду записи настроек
1385-
if(_use_special_verify) { // Если используется проверка записанного
1386-
AS5600::loadSavedValues(); // Загружаем из памяти ранее записанные данные
1387-
// Получаем загруженные данные для сравнения
1388-
word m_ang_now = AS5600::getMaxAngle();
1389-
word conf_now = AS5600::getRawConfigurationValue();
1390-
if(m_ang == m_ang_now && conf == conf_now) { // Если записываемые данные совпадают с сохраненными
1391-
result = AS5600_BURN_REPROT_WRITE_OK;
1380+
if(AS5600::isConnected()) { // Если датчик подключен
1381+
// Собираем значениях из критически выжных регистров
1382+
byte burn_count = AS5600::getBurnPositionsCount();
1383+
word m_ang = AS5600::getMaxAngle();
1384+
word conf = AS5600::getRawConfigurationValue();
1385+
if(burn_count == 0) { // Если ресурс для записи не исчерпан
1386+
if(AS5600::getMaxAngle() >= AS5600_MIN_ANGLE_VALUE_DEC) { // Если значение угла подходит
1387+
// Наличие магнита проверяем НА ПОСЛЕДНЕМ ШАГЕ, перед отправлением команды на запись!
1388+
if(AS5600::isMagnetDetected()) { // Если магнит обнаружен
1389+
AS5600::AS_WriteOneByte(AS5600_BURN_REG, AS5600_CMD_BURN_SETTINGS); // Отправляем команду записи настроек
1390+
if(_use_special_verify) { // Если используется проверка записанного
1391+
AS5600::loadSavedValues(); // Загружаем из памяти ранее записанные данные
1392+
// Получаем загруженные данные для сравнения
1393+
word m_ang_now = AS5600::getMaxAngle();
1394+
word conf_now = AS5600::getRawConfigurationValue();
1395+
if(m_ang == m_ang_now && conf == conf_now) { // Если записываемые данные совпадают с сохраненными
1396+
result = AS5600_BURN_REPROT_WRITE_OK;
1397+
}else {
1398+
result = AS5600_BURN_REPROT_WRITE_WRONG;
1399+
}
13921400
}else {
1393-
result = AS5600_BURN_REPROT_WRITE_WRONG;
1401+
result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY;
13941402
}
13951403
}else {
1396-
result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY;
1404+
result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
13971405
}
13981406
}else {
1399-
result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND;
1407+
result = AS5600_BURN_REPROT_ANGLE_VALUE_TOO_SMALL;
14001408
}
14011409
}else {
1402-
result = AS5600_BURN_REPROT_ANGLE_VALUE_TOO_SMALL;
1410+
result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
14031411
}
1404-
}else {
1405-
result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
14061412
}
14071413

14081414
return result;

src/AMS_AS5600.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
** GitHub - https://github.com/S-LABc
1515
** Gmail - romansklyar15@gmail.com
1616
*
17-
* Copyright (C) 2022. v1.3 / License MIT / Скляр Роман S-LAB
17+
* Copyright (C) 2022. v1.4 / License MIT / Скляр Роман S-LAB
1818
*/
1919

2020
#pragma once
@@ -166,6 +166,7 @@ enum AS5600SpecialVerifyFlags {
166166
};
167167
// Ответы методов burnZeroAndMaxPositions, burnMaxAngleAndConfigurationValue
168168
enum AS5600BurnReports {
169+
AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED
169170
AS5600_BURN_REPROT_MAGNET_NOT_FOUND,
170171
AS5600_BURN_REPROT_WRITE_OK,
171172
AS5600_BURN_REPROT_WRITE_WRONG,

0 commit comments

Comments
 (0)