Software Aktuelle und alte Versionen

Hi

mal eine frage an die Software tüftler

Wie kann ich nach einer if stellung ein delay setzen ohne das ich den nach stehenden code durch das delay der if stellung blockiere??

Einfach gesagt ich möchte das, sobald der Stromsensor über 520 kommt das mit einer Verzögerung von ca. 10 Sekunden der eigentlich Programmteil startet aber im laufe des Programms darf die 10 Sekunden Verzögerung das Programm nicht bremsen.

Ach ja und wie kann ich eine MEDIAN für die US Sensoren einbauen ???

#define trigPin1 10
#define echoPin1 9
#define trigPin2 8
#define echoPin2 7
#define trigPin3 4
#define echoPin3 3
#define trigPin4 6
#define echoPin4 5
#define relay1 13
#define relay2 12
#define relay3 11
#define relay4 2




void setup() {
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin4, OUTPUT);
pinMode(echoPin4, INPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);


}

void loop() {
int sensorValue = analogRead(A1);
if (sensorValue > 520) {



long duration1, distance1;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);

delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 < 21) { // Entfernung für den US-Sensor
digitalWrite(relay1,HIGH);

}
else {
digitalWrite(relay1,LOW);

}
if (distance1 >= 200 || distance1 = 200 || distance2 = 200 || distance3 = 200 || distance4
 
Hendrik schrieb:
Wie kann ich nach einer if stellung ein delay setzen ohne das ich den nach stehenden code durch das delay der if stellung blockiere??

Einfach gesagt ich möchte das, sobald der Stromsensor über 520 kommt das mit einer Verzögerung von ca. 10 Sekunden der eigentlich Programmteil startet aber im laufe des Programms darf die 10 Sekunden Verzögerung das Programm nicht bremsen.

Ach ja und wie kann ich eine MEDIAN für die US Sensoren einbauen ???
Ich antworte mal allgemeiner (so dass man es auch für andere Dinge einsetzen kann).

Verzögerung ohne Blockieren
Dies geht nur über eine Zeitvariable, welche die TriggerZeit speichert und diese dann ständig in der Programmschleife abfragt.
Beispiel:


Code:
// berechne Zeit, wann etwas (in der Zukunft) passieren soll - in diesem Beispiel jetzte Zeit plus 10 Sekunden (1 sec = 1000 ms)
unsigned long triggerZeit = millis() + 10000;

// in der Programmschleife dann immer abfragen, ob Triggerzeit erreicht
void loop(){
  if (millis() >= triggerZeit){
    // Triggerzeitpunkt erreicht!
    // hier Aktion durchführen
  }
}


Mittelwert für Sensoren (gleitender Durchschnitt)
Diese Variante der Mittelwertbildung ist einfach. Die Idee ist, dass man "Ausreißer" durch Mittelwertbildung eliminiert. Dazu werden die "bisherigen" Messungen und jede "neue" Messung zueinander ins Verhältnis gesetzt. Zum Beispiel 50% der bisherigen Messungen und 50% neue Messung ergibt 100% gemittelte Messung.

Beispiel:

Code:
double messungMittel = 0.0;

void loop(){
  int neueMessung = analogRead(0);
  // Berechnung gleitenden Durchschnitt 
  messungMittel = 0.5 * messungMittel + 0.5 * ((double)neueMessung);  
  // messungMittel auswerten...
}



Median für Sensoren
Etwas komplizierter. Die Idee ist, dass von mehreren Messwerten der häufigste in "der Mitte liegt".

Beispiel:
Messungen waren: 493,3002,3400,8190,2938,3102,190,9344,8190,2679,2300
Diese Werte werden sortiert: 9344,8190,3400,3102,3002,2938,2679,2300,493,190
Der Häufigste Wert liegt nun in der Mittte "3002"

Dieser Code stammt nicht von mir, soll aber diese Idee umsetzen:


Code:
unsigned int ping(){
  unsigned int uS;  
  digitalWrite(TRIGGER_PIN, LOW); 
  delayMicroseconds(2); 
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10); 
  digitalWrite(TRIGGER_PIN, LOW);
  uS = pulseIn(ECHO_PIN, HIGH, MAX_ECHO_TIME + 1000);
  if (uS > MAX_ECHO_TIME) uS = NO_ECHO;
  return uS;
}


