14
14
** GitHub - https://github.com/S-LABc
15
15
** Gmail - romansklyar15@gmail.com
16
16
*
17
- * Copyright (C) 2022. v1.3 / License MIT / Скляр Роман S-LAB
17
+ * Copyright (C) 2022. v1.4 / License MIT / Скляр Роман S-LAB
18
18
*/
19
19
20
20
#include " AMS_AS5600.h"
@@ -1311,6 +1311,7 @@ word AS5600::getMagnitude(void) {
1311
1311
* AS5600_FLAG_SPECIAL_VERIFY_DISABLE
1312
1312
* AS5600_FLAG_SPECIAL_VERIFY_ENABLE
1313
1313
* @return:
1314
+ * AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED
1314
1315
* AS5600_BURN_REPROT_MAGNET_NOT_FOUND
1315
1316
* AS5600_BURN_REPROT_WRITE_OK
1316
1317
* AS5600_BURN_REPROT_WRITE_WRONG
@@ -1319,40 +1320,42 @@ word AS5600::getMagnitude(void) {
1319
1320
* AS5600_BURN_REPROT_ATTEMPTS_ENDED
1320
1321
*/
1321
1322
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
+ }
1340
1345
}else {
1341
- result = AS5600_BURN_REPROT_WRITE_WRONG ;
1346
+ result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY ;
1342
1347
}
1343
1348
}else {
1344
- result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY ;
1349
+ result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND ;
1345
1350
}
1346
1351
}else {
1347
- result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND ;
1352
+ result = AS5600_BURN_REPROT_ZPOS_MPOS_NOT_SET ;
1348
1353
}
1349
1354
}else {
1350
- result = AS5600_BURN_REPROT_ZPOS_MPOS_NOT_SET ;
1355
+ result = AS5600_BURN_REPROT_ATTEMPTS_ENDED ;
1351
1356
}
1352
- }else {
1353
- result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
1354
1357
}
1355
-
1358
+
1356
1359
return result;
1357
1360
}
1358
1361
/*
@@ -1363,6 +1366,7 @@ AS5600BurnReports AS5600::burnZeroAndMaxPositions(AS5600SpecialVerifyFlags _use_
1363
1366
* AS5600_FLAG_SPECIAL_VERIFY_DISABLE
1364
1367
* AS5600_FLAG_SPECIAL_VERIFY_ENABLE
1365
1368
* @return:
1369
+ * AS5600_BURN_REPROT_SENSOR_NOT_CONNECTED
1366
1370
* AS5600_BURN_REPROT_MAGNET_NOT_FOUND
1367
1371
* AS5600_BURN_REPROT_WRITE_OK
1368
1372
* AS5600_BURN_REPROT_WRITE_WRONG
@@ -1371,38 +1375,40 @@ AS5600BurnReports AS5600::burnZeroAndMaxPositions(AS5600SpecialVerifyFlags _use_
1371
1375
* AS5600_BURN_REPROT_ATTEMPTS_ENDED
1372
1376
*/
1373
1377
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;
1379
1379
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
+ }
1392
1400
}else {
1393
- result = AS5600_BURN_REPROT_WRITE_WRONG ;
1401
+ result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY ;
1394
1402
}
1395
1403
}else {
1396
- result = AS5600_BURN_REPROT_WRITE_OK_WITHOUT_VERIFY ;
1404
+ result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND ;
1397
1405
}
1398
1406
}else {
1399
- result = AS5600_BURN_REPROT_MAGNET_NOT_FOUND ;
1407
+ result = AS5600_BURN_REPROT_ANGLE_VALUE_TOO_SMALL ;
1400
1408
}
1401
1409
}else {
1402
- result = AS5600_BURN_REPROT_ANGLE_VALUE_TOO_SMALL ;
1410
+ result = AS5600_BURN_REPROT_ATTEMPTS_ENDED ;
1403
1411
}
1404
- }else {
1405
- result = AS5600_BURN_REPROT_ATTEMPTS_ENDED;
1406
1412
}
1407
1413
1408
1414
return result;
0 commit comments