Mcucpp

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

10
using namespace Mcucpp;
11

12
typedef Usart1 Usart;
13

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

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

26

27
typedef IO::Pc8 Led;
28
typedef Timers::Timer7 ServoTimer;
29
typedef IO::PinList<IO::Pb8, IO::Pb9, IO::Pb7> ServoPins;
30
Servo<ServoPins, ServoTimer> servo;
31

32
const int ServoTable[] = {
33
	128, 134, 140, 146, 153, 159, 165, 171, 
34
	177, 183, 188, 194, 199, 204, 209, 214, 
35
	219, 223, 227, 231, 234, 238, 241, 243, 
36
	246, 248, 250, 251, 253, 254, 254, 254, 
37
	254, 254, 253, 252, 251, 250, 248, 245, 
38
	243, 240, 237, 234, 230, 226, 222, 218, 
39
	213, 208, 204, 198, 193, 187, 182, 176, 
40
	170, 164, 158, 152, 145, 139, 133, 126, 
41
	120, 114, 107, 101, 95, 89, 83, 77, 
42
	71, 66, 60, 55, 50, 45, 40, 36, 
43
	31, 27, 24, 20, 17, 14, 11, 9, 
44
	7, 5, 3, 2, 1, 1, 1, 1, 
45
	1, 2, 3, 4, 6, 8, 10, 12, 
46
	15, 18, 22, 25, 29, 34, 38, 43, 
47
	47, 52, 58, 63, 68, 74, 80, 86, 
48
	92, 98, 104, 111, 117, 123
49
};
50

51
static const int Elements = sizeof(ServoTable) / sizeof(ServoTable[0]);
52
typedef IO::Pa0 Btn;
53
int main()
54
{
55
	Clock::SysClock::SetClockFreq(24000000);
56
	
57
	IO::Porta::Enable();
58
	IO::Portb::Enable();
59
	IO::Portc::Enable();
60
	IO::Portd::Enable();
61

62

63
	Led::SetConfiguration(IO::NativePortBase::Out);
64
	IO::Pc9::SetConfiguration(IO::NativePortBase::Out);
65
	Btn::SetConfiguration(IO::NativePortBase::In);
66
	Btn::SetPullUp(IO::NativePortBase::PullUp);
67
	
68
	Led::Set();
69
	
70
	Usart::Init(115200);
71
	Usart::SelectTxRxPins(0, 0);
72
	
73
	
74
	cout << "Hello, world!\r\n";
75
	cout << "Clock = " << Clock::SysClock::ClockFreq() << "\r\n";
76

77
	IO::Pc9::Set();
78
	
79
	servo.UpdateTimings();
80
	
81
	cout << "servo._pulseDivider = " << servo._pulseDivider << "\r\n";
82
	cout << "servo._pulseMaxReload = " << servo._pulseMaxTicks << "\r\n";
83
	cout << "servo._pulseMinReload = " << servo._pulseMinTicks << "\r\n";
84
	cout << "servo._pauseDivider = " << servo._pauseDivider << "\r\n";
85
	cout << "servo._pauseReload = " << servo._pauseTicks << "\r\n";
86
	
87
	servo.TimerHandler();
88
	ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);
89
	
90
	int pos = 0, prev = 0;
91
	
92
	while(1)
93
	{
94
		if(Btn::IsSet())
95
		{
96
			servo.SetPosition(2, 0);
97
		}
98
		else
99
		{
100
			servo.SetPosition(2, 255);
101
		}
102
		delay_ms<20, 24000000>();
103
		IO::Pc9::Toggle();
104
		servo.SetPosition(0, (ServoTable[pos] + ServoTable[prev]) / 2);
105
		
106
		delay_ms<20, 24000000>();
107
		servo.SetPosition(0, ServoTable[pos]);
108
		
109
		servo.SetPosition(1, 0);
110
		
111
		prev = pos;
112
		pos++;
113
		if(pos >= Elements)
114
			pos = 0;
115
	}
116
	return 0;
117
}
118

119
extern "C" MCUCPP_INTERRUPT(TIM7_IRQHandler)
120
{
121
	ServoTimer::ClearInterruptFlag();
122
	servo.TimerHandler();
123
	ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);
124
}
125

126

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

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

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

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