unsigned int ping_median(uint8_t it) {
  unsigned int uS[it], last;
  uint8_t j, i = 0;
  uS[0] = NO_ECHO;
  while (i < it) {
    last = ping();           // Send ping.
    if (last == NO_ECHO) {   // Ping out of range.
	it--;                // Skip, don't include as part of median.
	last = MAX_ECHO_TIME; // Adjust "last" variable so delay is correct length.
    } else {                       // Ping in range, include as part of median.
	if (i > 0) {               // Don't start sort till second ping.
		for (j = i; j > 0 && uS[j - 1] < last; j--) // Insertion sort loop.
		  uS[j] = uS[j - 1]; // Shift ping array to correct position for sort insertion.
	 } else j = 0;              // First ping is starting point for sort.
	 uS[j] = last;              // Add last ping to array in sorted position.
         i++;                       // Move to next ping.
     }
     if (i < it) delay(PING_MEDIAN_DELAY - (last >> 10)); // Millisecond delay between pings.
   }
   return (uS[it >> 1]); // Return the ping distance median.
}
 
Zuletzt bearbeitet von einem Moderator:
Danke

also das mit der Zeitvariable habe ich geschafft :)

Nur das mit der Median, da bin ich noch dabei es zu implementieren:)


Mfg Hendrik
 
Mir sind noch ein paar Kleinigkeiten eingefallen die man beachten sollte:

-Bitte Version 0.3.x nicht mehr benutzen (und falls die Version doch benutzt wird, bitte "reverseMotorDir=false" einstellen!) Diese Feature macht nur bei Ambrogio L50 Sinn (wo hinten=vorne alles spiegelgleich ist) und ist daher in Version 0.4.x in die Ambrogio-Config-Datei gewandert.

-Es wird empfohlen Version 0.4.x zu benutzen, weil man dann in der eigentlichen Steuerungssoftware (ardumower.ino) nichts ändern muss. Man wählt dort nur noch eine Config-Datei aus und kommentiert die anderen aus - Beispiel (aktiviert Rotenbach-Config):


Code:
// ------ choose ONLY ONE configuration
//#include "aml50.h"  // Ambrogio L50
//#include "tcg158.h" // Tianchen TC-G158  (Güde etc.)
#include "spm12320.h" // Supoman SPM12-320 (Rotenbach etc.)

Der Vorteil ist, dass man so schneller auf zukünftige Versionen updaten kann! (man behält dann seine alte Config und spielt nur die neue Steuerungssoftware ein)
 
Die 5.0 Version bekomme ich nicht aufgespielt.
Hier die Meldungen

