Skip to content

Commit 5a41ba5

Browse files
committed
Правки и новые возможности
1 parent effb638 commit 5a41ba5

File tree

25 files changed

+2214
-28
lines changed

25 files changed

+2214
-28
lines changed

examples/AVR/ChangeVolumeOS_AVR/ChangeVolumeOS_AVR.ino

+19-9
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,18 @@
3434
*
3535
* Зависимости:
3636
* https://github.com/NicoHood/HID
37+
*
38+
* Больше информации в WiKi:
39+
* https://github.com/S-LABc/AMS-AS5600-Arduino-Library/wiki
3740
*
3841
* Контакты:
3942
** YouTube - https://www.youtube.com/channel/UCbkE52YKRphgkvQtdwzQbZQ
4043
** Telegram - https://www.t.me/slabyt
44+
** Канал в Telegram - https://www.t.me/t_slab
4145
** GitHub - https://github.com/S-LABc
4246
** Gmail - romansklyar15@gmail.com
4347
*
44-
* Copyright (C) 2022. v1.0 / Скляр Роман S-LAB
48+
* Copyright (C) 2022. v1.1 / Скляр Роман S-LAB
4549
*/
4650

4751
// Подключаем библиотеки
@@ -73,6 +77,10 @@ void setup() {
7377
Sensor.begin();
7478
// Настраиваем шину I2C на 400кГц
7579
Sensor.setClock();
80+
//Можно на друие частоты, но работает не на всех микроконтроллерах
81+
//Sensor.setClock(AS5600_I2C_CLOCK_100KHZ); // 100кГц
82+
//Sensor.setClock(AS5600_I2C_CLOCK_1MHZ); // 1МГц
83+
//Sensor.setClock(725000); // Пользовательское значение 725кГц
7684
}
7785

