Wyszukiwanie najmiejszej wartości z tabeli. Mikrokontroler.
Ostatnio zmodyfikowano 2013-11-26 16:57
lukisp2 Temat założony przez niniejszego użytkownika |
Wyszukiwanie najmiejszej wartości z tabeli. Mikrokontroler. » 2013-11-26 16:29:54 Witam Szanownych forumowiczów. Od razu przechodzę do problemu. Wykonuje projekt związany z robotyką na mikrokontrolerze typu arduino. Zadaniem robota jest wykonanie wachlarza pomiarów za pomocą czujnika ultradźwiękowego umieszczonego na serwomotorze, a następnie zwrócenie najmniejszej odległości jaką napotkał w czasie pomiaru i wartości położenia serwa odpowiadającego tej najmniejszej odległości. Jako, że cienko u mnie z programowaniem zatrzymałem się w momencie tego zwrócenia najmniejszej odległości i "namiaru na nią". Stworzyłem tablice, która zapisuje poszczególne zmierzone wartości w 2 kolumnach ale nie jestem pewien czy działa. Pod spodem zamieszczam kod: Kod: #include <Servo.h>
Servo myservo;
const int trigPin = 42; const int echoPin = 43;
int tab[ 159 ][ 2 ];
void setup() { Serial.begin( 9600 ); myservo.attach( 10 ); pinMode( trigPin, OUTPUT ); pinMode( echoPin, INPUT ); }
void loop() { int pos; for( pos = 10; pos < 170; pos++ ) { pomiar_odleglosci_serwo_1( pos ); } }
bool pomiar_odleglosci_serwo_1( int pos ) { int l_p = 7; float odl_s = 0; int i_p = 0; float T_odl[ l_p ]; myservo.write( pos ); delay( 100 ); for( int i = 0; i < l_p; i++ ) { digitalWrite( trigPin, LOW ); delayMicroseconds( 2 ); digitalWrite( trigPin, HIGH ); delayMicroseconds( 10 ); digitalWrite( trigPin, LOW ); int duration = pulseIn( echoPin, HIGH ); T_odl[ i ] = microsecondsToCentimeters( duration ); delay( 40 ); } for( int j = 0; j <( l_p / 2 ); j++ ) { odl_s =- 1; for( int i = 0; i < l_p; i++ ) { if( T_odl[ i ] > odl_s ) { odl_s = T_odl[ i ]; i_p = i; } } T_odl[ i_p ] =- 1; } tab[ pos ][ 1 ] = pos; tab[ pos ][ 2 ] = odl_s; float min_s = tab[ 10 ][ 2 ]; for( int k = 10; k < 170; k++ ) { if( tab[ k ][ 2 ] < min_s ) min_s = tab[ k ][ 2 ]; } Serial.print( "minimum" ); Serial.print( min_s, 1 ); return true; }
float microsecondsToCentimeters( int microseconds ) { return microseconds / 58.0; }
Wiem, że prawdopodobnie nakręciłem nieźle w tym kodzie. Ale będę naprawdę wdzięczny za wszelką pomoc. |
|
kubawal |
» 2013-11-26 16:32:56 Kod daj w [cpp]...[/cpp].
|
|
kubawal |
» 2013-11-26 16:45:01 O który kawałek kodu ci konkretnie chodzi? O ten z for( int j = 0; j <( l_p / 2 ); j++ ) ? Najlepiej przepisz sobie tą pętle w pseudokodzie, wtedy najłatwiej dostrzec błędy w logice programu. |
|
lukisp2 Temat założony przez niniejszego użytkownika |
» 2013-11-26 16:57:02 Chodzi mi konkretnie o: tab[ pos ][ 1 ] = pos; tab[ pos ][ 2 ] = odl_s;
. . . .
float min_s = tab[ 10 ][ 2 ]; for( int k = 10; k < 170; k++ ) { if( tab[ k ][ 2 ] < min_s ) min_s = tab[ k ][ 2 ]; } Serial.print( "minimum" ); Serial.print( min_s, 1 );
|
|
« 1 » |