Code
Kollegen versuchen, die Abschnittskontrolle zu installieren. Durch den Kauf von Arduino Pro Micro habe ich das Hauptventil3MarcLOW-Programm hochgeladen, aber Cerea sieht Arduino überhaupt nicht. Habe ich etwas falsch gemacht? Wo mache ich etwas falsch?
my arduino:
// Arduino Cerea Teilbreitenschaltung
// (C) 2016 by Andreas Ortner - office@gh-ortner.com
// Weitergabe an Dritte nur unter Erlaubniss von Andreas Ortner
// Version 2 mit Spritze overdrive
String cmd;
char nextChar;
String teilbreite;
int anztb ;
int i;
int sensorVal;
int lsensorVal;
int tbz[9] = {0,0,0,0,0,0,0,0,0};
int tbs = 0;
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT); //Teilbreite 1 Pin 2
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT); // Teilbreite 7 Pin 8
pinMode(9, OUTPUT); // Pin 9 Hydraulik Befehl oder Hauptventil
pinMode(10, INPUT_PULLUP); // Marcar ein oder aus
digitalWrite(2, HIGH); // alle Ports of 0 = HIGH Setzten
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
sensorVal = digitalRead(10);
lsensorVal = digitalRead(10);
}
void loop()
{
cmd = ""; // String leeren
ser(); // Commando einleisen
if (cmd.startsWith("@CEREA;")) { // Wenn Cerea entdeckt wird mit ausführung starten
cerea();
}
if (cmd.startsWith("@HIDRAU")) { // Wenn Hidrau entdeckt wird mit ausführung starten
// hidrau(); // evt. hier entferenen um Hyraulik nicht zu nutzten
}
if (sensorVal != digitalRead(10)){
sensorVal = digitalRead(10); // pin 10 Abfragen
if (sensorVal == HIGH && sensorVal != lsensorVal) {
Serial.print ("@MARC"); //wenn Kontakt frei Marc ein
Serial.print ('\r');
Serial.print ('\n');
lsensorVal= sensorVal;
delay(1000);
} else if (sensorVal == LOW && sensorVal != lsensorVal){
Serial.print ("@MARC"); //wenn Kontakt auf GND Marc aus
Serial.print ('\r');
Serial.print ('\n');
lsensorVal= sensorVal;
delay(1000);
}
}
}
void cerea() //String auswerten
{
cmd.remove(0, 7); // @Cerea; entferenen
int first = cmd.indexOf(';'); // erstem ; suchen
int second = cmd.indexOf(';', first + 1 ); // zweiten ; suchen
cmd.remove(0, second + 1); //geschwindigkeit und minus 1 entferene
int ende = cmd.indexOf('END'); //sucht nach "end"
anztb = (ende - 2) / 2; //anzahl teilbreiten ermitteln
teilbreite = cmd.substring(0, ende - 3); //teilbreiten in einen neuen string
int b = 1;
for (i = 0; i < anztb * 2 ; i = i + 2) { //teilbreiten schalten
b = b + 1;
tbz[b] = 0;
if (teilbreite.substring(i, i + 1) == "1" )
{
digitalWrite(b, HIGH); //Teilbreite einschalten
digitalWrite(9, HIGH); //Hauptventil einschalten
tbz[b] = 1;
}
if (teilbreite.substring(i, i + 1) == "0" )
{
tbs = 0;
for (int i=0;i < 9;i++) {
tbs += tbz[i] ; }
sensorVal = digitalRead(10); // pin 10 Abfragen
if (sensorVal == HIGH ){
if (tbs < 1){
tbz[b] = 1; // nur wenn letzte Teilbreite an
digitalWrite(b, LOW); //Teilbreite auch ausschalten auskommentieren wenn nicht gewünscht.
digitalWrite(9, LOW); } //Hauptventil ausschalten
else {
digitalWrite(b, LOW); } //Teilbreite ausschalten
}
else {
digitalWrite(9, HIGH); //Hauptventil einschalten, wenn Mark aus
digitalWrite(b, HIGH); } //Teilbreite einschalten, wenn Mark aus
}
}
for (i = anztb + 1 ; i < 7; i++) { // restlichen teilbreiten aus
digitalWrite(i + 1, HIGH);
}
}
// void hidrau()
// {
// int ende = cmd.indexOf('EN'); //sucht nach "end"
// cmd.remove(0, ende - 3); // rest entfernen
// if (cmd.substring(0, 1) == "1") {
// digitalWrite(9, LOW); //hyro ein --> hier low mit high ersetzten falls hydro nicht gewünscht wird
// }
// if (cmd.substring(0, 1) == "0") {
// digitalWrite(9, HIGH); //hyro aus
// }
// }
void ser() // Serielle Schnittstelle bis Return lesen
{
do {
if (Serial.available() > 0)
{
nextChar = Serial.read();
if (nextChar >= 32) {
cmd += nextChar;
}
}
} while (nextChar != 10); //solange lesen bis zeilenende
}
Alles anzeigen