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