Code:
ardumower.ino:86:36: error: aml50.h: No such file or directory
ardumower.ino: In function 'unsigned int readHCSR04(int, int)':
ardumower:333: error: 'MAX_ECHO_TIME' was not declared in this scope
ardumower.ino: In function 'void setMotorSpeed(int, int)':
ardumower:390: error: 'setActuator' was not declared in this scope
ardumower.ino: In function 'void motorControl()':
ardumower:426: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:435: error: 'useCompass' was not declared in this scope
ardumower:435: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower.ino: In function 'void motorMowControl()':
ardumower:478: error: 'setActuator' was not declared in this scope
ardumower:487: error: 'MAX_MOW_SPEED' was not declared in this scope
ardumower:501: error: 'setActuator' was not declared in this scope
ardumower.ino: In function 'void setup()':
ardumower:508: error: 'BAUDRATE' was not declared in this scope
ardumower:509: error: 'config' was not declared in this scope
ardumower:512: error: 'useButton' was not declared in this scope
ardumower:518: error: 'setActuator' was not declared in this scope
ardumower.ino: In function 'void diag()':
ardumower:628: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower.ino: In function 'void checkButton()':
ardumower:687: error: 'readSensor' was not declared in this scope
ardumower:713: error: 'MAX_MOW_SPEED' was not declared in this scope
ardumower:718: error: 'MAX_MOW_SPEED' was not declared in this scope
ardumower.ino: In function 'void readSensors()':
ardumower:731: error: 'readSensor' was not declared in this scope
ardumower:746: error: 'readSensor' was not declared in this scope
ardumower:748: error: 'MAX_PERIMETER' was not declared in this scope
ardumower:753: error: 'useSonar' was not declared in this scope
ardumower:755: error: 'readSensor' was not declared in this scope
ardumower:761: error: 'useBumper' was not declared in this scope
ardumower:762: error: 'readSensor' was not declared in this scope
ardumower:766: error: 'readSensor' was not declared in this scope
ardumower:772: error: 'useAccel' was not declared in this scope
ardumower:772: error: 'useCompass' was not declared in this scope
ardumower:776: error: 'readSensor' was not declared in this scope
ardumower:787: error: 'readSensor' was not declared in this scope
ardumower.ino: In function 'void setNextState(byte, byte)':
ardumower:808: error: 'driveBiDir' was not declared in this scope
ardumower:814: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:816: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:819: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:822: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:834: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:836: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:848: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:851: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:864: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower.ino: In function 'void checkCurrent()':
ardumower:875: error: 'MAX_MOW_CURRENT' was not declared in this scope
ardumower:876: error: 'setActuator' was not declared in this scope
ardumower:882: error: 'driveBiDir' was not declared in this scope
ardumower:884: error: 'MAX_MOTOR_CURRENT' was not declared in this scope
ardumower:894: error: 'MAX_MOTOR_CURRENT' was not declared in this scope
ardumower.ino: In function 'void checkBumpers()':
ardumower:912: error: 'driveBiDir' was not declared in this scope
ardumower.ino: In function 'void checkPerimeter()':
ardumower:939: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower.ino: In function 'void beep(int)':
ardumower:982: error: 'setActuator' was not declared in this scope
ardumower.ino: In function 'void loop()':
ardumower:997: error: 'setActuator' was not declared in this scope
ardumower:998: error: 'setActuator' was not declared in this scope
ardumower:1001: error: 'useAccel' was not declared in this scope
ardumower:1010: error: 'setActuator' was not declared in this scope
ardumower:1025: error: 'MAX_MOTOR_SPEED' was not declared in this scope
ardumower:1031: error: 'MAX_MOW_SPEED' was not declared in this scope
ardumower:1051: error: 'driveBiDir' was not declared in this scope
ardumower:1086: error: 'useButton' was not declared in this scope
 
naneona schrieb:
Die 5.0 Version bekomme ich nicht aufgespielt.
Hier die Meldungen

Code:
ardumower.ino:86:36: error: aml50.h: No such file or directory

Hallo,
ein paar Ideen:
-möglichst aktuelle Arduino-Version IDE einsetzen (1.0.0 oder höher)
-alle Dateien des .zip Archives in einem Ordner "ardumower" entpacken, so dass sich dort folgende Dateien befinden:
aml50.h
ardumower.ino
spm12320.h
tcg158.h
-wenn ardumower.ino geladen wird, sollten sich in der IDE weitere Tabs jeweils für die .h Dateien öffnen
-Im Code die passende .h Datei (für Rotenbach "spm12320.h") aktivieren und die anderen auskommentieren (siehe oben).

Ich hoffe, es funktioniert dann?
 
Zuletzt bearbeitet von einem Moderator:
ALLE Datein in einen Ordner. :whistle:
Software ist drauf, Motoren laufen genau anders rum? (Beim Test)
Komisch bei der ersten Software war die Drehrichtung richtig.
 
naneona schrieb:
ALLE Datein in einen Ordner. :whistle:
Software ist drauf, Motoren laufen genau anders rum? (Beim Test)
Komisch bei der ersten Software war die Drehrichtung richtig.

Ja, genau - weil Du meinen Kommentar überlesen hast ;-) Ein bisschen den Code verstehen/lesen kann nicht Schaden ;)

In der alten Version war das Vertauschen der Motoren standardmäßig aktiviert (sorry, brauchte ich für meinen L50). Weil Du es einfach so übernommen hast, ist es jetzt verkehrt herum. In den letzten Versionen ist das Vertauschen in die L50-Config-Datei gewandert.

