Mcucpp

Форк
0
101 строка · 2.1 Кб
1
#include <usart.h>
2
#include <tiny_ostream.h>
3
#include <iopins.h>
4
#include <pinlist.h>
5
#include <delay.h>
6
#include <timers.h>
7
#include <drivers/servo.h>
8

9
using namespace Mcucpp;
10

11
typedef Usart1 MyUsart;
12

13
class UsartOut
14
{
15
	public:
16
	void put(char c)
17
	{
18
		MyUsart::Write(c);
19
	}
20
 };
21

22
typedef basic_ostream<UsartOut> ostream;
23
ostream cout; 
24

25

26

27
typedef IO::Pc8 Led;
28
typedef Timers::Timer1 ServoTimer;
29
typedef IO::PinList<IO::Pc0, IO::Pc1> ServoPins;
30
Servo<ServoPins, ServoTimer> servo;
31

32

33
const int ServoTable[] = {
34
	128, 140, 153, 165,
35
	177, 188, 199, 209,
36
	219, 227, 234, 241,
37
	246, 250, 253, 254,
38
	254, 253, 251, 248,
39
	243, 237, 230, 222,
40
	213, 204, 193, 182,
41
	170, 158, 145, 133,
42
	120, 107, 95,  83, 
43
	71,  60,  50,  40, 
44
	31,  24,  17,  11, 
45
	7,   3,   1,   1,  
46
	1,   3,   6,   10, 
47
	15,  22,  29,  38, 
48
	47,  58,  68,  80, 
49
	92,  104, 117
50
};
51

52
static const int Elements = sizeof(ServoTable) / sizeof(ServoTable[0]);
53

54

55
int main()
56
{	
57
	MyUsart::Init(9600);
58
	MyUsart::SelectTxRxPins(0, 0);
59
	sei();
60
	
61
	cout << "Hello, world!\r\n";
62
	cout << "Clock = " << Clock::SysClock::ClockFreq() << "\r\n";
63
		
64
	servo.UpdateTimings();
65
	
66
	cout << "servo._pulseDivider = " << servo._pulseDivider << "\r\n";
67
	cout << "servo._pulseMaxReload = " << servo._pulseMaxTicks << "\r\n";
68
	cout << "servo._pulseMinReload = " << servo._pulseMinTicks << "\r\n";
69
	cout << "servo._pauseDivider = " << servo._pauseDivider << "\r\n";
70
	cout << "servo._pauseReload = " << servo._pauseTicks << "\r\n";
71
	
72
	servo.TimerHandler();
73
	ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);
74
	
75
	int pos = 0, prev = 0;
76

77
	DDRC = 0xff;
78
	while(1)
79
	{
80
		delay_ms<10, F_CPU>();
81
		servo.SetPosition(0, (ServoTable[pos] + ServoTable[prev]) / 2);
82
		
83
		delay_ms<10, F_CPU>();
84
		servo.SetPosition(0, ServoTable[pos]);
85
		
86
		servo.SetPosition(1, 127);
87
		
88
		prev = pos;
89
		pos++;
90
		if(pos >= Elements)
91
			pos = 0; 
92
	}
93
	return 0;
94
}
95

96
ISR(TIMER1_OVF_vect)
97
{
98
	ServoTimer::ClearInterruptFlag();
99
	servo.TimerHandler();
100
	ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);
101
}
102

103

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.