@@ -44,7 +44,15 @@ void Arduino_Alvik::reset_hw(){
44
44
delay (100 );
45
45
}
46
46
47
+ void Arduino_Alvik::wait_for_ack (){
48
+ while (last_ack != 0x00 ){
49
+ delay (20 );
50
+ }
51
+ }
52
+
47
53
int Arduino_Alvik::begin (){
54
+ pinMode (LED_RED, OUTPUT);
55
+ pinMode (LED_GREEN, OUTPUT);
48
56
49
57
last_ack = 0 ;
50
58
@@ -120,26 +128,23 @@ int Arduino_Alvik::begin(){
120
128
uart->flush ();
121
129
122
130
123
- pinMode (CHECK_STM32, INPUT_PULLUP );
131
+ pinMode (CHECK_STM32, INPUT_PULLDOWN );
124
132
pinMode (RESET_STM32, OUTPUT);
133
+ pinMode (NANO_CHK, OUTPUT);
134
+ digitalWrite (NANO_CHK, LOW);
125
135
126
- if (digitalRead (CHECK_STM32)==0 ){
127
- return -1 ;
136
+ if (!is_on ()){
137
+ delay (1000 );
138
+ idle ();
128
139
}
129
140
130
141
// begin_update_thread();
131
142
xTaskCreatePinnedToCore (this ->update_thread , " update" , 10000 , this , 1 , &update_task, 0 );
132
143
133
144
delay (100 );
134
145
reset_hw ();
135
- delay (1000 );
136
146
137
-
138
- while (last_ack!=0x00 ){
139
- delay (20 );
140
- }
141
-
142
- delay (2000 );
147
+ wait_for_ack ();
143
148
144
149
set_illuminator (true );
145
150
set_behaviour (BEHAVIOUR_ILLUMINATOR_RISE);
@@ -151,13 +156,52 @@ void Arduino_Alvik::stop(){
151
156
set_wheels_speed (0 ,0 );
152
157
}
153
158
159
+ bool Arduino_Alvik::is_on (){
160
+ if (digitalRead (CHECK_STM32)==0 ){
161
+ return false ;
162
+ }
163
+ return true ;
164
+ }
165
+
166
+ void Arduino_Alvik::idle (){
167
+ digitalWrite (NANO_CHK, HIGH);
168
+ delay (500 );
169
+ while (!is_on ()){
170
+ // read battery value
171
+ /*
172
+ pinMode(A4, OUTPUT);
173
+ pinMode(A5, OUTPUT);
174
+ digitalWrite(A4, HIGH);
175
+ digitalWrite(A5, HIGH);
176
+ delay(100);
177
+ digitalWrite(A4, LOW);
178
+ digitalWrite(A5, LOW);
179
+ delay(100);
180
+ Wire.begin();
181
+ */
182
+ digitalWrite (LED_GREEN, HIGH);
183
+ delay (1000 );
184
+ digitalWrite (LED_GREEN, LOW);
185
+ delay (1000 );
186
+ }
187
+ }
188
+
154
189
155
190
// -----------------------------------------------------------------------------------------------//
156
191
// update //
157
192
// -----------------------------------------------------------------------------------------------//
158
193
159
194
void Arduino_Alvik::update (const int delay_value){ // it is private
160
195
while (update_task != NULL ){
196
+ if (!is_on ()){
197
+ idle ();
198
+ reset_hw ();
199
+ uart->flush ();
200
+ delay (1000 );
201
+ wait_for_ack ();
202
+ set_illuminator (true );
203
+ set_behaviour (BEHAVIOUR_ILLUMINATOR_RISE);
204
+ }
161
205
if (read_message ()){
162
206
parse_message ();
163
207
}
0 commit comments