Grüße,
ich muss mal ein par Basics zum SoftwareSerial abfragen, bzw. ob das was ich hier aufgebaut habe fehlerhaft ist.
Also,
Ich betreibe einen 328P mit 8MHZ Internal an 3,3V
Ich Möchte SoftwareSerial benutzen.
Soft TX ist pin 5
Soft RX ist pin 6
Ich benutze Gleichzeitig einen Drehencoder an Pin 3 und Pin 4
Der Drehencoder nutzt den INT1
das Problem ist das der Software entweder das senden nach kurzer zeit abbricht oder Unsinn sendet.
//Serial.print Output
21:05:28.833 -> 0TT11
21:05:28.930 -> 0TT11
21:05:29.032 -> 0TT11
21:05:29.134 -> 0TT11
21:05:29.239 -> 0TT11
21:05:29.340 -> 0TT11
21:05:29.441 -> 0TT11
//mySerial.print Output
21:05:32.111 -> �����������W����������������/�VWW���TT11
21:05:33.029 -> 0TT11�0TT1w�0t}���|���������������������}�����L����+�=��
21:05:34.215 -> ���R��T11
21:05:34.423 -> f���s�W��������������������]}���=������������������^��;����������>�?����~�����������������������������������������������=
Der Code ist für beide Prints der gleiche
void loop() {
mySerial.print(PoM);
mySerial.print("T");
mySerial.print('T');
char Buffer [2]{0,0};
sprintf(Buffer, "%02d",11);
mySerial.print(Buffer);
mySerial.print('\n');
Serial.print(PoM);
Serial.print("T");
Serial.print('T');
Serial.print(Buffer);
Serial.print('\n');
}
Hier nochmal der Ganze Code (Bzw. das was davon noch abgefahren wird. Ich habe den gesamten Loop auskommentiert um mögliche Fehlerquellen zu reduzieren)
#include <Adafruit_MCP23X17.h>
#include <SoftwareSerial.h>
#define TX 5//Blau
#define RX 6//gelb
#define WakePin 7
#define LED_ID 9
#define LED_MOIST 10
#define LED_HUM 11
#define LED_MIN 12
#define LED_MAX 13
#define Button A0
#define DT 3
#define CLK 4//4
/////TESTLIB
int DT_StateCrnt=LOW;
int DT_StateLst =LOW;
int BS=LOW;
/////TESTLIB
const byte numChars = 4;
char receivedChars[numChars];
bool newData=false;
int numBytes =0;
int32_t wait=0;
uint8_t ledState = LOW;
unsigned long previousMillis = 0;
bool connect = false;
int16_t inputDelta = 0;
int last =0;
int EPnow =LOW;
SoftwareSerial mySerial(RX,TX);
Adafruit_MCP23X17 mcp;
byte MCPADR = 0x20;
int8_t PoM = 0;
int8_t PoMt = 0;
byte value = 0;
byte IDB = 0;
byte IDC = 0;
byte Moist = 0;
byte MoistMin = 0;
byte MoistMax = 0;
byte Hum = 0;
byte HumMin = 0;
byte HumMax = 0;
void setup() {
//Setup 328P-PU Pins
pinMode(WakePin , OUTPUT );
pinMode(LED_ID , OUTPUT );
pinMode(LED_MOIST , OUTPUT );
pinMode(LED_HUM , OUTPUT );
pinMode(LED_MIN , OUTPUT );
pinMode(LED_MAX , OUTPUT );
pinMode(RX , INPUT );
pinMode(TX , OUTPUT );
pinMode(Button , INPUT );
pinMode(DT , INPUT );
pinMode(CLK , INPUT );
attachInterrupt(1,readEncoder, CHANGE);
//start Hard and Software Serial
mySerial.begin(9600);
Serial.begin(9600);
Serial.println("PROGRAMMER TEST");//debugline Programm begin
//Test MCP23017 connection
if (!mcp.begin_I2C()) {
Serial.println("Error.");//debugline
while (1);{
Serial.print("Stuck");//debugline
} //while
} //if
//Setup MCP23017 Pins as Output
for (int i = 0; i < 16; i++) {mcp.pinMode(i, OUTPUT);}
//WakeUp TargetSensor
digitalWrite(WakePin, LOW);
delay(100);
digitalWrite(WakePin, HIGH);
mySerial.println("Myseril.Test");
//inputDelta = 1; //Test nessesarry
}//Setup
void loop() {
mySerial.print(PoM);
mySerial.print("T");
mySerial.print('T');
char Buffer [2]{0,0};
sprintf(Buffer, "%02d",11);
mySerial.print(Buffer);
mySerial.print('\n');
Serial.print(PoM);
Serial.print("T");
Serial.print('T');
Serial.print(Buffer);
Serial.print('\n');
}//Loop