ich habe den Code nochmal überarbeitet, ich konnte ihn noch ein wenig optimieren. Leider noch immer ca. 100 Byte zu viel für den ATtiny85. Ich bin leider nicht so der Profi, sieht jemand eine Möglichkeit den Code noch weiter zu optimieren, bei den wenigen Zeilen wahrscheinlich nicht so einfach.
Code:
/*
Name: Sketch1.ino (speziell für IR Reflexlichtschranke, TCRT 5000)
Created: 06.12.2017 14:10:36
*/
#include <SoftSerial.h>
SoftSerial mySerial(4, 0); // RX, TX
const int LED_out = 1; // onboard LED auf Model A
//const int DIST_in = 2; // Sharp Distance Sensor
const int IR_in = 2; // IR Modul, Empfänger
const int IR_out = 3; // IR Modul, Sender
long lasttime;
//String err = "";
String out_l = "";
String out_r = "1";
//String outString = "1";
String inString = "";
void setup() {
mySerial.begin(9600);
//pinMode(DIST_in, INPUT); // Sharp Distance Sensor
pinMode(LED_out, OUTPUT); // LED Fehlermeldung
pinMode(IR_out, OUTPUT); // IR Modul, Sender
pinMode(IR_in, INPUT); // IR Modul, Empfänger
}
void loop() {
if (millis() - lasttime > 500) {
digitalWrite(IR_out, HIGH); // IR Modul, Sender ein
digitalWrite(LED_out, LOW); // LED Fehlermeldung aus
while (mySerial.available() > 0) { // sind Daten vorhanden, dann
inString += (char)mySerial.read(); // Daten von anderen Modul einlesen
}
if (inString != "") { // wurden Daten eingelesen, dann
out_r = inString.substring(inString.indexOf("!") + 1, inString.indexOf("\n") - 1).toInt() + 1; // eigene Modul-Nummer berechnen
}
if (analogRead(1) < 300 || analogRead(1) > 900) { // IR Modul, Empfänger abfragen, dann
digitalWrite(LED_out, HIGH); // LED Fehlermeldung ein
out_l = out_r; // eigene Modul-Nummer für Fehlermeldung merken
}
else { // keine Fehlermeldung
out_l = "";
}
if (inString.indexOf("!") > 0 && out_l == "") { // Fehlermeldung von anderen Modul und keine Fehlermeldung vom eigenen Modul, dann
out_l = inString.substring(0, inString.indexOf("!")); // Fehlermeldung von anderen Modul weiterleiten
}
else if (inString.indexOf("!") > 0 && out_l != "") { // Fehlermeldung von anderen Modul und Fehlermeldung vom eigenen Modul, dann
out_l = inString.substring(0, inString.indexOf("!")) + "," + out_r; // Fehlermeldung von anderen Modul und Fehlermeldung vom eigenen Modul weiterleiten
}
mySerial.println(out_l + "!" + out_r); // Daten zum nächsten Modul schicken, Fehlermeldung(en) + "!" + eigene Modul-Nummer
inString = ""; // Eingangsdaten löschen
digitalWrite(IR_out, LOW); // IR Modul, Sender aus
lasttime = millis();
}
}
Lesezeichen