Die Aktuelle Software ist ab jetzt,
immer Links im Menü oben zu finden.
immer Links im Menü oben zu finden.
Ich antworte mal allgemeiner (so dass man es auch für andere Dinge einsetzen kann).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 ???
// 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
}
}
double messungMittel = 0.0;
void loop(){
int neueMessung = analogRead(0);
// Berechnung gleitenden Durchschnitt
messungMittel = 0.5 * messungMittel + 0.5 * ((double)neueMessung);
// messungMittel auswerten...
}
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.
}
// ------ 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.)
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
naneona schrieb:ALLE Datein in einen Ordner.
Software ist drauf, Motoren laufen genau anders rum? (Beim Test)
Komisch bei der ersten Software war die Drehrichtung richtig.
nero76 schrieb:naneona schrieb:ALLE Datein in einen Ordner.
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.
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
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)?
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
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
Ladestromsensor (pinChargeCurrent) auf Masse legen
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
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
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
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
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