Kannst also die Vertauschung wieder einbauen (siehe L50-Config), oder einfach an den Motoren wechseln.
 
Zuletzt bearbeitet von einem Moderator:
nero76 schrieb:
naneona schrieb:
ALLE Datein in einen Ordner. :whistle:
Software ist drauf, Motoren laufen genau anders rum? (Beim Test)
Komisch bei der ersten Software war die Drehrichtung richtig.

Ja, genau - weil Du meinen Kommentar überlesen hast ;-) Ein bisschen den Code verstehen/lesen solltest Du schon ;)

In der alten Version war das Vertauschen der Motoren standardmäßig aktiviert (sorry, brauchte ich für meinen L50). Weil Du es einfach so übernommen hast, ist es jetzt verkehrt herum. In den letzten Versionen ist das Vertauschen in die L50-Config-Datei gewandert.

Kannst also die Vertauschung wieder einbauen (siehe L50-Config), oder einfach an den Motoren wechseln.

Ach das mit dem lesen ... ;)
Motortest läuft sauber durch.
Starten tut das ganze aber noch nicht, ich schau jetzt nochmal in aller Ruhe drüber.


EDIT Wiederhergestellt
 
Zuletzt bearbeitet von einem Moderator:
Zum Starten benötigt man einen Taster und den Piezo-Buzzer:

pinButton ---o Button o--- GND (Taster für ON/OFF)

pinBuzzer ---o Buzzer o--- GND (Piezo-Buzzer)

Dann den Taster so lange drücken, bis die entsprechende Beep-Folge ertönt.

Betriebsmodi (Button für x Beeps drücken):
1 Beeps : Normal Mähen (mit Messermodulation falls vorhanden)
2 Beeps : Normal Mähen (ohne Messermodulation)
3 Beeps : Fahren via Fernbedienung (RC)
4 Beeps : Fahren ohne Mähmotor
5 Beeps : In Schleife hineinfahren und diese abfahren
 
nero76 schrieb:
Zum Starten benötigt man einen Taster und den Piezo-Buzzer:

pinButton ---o Button o--- GND (Taster für ON/OFF)

pinBuzzer ---o Buzzer o--- GND (Piezo-Buzzer)

Dann den Taster so lange drücken, bis die entsprechende Beep-Folge ertönt.

Betriebsmodi (Button für x Beeps drücken):
1 Beeps : Normal Mähen (mit Messermodulation falls vorhanden)
2 Beeps : Normal Mähen (ohne Messermodulation)
3 Beeps : Fahren via Fernbedienung (RC)
4 Beeps : Fahren ohne Mähmotor
5 Beeps : In Schleife hineinfahren und diese abfahren

ok hab von der Rotenbach Platine den Buzzer genommen.
Kann man gut einstellen so.

Zum Anlaufen bekomme ich ihn aber nicht, hier mal ein paar Zeilen vom Monitor.

Aktuelle Configuration


//#include "aml50.h" // Ambrogio L50
//#include "tcg158.h" // Tianchen TC-G158 (Güde etc.)
#include "spm12320.h" // Supoman SPM12-320 (Rotenbach etc.)


Code:
const char driveBiDir = 0;      // drive bidirectional (1) (forward/backward) or make turns only (0)? 
const char useBumper = 1;       // has bumpers? 
const char useCompass = 0;      // use compass sensor?
const char useAccel = 0;        // use ultra sonic sensor?
const char useSonar = 0;        // use acceleration sensor?
const char useTilt = 0;         // has tilt sensor? (required for TC-G158 board)
const char useButton = 1;       // has digital ON/OFF button?
const char usePerimeter = 1;    // use perimeter?
const char useRemoteRC = 0;     // use remote control (RC)?



Monitor:

Code:
20  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  188  188 son   0 pit   0 rol   0 com   0 per 362 bat 19.17 chg -195 
    21  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  198  198 son   0 pit   0 rol   0 com   0 per 381 bat 19.22 chg -195 
    22  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  208  208 son   0 pit   0 rol   0 com   0 per 400 bat 19.22 chg -195 
    23  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  218  218 son   0 pit   0 rol   0 com   0 per 419 bat 19.22 chg -194 
    24  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  228  228 son   0 pit   0 rol   0 com   0 per 438 bat 19.26 chg -194 
    25  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  238  238 son   0 pit   0 rol   0 com   0 per 457 bat 19.26 chg -194
 
