Skocz do zawartości

Problem z wyświetlaniem danych z czujnika ultradźwiękowego


Koala

Pomocna odpowiedź

Witam, postanowiłem stworzyć projekt sonaru z wykorzystaniem Arduino, ekranu lcd tft 1.8 cala, serwomechanizmu i wydruku 3d, zainspirowałem się znalezionym filmikiem. Mój problem polega na tym, że gdy próbuję przenieść odczyt "distance" na ekran lcd to przy wartościach poniżej 10cm pokazują mi się losowe cyferki. W monitorze portu wartości poniżej tych 10cm są już prawidłowe. Ta linijka (Serial.println(distance);) w porcie pokazuje mi prawidłowe wartości, a ta (ucg.setPrintPos(10,0);ucg.print( distance );) w ekranie już nie.

Niżej przesyłam mój cały kod i bardzo proszę o pomoc.

#include "Ucglib.h"
#include <Servo.h>.
const int trigPin = 6;
const int echoPin = 5;
int Ymax = 128;
int Xmax = 160;
int base = 8;
int pos = base+6;
int deg=0;
int x;
int val =200;
int j = 2;
Servo myServo;

long duration;
int distance;
int k;


Ucglib_ST7735_18x128x160_HWSPI ucg( 8,  10,  9);

void setup(void)
{
delay(1000);
myServo.write(80);
ucg.begin(UCG_FONT_MODE_SOLID);
ucg.setFont(ucg_font_6x10_tr);
ucg.clearScreen();
ucg.setRotate270();

pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
Serial.begin(9600);
myServo.attach(3); 

}

void loop(void)
{

fix();

for ( x=90; x >= 0; x--){

distance = calculateDistance();
Serial.println(distance);

k = map(x, 0, 90, 0,180);
myServo.write(k);
if (distance < 30){
int f = x+6;
ucg.setColor(255, 0, 0);
ucg.drawLine(Xmax/2, pos, -val*cos(radians(f*2)),val*sin(radians(f*2)));
}
ucg.setColor(0, 207, 0);
ucg.drawLine(Xmax/2, pos, -200*cos(radians(x*2)),200*sin(radians(x*2)));

int d = x+1;
ucg.setColor(0, 207, 0);
int c = x+2;
ucg.setColor(0, 207, 0);
int b = x+3;
ucg.setColor(0, 102, 0);
int a = x+4;
ucg.setColor(0, 102, 0);
int e = x+5;
ucg.setColor(0, 0, 0);
ucg.drawLine(Xmax/2, pos, -200*cos(radians(e*2)),200*sin(radians(e*2)));
ucg.setColor(255, 0, 0);
ucg.setPrintPos(160,0);
ucg.setPrintDir(2);
ucg.print("Kat :");
deg = map (x, 0, 90 , 180, 0);
ucg.setPrintPos(120,0);
ucg.setPrintDir(2);
ucg.print(deg);
ucg.setPrintPos(10,0);
ucg.print( distance );
ucg.setColor(0, 0, 255);
ucg.setPrintPos(90,38);
ucg.setPrintDir(2);
ucg.print("0.25");
ucg.setPrintPos(90,70);
ucg.print("0.50");
ucg.setPrintPos(90,110);
ucg.print("1.00");
}


fix();

for ( x=0; x <= 90; x++){
distance = calculateDistance();
Serial.println(distance);
k = map(x, 0, 90, 0,180);
myServo.write(k);
if (distance < 10){
int e = x-5;
ucg.setColor(255, 0, 0);
ucg.drawLine(Xmax/2, pos, -val*cos(radians(e*2)),val*sin(radians(e*2)));
}

ucg.setColor(0, 207, 0);
ucg.drawLine(Xmax/2, pos, -200*cos(radians(x*2)),200*sin(radians(x*2)));

int a = x-1;


int b = x-2;
ucg.setColor(0, 102, 0);

int c = x-3;
ucg.setColor(0, 102, 0);

int d = x-4;
ucg.setColor(0, 0, 0);
ucg.drawLine(Xmax/2, pos, -200*cos(radians(d*2)),200*sin(radians(d*2)));
ucg.setColor(255, 0, 0);
ucg.setPrintPos(160,0);
ucg.setPrintDir(2);
ucg.print("Kat :");
deg = map (x, 0, 90 , 0, 180);
ucg.setPrintPos(120,0);
ucg.setPrintDir(2);
ucg.print(deg);
ucg.setPrintPos(10,0);
ucg.print(distance);

ucg.setColor(0, 0, 255);
ucg.setPrintPos(90,38);
ucg.setPrintDir(2);
ucg.print("0.25");
ucg.setPrintPos(90,70);
ucg.print("0.50");
ucg.setPrintPos(90,110);
ucg.print("1.00");

}
//ucg.clearScreen();

}

void fix(){
ucg.setColor(255, 0, 0);
ucg.drawDisc(Xmax/2, base, 5, UCG_DRAW_LOWER_RIGHT);
ucg.drawDisc(Xmax/2, base, 5, UCG_DRAW_LOWER_LEFT);

ucg.setColor(225, 255, 50);
ucg.drawCircle(80, base, 115, UCG_DRAW_LOWER_RIGHT);
ucg.drawCircle(80, base, 115, UCG_DRAW_LOWER_LEFT);

ucg.drawCircle(80, base, 78, UCG_DRAW_LOWER_RIGHT);
ucg.drawCircle(80, base, 78, UCG_DRAW_LOWER_LEFT);

ucg.drawCircle(80, base, 40, UCG_DRAW_LOWER_RIGHT);
ucg.drawCircle(80, base, 40, UCG_DRAW_LOWER_LEFT);

ucg.drawLine(0, base, 160,base);


ucg.setColor(0, 0, 0);
ucg.drawBox(100, 0, 30, 8);

}


int calculateDistance(){

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration*0.034/2;
return distance;
}

 

Link do komentarza
Share on other sites

Rozwiązaniem była taka funkcja, ale niestety nie umiem zmusić programu aby zamiast "x" wyświetlał spację.

void dys(){

ucg.setColor(255, 0, 0);
ucg.setPrintPos(35,0);
ucg.print(distance);
if(distance < 10)  
  {
    
    ucg.print("x");
  }
  if(distance < 100)  
  {
   
    ucg.print("x");
  }
  ucg.setColor(255, 0, 0);
ucg.setPrintPos(15,0);
ucg.print("cm");

}
Link do komentarza
Share on other sites

15 godzin temu, Koala napisał:

 ale niestety nie umiem zmusić programu aby zamiast "x" wyświetlał spację.

To nie wystarczy zrobic spacji w cudzyslowiu?? 

ucg.print("     x");
ucg.print("x    ");

 

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.