Forum: Mikrocontroller und Digitale Elektronik Arduino Ultraschallsensor Multifunctionboard Sketch-Frage


von FranzH1222 (Gast)


Lesenswert?

Hallo zusammen,

habe auf meinem Uno ein Multifunctionshield und einen HC-SR04 
(Ultraschallsensor).

Der gemessene Abstand wird auf der Digit-Anzeige dargestellt.
Der Sketch funktioniert bis auf drei Kleinigkeiten ganz gut.

Mit diesen drei Kleinigkeiten wollte ich mich gerne an euch wenden ;-)

1. Soll über 80 cm überhaupt nichts auf der Digitanzeige erscheinen um 
Strom zu sparen.

2. Leuchten im Moment die LED's ab drücken von Button 1 bzw. 2.
Dies soll nicht so sein. Diese sollen eigentlich nur blinken sobald der 
Abstand kleiner 10cm ist.


Anbei mein Murks ;-)



#include <TimerOne.h>
#include <Wire.h>
#include <MultiFuncShield.h>

const int TrigPin = 5;
const int EchoPin = 6;

enum sonarModeValues
{
  MODE_SONAR_OFF,
  MODE_SONAR_ON
};

byte sonarMode = MODE_SONAR_OFF;

void setup()
{
  Serial.begin(9600);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);

  Timer1.initialize();
  MFS.initialize(&Timer1);
  MFS.write(".");
 // MFS.writeLeds(LED_ALL, ON); //GEHT
}

void loop()
{
  byte btn = MFS.getButton();

  switch (sonarMode)
  {
    case MODE_SONAR_OFF:
        if (btn == BUTTON_1_PRESSED)
        {
          sonarMode = MODE_SONAR_ON;
         // MFS.beep(5, 95, 1,0,0);
          MFS.write("on");
          MFS.writeLeds(LED_ALL, ON);
        }

        if (btn == BUTTON_2_PRESSED)
        {
          sonarMode = MODE_SONAR_ON;
          MFS.beep(5, 95, 1,0,0);
          MFS.write("on");
          MFS.writeLeds(LED_ALL, ON);
        }
        break;

    case MODE_SONAR_ON:
        if (btn == BUTTON_3_PRESSED)
        {
          sonarMode = MODE_SONAR_OFF;
          MFS.beep(0);
          MFS.write("aus");
          MFS.blinkDisplay(DIGIT_ALL, OFF);
          MFS.writeLeds(LED_ALL, OFF);
          MFS.initSonar();
        }
        else
        {
          int distance = MFS.getSonarDataCm(TrigPin, EchoPin);

          if (distance != 0 && distance < 2000)
          {
            int offPeriod = distance - 6;

            if (offPeriod < 0)
            {
              offPeriod = 0;
            }

            MFS.write(distance);
            MFS.setBeepOffPeriod(offPeriod);

            MFS.blinkDisplay(DIGIT_ALL, distance < 15);
            MFS.blinkLeds(LED_ALL, distance < 10);
            if (distance < 7)

              MFS.write("STOP");

          }
          delay(100);
        }
        break;

  }
}



Danke schon mal!
Gruß
Franz

von Rico (Gast)


Lesenswert?

Hallo,

zu 1: Du hast mit "if (distance != 0 && distance < 2000)" deine Anzeige 
eingeschränkt auf 2000 schätzungsweise mm. Also grenze sie doch einfach 
auf 80cm bzw 800mm ein und fertig...

zu 2: Einfach die beiden "MFS.writeLeds(LED_ALL, ON);" unter 
BUTTON_1_PRESSED und BUTTON_2_PRESSED rausschmeißen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.