-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.c
129 lines (117 loc) · 4.27 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Author: Deng Qinyu
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "font.h"
void voice_broadcast(int * h_m)
{
char now[] = "play soundsw.mp3 >> /dev/null 2>&1";
char am[] = "play sounds.mp3 >> /dev/null 2>&1";
char pm[] = "play sounds/pm.mp3 >> /dev/null 2>&1";
char dot[] = "play sounds/hour.mp3 >> /dev/null 2>&1";
char min[] = "play sounds/min.mp3 >> /dev/null 2>&1";
char number[] = "play sounds/00.mp3 >> /dev/null 2>&1";
int hour, minute;
time_t tmpcal_ptr;
struct tm *tmp_ptr = NULL;
time(&tmpcal_ptr);
tmp_ptr = gmtime(&tmpcal_ptr);
hour = tmp_ptr->tm_hour + 8; // 时区相差八小时
h_m[0] = hour / 10;
h_m[1] = hour % 10; // 将当前系统时间的小时的十位和个位拆分
minute = tmp_ptr->tm_min;
h_m[2] = minute / 10;
h_m[3] = minute % 10; // 将当前系统时间的分钟的十位和个位拆分
// 获取当前时间并分离小时和分钟
system(now);
if (hour > 12)
{
system(pm);
hour -= 12;
number[12] = (char)(hour / 10 + 48); // 写入小时的十位,如果小时只有一位则将小时的十位置空,否则小时的十位为一
number[13] = (char)(hour % 10 + 48); // 写入小时的个位
system(number);
system(dot);
number[12] = (char)(minute / 10 + 48); // 写入分钟的十位,如果分钟只有一位则将分钟的十位置空
number[13] = (char)(minute % 10 + 48);
system(number);
system(min);
}
else
{
system(am);
number[12] = (char)(hour / 10 + 48); // 写入小时的十位,如果小时只有一位则将小时的十位置空,否则小时的十位为一
number[13] = (char)(hour % 10 + 48); // 写入小时的个位
system(number);
system(dot);
number[12] = (char)(minute / 10 + 48); // 写入分钟的十位,如果分钟只有一位则将分钟的十位置空
number[13] = (char)(minute % 10 + 48);
system(number);
system(min);
}
}
int main()
{
int i, h_m[4] = {0}; // h_m数组分别存放当前系统时间小时的十位、个位以及分钟的十位、个位
int flag = 0, k = 0; // flag代表组成一个数字的各组坐标的x坐标
for(i = 0; i <4; i++){
voice_broadcast(h_m);
// 语音播报并给h_m数组赋值
printf("playing");
}
init(); // 初始化
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(3); // 普通抬臂
mraa_gpio_write(gpio1, 1); // 继电器通电,控制抬臂舵机
usleep(30000);
number(0, 0, 111, 1); // 控制机械臂擦除字迹,该情况不使用bx, by, 故bx,by置零
printf("角度=");
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(2);
for (i = 0; i < 4; i++)
{
flag = 0;
k = 0;
printf("now input the number is %d",h_m[i]);
while (LC_Num0[h_m[i]][flag*2] != 0)
{
readl(h_m[i], flag, i + 1); // i + 1分别等于1, 2, 3, 4,对应四个数字
// 执行结束后得到坐标(Tx, Ty)
mraa_gpio_write(gpio1, 1); // 继电器断电,控制左右臂舵机
usleep(30000);
number(point.Tx, point.Ty, 1, 0);
printf("tx,ty=%f,%f",point.Tx,point.Ty);
if (!k)
{
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(0);
}
k = 1; // 表示落笔完成,之后循环
flag++;
}
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(1); // 写字状态抬臂
}
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(2);
mraa_gpio_write(gpio1, 1); // 继电器断电,控制左右臂舵机
usleep(30000);
drawTo(rubberx,rubbery+10);
rotate(pwm1, 180);
usleep(50000);
mraa_gpio_write(gpio1, 0); // 继电器通电,控制抬臂舵机
usleep(30000);
lift(1); // 插回笔擦中
lift(1);
mraa_gpio_write(gpio1, 1); // 继电器断电
deinit();
return 0;
}