Zuletzt bearbeitet von einem Moderator:
naneona schrieb:
Code:
20  183 v0 OFF  0 spd    0    0    0 sen    0    0    0 bum  188  188 son   0 pit   0 rol   0 com   0 per 362 bat 19.17 chg -195

Alles klar- Ich habe wohl zuviel Annahmen im Code gemacht. Ich bin davon ausgegangen, dass der Ladestromsensor angeschlossen ist oder falls nicht, zumindest keine Werte liefert.

Idee: entweder Ladestromsensor (pinChargeCurrent) auf Masse legen oder den Code auskommentieren (nach "chgCurrent" suchen), welcher den Robot ständig auf "OFF" schaltet wenn geladen wird (d.h. Ladestrom < -15 ist):

if (chgCurrent < -15){
setNextState(STATE_OFF, 0);
}

Sorry :)

UPDATE: die Schaltung für die Ladeüberwachung etc. sieht übrings so aus:

Ladepin(+)
|
Schutzdiode
|
Stromsensor——pinChargeCurrent (Strommessung)
|
Akku (+)
|
47KOhm
|——-pinBatteryVoltage (Spannungsmessung)
5KOhm
|
Akku(-)
|
Ladepin(-)

PS: Aus Sicherheitsgründen auf jeden Fall die Spannung an "pinBatteryVoltage" messen (darf nicht höher als 5V sein) bevor man diesen an den Arduino anschließt!
 
Zuletzt bearbeitet von einem Moderator:
Ladestromsensor (pinChargeCurrent) auf Masse legen

Das ergibt folgendes:

20 183 v0 OFF 0 spd 0 0 0 sen 0 0 0 bum 310 310 son 0 pit 0 rol 0 com 0 per 597 bat 34.59 chg -511

Kein Anlaufen, gibt es noch einen anderen Trick?
47 KOhm muss ich erst besorgen.
 
ok habe jetzt hier

Code:
if (chgCurrent < -15){
setNextState(STATE_OFF, 0);
}

anstatt -15 -555 eingegeben, so läuft er erst mal an.
 
Das System läuft nun an, ist aber nur am rangieren.
Immer zurück und drehen.

Monitor:

Code:
0    8 v0 ROLL 0 spd -237 -237    0 sen    0    0    5 bum    0    0 son   0 pit   0 rol   0 com   0 per 1590 bat 11.28 chg -253 
     0  175 v0 ROLL 0 spd    0    0    0 sen    0    0    5 bum    0    0 son   0 pit   0 rol   0 com   0 per 1607 bat 10.85 chg -261 
     1  182 v0 ROLL 0 spd -210  210    0 sen    0    0    5 bum    0    0 son   0 pit   0 rol   0 com   0 per 1626 bat 11.13 chg -259 
     0   48 v0 FORW 0 spd -227  227    0 sen    0    0    5 bum    0    0 son   0 pit   0 rol   0 com   0 per 1631 bat 11.13 chg -259 
     0   49 v0 REV  0 spd -113  113    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1632 bat 11.13 chg -259 
     0  163 v0 REV  0 spd    0    0    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1644 bat 10.66 chg -264 
     1  182 v0 REV  0 spd -183 -183    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1663 bat 11. 9 chg -258 
     0  150 v0 ROLL 0 spd -239 -239    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1678 bat 11. 9 chg -258 
     0  175 v0 ROLL 0 spd    0    0    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1681 bat  9.72 chg -271 
     1  183 v0 ROLL 0 spd  -70   70    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1700 bat 11. 9 chg -260 
     2  182 v0 ROLL 0 spd -225  225    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1719 bat 10.90 chg -261 
     3  182 v0 ROLL 0 spd -250  250    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1738 bat 11.23 chg -258 
     0    5 v0 FORW 0 spd -250  250    0 sen    0    0    6 bum    0    0 son   0 pit   0 rol   0 com   0 per 1739 bat 11.23 chg -258 
     0    6 v0 REV  0 spd -125  125    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1740 bat 11.23 chg -258 
     0  162 v0 REV  0 spd    0    0    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1756 bat 10.85 chg -262 
     1  182 v0 REV  0 spd -207 -207    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1775 bat 10.99 chg -260 
     0  109 v0 ROLL 0 spd -239 -239    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1786 bat 10.99 chg -260 
     0  175 v0 ROLL 0 spd    0    0    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1793 bat 10.19 chg -268 
     1  182 v0 ROLL 0 spd -131  131    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1812 bat 10.90 chg -261 
     2  182 v0 ROLL 0 spd -235  235    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1831 bat 11.23 chg -260 
     3  182 v0 ROLL 0 spd -251  251    0 sen    0    0    7 bum    0    0 son   0 pit   0 rol   0 com   0 per 1849 bat 12.54 chg -248
 