7886
void loop() {
@@ -84,14 +92,16 @@ void loop() {
8492
}
8593
// Обработка показаний датчика и управление громкостью
8694
void sensorEvent() {
87-
now_value = Sensor.getRawAngle(); // Получаем нынешнее значение (от 0 до 4095)
88-
delta_value = now_value - last_value; // Находим разность текущего и прошлого значений
95+
if(Sensor.isConnected()) {
96+
now_value = Sensor.getRawAngle(); // Получаем нынешнее значение (от 0 до 4095)
97+
delta_value = now_value - last_value; // Находим разность текущего и прошлого значений
8998

90-
if(delta_value > 2) { // Если был поворот с разностью больше 2
91-
Consumer.write(MEDIA_VOLUME_UP); // Увеличиваем громкость
92-
}else if(delta_value < -2) { // Если был поворот с разностью меньше -2
93-
Consumer.write(MEDIA_VOLUME_DOWN); // Уменьшаем громкость
94-
}
99+
if(delta_value > 2) { // Если был поворот с разностью больше 2
100+
Consumer.write(MEDIA_VOLUME_UP); // Увеличиваем громкость
101+
}else if(delta_value < -2) { // Если был поворот с разностью меньше -2
102+
Consumer.write(MEDIA_VOLUME_DOWN); // Уменьшаем громкость
103+
}
95104

96-
last_value = now_value; // Сохраняем нынешнее значение как прошлое
105+
last_value = now_value; // Сохраняем нынешнее значение как прошлое
106+
}
97107
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* LEDBrightnessRawAngle_AVR
3+
*
4+
* Демонстрация управления яркостью светодиода
5+
* при помощи датчика AS5600
6+
*
7+
* Подключение:
8+
* AS5600 Board
9+
* VCC -> +3V3
10+
* GND -> GND
11+
* DIR -> GND
12+
* SDA -> SDA
13+
* SCL -> SCL
14+
*
15+
* Проверка:
16+
* 1. Подключить датчик согласно распиновке
17+
* 2. Подключить светодиод между LED_PIN и GND через резистор
18+
* 3. Загрузить скетч в плату
19+
* 4. Менять положение магнита
20+
*
21+
* Примечания:
22+
* 1. Если используется плата с логическими уровнями 5В, то
23+
* необходимо удалить резистор R1 (0 Ом) с платы датчика,
24+
* а вывод VCC подкючить к 5В питанию!
25+
*
26+
* Документация к датчику:
27+
* https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
28+
*
29+
* Больше информации в WiKi:
30+
* https://github.com/S-LABc/AMS-AS5600-Arduino-Library/wiki
31+
*
32+
* Контакты:
33+
** YouTube - https://www.youtube.com/channel/UCbkE52YKRphgkvQtdwzQbZQ
34+
** Telegram - https://www.t.me/slabyt
35+
** Канал в Telegram - https://www.t.me/t_slab
36+
** GitHub - https://github.com/S-LABc
37+
** Gmail - romansklyar15@gmail.com
38+
*
39+
* Copyright (C) 2022. v1.0 / Скляр Роман S-LAB
40+
*/
41+
42+
// Подключаем библиотеку
43+
#include <AMS_AS5600.h>
44+
45+
// Раскомментировать, если используется второй аппаратный блок I2C у платы
46+
//TwoWire Wire2 (2, I2C_FAST_MODE);
47+
//#define Wire Wire2
48+
49+
// Контакт микроконтроллера с подключенным светодиодом
50+
// Подходит только с функцией PWM, например ~3, ~5, ~6, ~9, ~10, ~11
51+
#define LED_PIN 9
52+
53+
// Создаем объект Sensor с указанием ссылки на объект Wire
54+
AS5600 Sensor(&Wire);
55+
56+
void setup() {
57+
// Настраиваем контакт со светодиодом на выход
58+
pinMode(LED_PIN, OUTPUT);
59+
60+
// Запускаем соединение
61+
Sensor.begin();
62+
// Настраиваем шину I2C на 400кГц
63+
Sensor.setClock();
64+
//Можно на друие частоты, но работает не на всех микроконтроллерах
65+
//Sensor.setClock(AS5600_I2C_CLOCK_100KHZ); // 100кГц
66+
//Sensor.setClock(AS5600_I2C_CLOCK_1MHZ); // 1МГц
67+
//Sensor.setClock(725000); // Пользовательское значение 725кГц
68+
}
69+
70+
void loop() {
71+
// Получаем значения АЦП для полного круга 0-4095
72+
word raw = Sensor.getRawAngle();
73+
// Приводим диапазон 0-4095 к даипазону 0-255 (8 бит ШИМ)
74+
byte brightness = map(raw, 0, 4095, 0, 255);
75+
76+
// Устанавливаем нужную яркость
77+
analogWrite(LED_PIN, brightness);
78+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* ReadAngle_VisuallyPC
3+
*
4+
* Демонстрация вывода данных от датчика AS5600 на компьютер
5+
* для отображения в программе "AS5600 Visually.exe"
6+
*
7+
* Подключение:
8+
* AS5600 Board
9+
* VCC -> +3V3
10+
* GND -> GND
11+
* DIR -> GND
12+
* SDA -> SDA
13+
* SCL -> SCL
14+
*
15+
* Примечения:
16+
* 1. Если используется плата с логическими уровнями 5В, то
17+
* необходимо удалить резистор R1 (0 Ом) с платы датчика,
18+
* а вывод VCC подкючить к 5В питанию!
19+
*
20+
* Проверка:
21+
* 1. Подключить датчик согласно распиновке
22+
* 2. Загрузить скетч в плату
23+
* 3. Открыть программу [библиотеки]\AMS-AS5600-Arduino-Library\addons\AS5600 Visually\AS5600 Visually.exe
24+
* 4. Выбрать com port и нажать Connect
25+
* 5. Менять положение магнита
26+
*
27+
* Документация к датчику:
28+
* https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
29+
*
30+
* Больше информации в WiKi:
31+
* https://github.com/S-LABc/AMS-AS5600-Arduino-Library/wiki
32+
*
33+
* Исходный код приложения AS5600 Visually.exe:
34+
* https://github.com/S-LABc/AS5600-Position-Sensor-UI
35+
*
36+
* Контакты:
37+
** YouTube - https://www.youtube.com/channel/UCbkE52YKRphgkvQtdwzQbZQ
38+
** Telegram - https://www.t.me/slabyt
39+
** Канал в Telegram - https://www.t.me/t_slab
40+
** GitHub - https://github.com/S-LABc
41+
** Gmail - romansklyar15@gmail.com
42+
*
43+
* Copyright (C) 2022. v1.1 / Скляр Роман S-LAB
44+
*/
45+
46+
// Подключаем библиотеку
47+
#include <AMS_AS5600.h>
48+
49+
// Создаем объект Sensor с указанием ссылки на объект Wire
50+
AS5600 Sensor(&Wire);
51+
52+
void setup() {
53+
// Настраиваем скорость ТОЛЬКО 115200
54+
Serial.begin(115200);
55+
56+
// Запускаем соединение
57+
Sensor.begin();
58+
// Настраиваем шину I2C на 400кГц
59+
Sensor.setClock();
60+
//Можно на друие частоты, но работает не на всех микроконтроллерах
61+
//Sensor.setClock(AS5600_I2C_CLOCK_100KHZ); // 100кГц
62+
//Sensor.setClock(AS5600_I2C_CLOCK_1MHZ); // 1МГц
63+
//Sensor.setClock(725000); // Пользовательское значение 725кГц
64+
}
65+
66+
void loop() {
67+
// Отправляем данные на компьтер, где отображаем их в приложении "AS5600 Visually.exe"
68+
Serial.println(Sensor.getRawAngle());
69+
delay(1);
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* ReadRawAndDegreeAngle_SSD1306_I2C
3+
*
4+
* Демонстрация вывода значений АЦП, угла в градусах
5+
* от датчика AS5600 на экран OLED_SSD1306_I2C
6+
*
7+
* Подключение датчика:
8+
* AS5600 Board
9+
* VCC -> +3V3
10+
* GND -> GND
11+
* DIR -> GND
12+
* SDA -> SDA
13+
* SCL -> SCL
14+
*
15+
* Подключение дисплея:
16+
* SSD1306 Board
17+
* VCC -> +3V3
18+
* GND -> GND
19+
* SDA -> SDA
20+
* SCL -> SCL
21+
*
22+
* Проверка:
23+
* 1. Подключить датчик согласно распиновке
24+
* 2. Подключить дисплей согласно распиновке
25+
* 3. Загрузить скетч в плату
26+
* 4. Менять положение магнита
27+
*
28+
* Документация к датчику:
29+
* https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf
30+
*
31+
* Зависимости:
32+
* https://github.com/adafruit/Adafruit_SSD1306
33+
* https://github.com/adafruit/Adafruit-GFX-Library
34+
*
35+
* Больше информации в WiKi:
36+
* https://github.com/S-LABc/AMS-AS5600-Arduino-Library/wiki
37+
*
38+
* Контакты:
39+
** YouTube - https://www.youtube.com/channel/UCbkE52YKRphgkvQtdwzQbZQ
40+
** Telegram - https://www.t.me/slabyt
41+
** GitHub - https://github.com/S-LABc
42+
** Gmail - romansklyar15@gmail.com
43+
*
44+
* Copyright (C) 2022. v1.1 / Скляр Роман S-LAB
45+
*/
46+
47+
// Подключаем библиотеки
48+
#include <AMS_AS5600.h>
49+
#include <Adafruit_GFX.h>
50+
#include <Adafruit_SSD1306.h>
51+
52+
// Раскомментировать, если используется второй аппаратный блок I2C у платы
53+
//TwoWire Wire2 (2, I2C_FAST_MODE);
54+
//#define Wire Wire2
55+
56+
// Ширина и высота дисплея
57+
#define SCREEN_WIDTH 128
58+
#define SCREEN_HEIGHT 32
59+
// Адрес дисплея: 128х32 - 0x3C, для 128х64 может быть 0x3D
60+
#define SCREEN_ADDRESS 0x3C
61+
// Контакт сброса (если используется)
62+
#define OLED_RESET 4
63+
// Создаем объект display по стандартному методу
64+
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
65+
66+
// Создаем объект Sensor с указанием ссылки на объект Wire
67+
AS5600 Sensor(&Wire);
68+
69+
void setup() {
70+
// Запускаем дисплей
71+
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
72+
/*
73+
* Sensor.begin() и Sensor.setClock() не используются
74+
* Adafruit_SSD1306 делает все это сама
75+
*/
76+
77+
// Если с датчиком порядок, настраивам дисплей для показаний угла
78+
displayInit();
79+
}
80+
81+
void loop() {
82+
// Выводим новые данные на экран
83+
createText(Sensor.getRawAngle());
84+
}
85+
86+
// Подготовка картики с новыми значениями
87+
void createText(uint16_t angle_raw) {
88+
display.clearDisplay();
89+
display.setCursor(0, 0);
90+
display.print("ADC:");
91+
display.println(angle_raw);
92+
display.print("ANG:");
93+
display.print(angle_raw * 0.08789); // 360/4096=0,087890625, 5 знаков после точки для АЦП 12 бит достаточно
94+
//display.print(Sensor.getDegreesAngle()); // Можно получить угол сразу
95+
display.display();
96+
}
97+
// Очистка старого ИЗО, установка шрифта, цвета, курсора
98+
void displayInit() {
99+
display.clearDisplay();
100+
display.setTextSize(2);
101+
display.setTextColor(SSD1306_WHITE);
102+
display.setCursor(0, 0);
103+
}

0 commit comments

Comments
 (0)