In der Config steht useBumper 0
die Pin's sind auch nicht angeschlossen.
Dennoch wird jedes mal beim schalten auf FORW ein Bumper Kontakt gezählt.
Merkwürdig
 
naneona schrieb:
Das System läuft nun an, ist aber nur am rangieren.
Immer zurück und drehen.

Monitor:

Code:
0    8 v0 ROLL 0 spd -237 -237    0 sen    0    0    5 bum    0    0 son   0 pit   0 rol   0 com   0 per 1590 bat 11.28 chg -253

Ja, ist klar - Deine Schleife löst dauernd aus, "per" (also Schleifenauslösung) zählt dauernd hoch - Setz' mal den Schleifenschwellwert höher :) (MAX_PERIMETER)

PS: Die Werte müssen erstmal richtig für Deinen Robot/Deine Umgebung angepaßt werden - dann sollte das laufen :)
 
Zuletzt bearbeitet von einem Moderator:
naneona schrieb:
In der Config steht useBumper 0
die Pin's sind auch nicht angeschlossen.
Dennoch wird jedes mal beim schalten auf FORW ein Bumper Kontakt gezählt.
Merkwürdig

Für mich sieht es aber aus als wenn der Bumper-Zähler gleich bleibt:

bum 0 0

Alle anderen Sensoren mit Zähler (son, sen) bleiben gleich. Einzig der Permiter-Zähler (per) zählt hoch! Also löst die Schleife dauernd aus. Abhilfe: Schleifenschwellwert (MAX_PERIMETER) hochsetzen.

UPDATE: Hier nochmal alle Sensoren (mit Bezeichner) in der Übersicht:

1) Zeit des aktuellen Automat-Zustands (ms)
2) loop()-Durchgänge pro Sekunde
3) gewählter Sensor-Verbose-Modus (0=Zählerstände/1=Sensorwerte/2=Sensorwerte)
4) aktuelle Automat-Status (FORW, REV, ROLL etc.)
5) nach-Hause-fahren? (1/0)
6) "spd" - Ansteuerung/Geschwindigkeit Motor: links (PWM), rechts (PWM), Mähwerk (Drehzahl)
7) "sen" - Stromüberschreitungszähler Motor: links, rechts, Mähwerk
8) "bum" - Bumperzähler: links, rechts
9) "son" - Ultraschall-Abstand-unterschritten: Zähler
10) "pit/roll" - Neigung (errechnet mit Beschl.-Sensor)
11) "com" - Kompaß-Kurs
12) "per" - Induktionsschleifendetektor: Zähler
13) "bat" - Batterie-Spannung
14) "chg" - Ladestrom
 
Zuletzt bearbeitet von einem Moderator:
nero76 schrieb:
naneona schrieb:
In der Config steht useBumper 0
die Pin's sind auch nicht angeschlossen.
Dennoch wird jedes mal beim schalten auf FORW ein Bumper Kontakt gezählt.
Merkwürdig

Für mich sieht es aber aus als wenn der Bumper-Zähler gleich bleibt:

bum 0 0

Alle anderen Sensoren mit Zähler (son, sen) bleiben gleich. Einzig der Permiter-Zähler (per) zählt hoch! Also löst die Schleife dauernd aus. Abhilfe: Schleifenschwellwert (MAX_PERIMETER) hochsetzen.

UPDATE: Hier nochmal alle Sensoren (mit Bezeichner) in der Übersicht:

1) Zeit des aktuellen Automat-Zustands (ms)
2) loop()-Durchgänge pro Sekunde
3) gewählter Sensor-Verbose-Modus (0=Zählerstände/1=Sensorwerte/2=Sensorwerte)
4) aktuelle Automat-Status (FORW, REV, ROLL etc.)
5) nach-Hause-fahren? (1/0)
6) "spd" - Ansteuerung/Geschwindigkeit Motor: links (PWM), rechts (PWM), Mähwerk (Drehzahl)
7) "sen" - Stromüberschreitungszähler Motor: links, rechts, Mähwerk
8) "bum" - Bumperzähler: links, rechts
9) "son" - Ultraschall-Abstand-unterschritten: Zähler
10) "pit/roll" - Neigung (errechnet mit Beschl.-Sensor)
11) "com" - Kompaß-Kurs
12) "per" - Induktionsschleifendetektor: Zähler
13) "bat" - Batterie-Spannung
14) "chg" - Ladestrom


Die Übersicht ist gut :cheer:

Habe den Wert auf Max 1000 gestellt

Verhalten bleibt das gleiche, hier ein Auszug (v2)


Code:
0  134 v2 FORW 0 spd -249  249    0 sen   12   17  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 507 795 bat 22.46 chg -511 
     0  135 v2 REV  0 spd -124  124    0 sen   16   22  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 507 795 bat 22.46 chg -511 
     0  159 v2 REV  0 spd    0    0    0 sen   15   19  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 507 793 bat 20.96 chg -511 
     1  182 v2 REV  0 spd  -80  -80    0 sen   10   15  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 507 794 bat 21.15 chg -511 
     2  181 v2 REV  0 spd -226 -226    0 sen   13   19  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 508 795 bat 20.77 chg -511 
     0   48 v2 ROLL 0 spd -237 -237    0 sen   13   15  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 508 794 bat 20.77 chg -511 
     0  173 v2 ROLL 0 spd    0    0    0 sen   10   14  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 508 795 bat 19.88 chg -511 
     1  181 v2 ROLL 0 spd -188  188    0 sen   13   19  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 510 796 bat 20.53 chg -511 
     0   87 v2 FORW 0 spd -227  227    0 sen   11   16  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 509 796 bat 20.53 chg -511 
     0   88 v2 REV  0 spd -113  113    0 sen   15   16  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 510 796 bat 20.53 chg -511 
     0  160 v2 REV  0 spd    0    0    0 sen   11   14  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 510 795 bat 20.68 chg -511 
     1  181 v2 REV  0 spd -146 -146    0 sen    9   12  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 511 797 bat 21.38 chg -511 
     2  181 v2 REV  0 spd -237 -237    0 sen   12   13  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 511 796 bat 33.65 chg -511 
     0    1 v2 ROLL 0 spd -237 -237    0 sen   12   13  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 512 798 bat 33.65 chg -511 
     0  168 v2 ROLL 0 spd    0    0    0 sen    9   10  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 512 797 bat 23.87 chg -511 
     1  181 v2 ROLL 0 spd -213  213    0 sen   12   21  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 513 797 bat 22.79 chg -511 
     2  181 v2 ROLL 0 spd -248  248    0 sen   13   18  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 513 798 bat 25.33 chg -511 
     0   46 v2 FORW 0 spd -250  250    0 sen   13   18  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 513 797 bat 25.33 chg -511 
     0   47 v2 REV  0 spd -125  125    0 sen   16   23  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 513 798 bat 25.33 chg -511 
     0  160 v2 REV  0 spd    0    0    0 sen   11   16  509 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 513 799 bat 23.54 chg -511 
     1  181 v2 REV  0 spd -183 -183    0 sen   13   19  508 bum    0    0 son   0   0   0 pit   0 rol   0 com   0 per 515 799 bat 23.50 chg -511
 
Zuletzt bearbeitet von einem Moderator:
Oben