Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MINIMUMDURATION 50 //minimum low or high signal duration for a valid signal in microseconds
- #define MAXIMUMDURATION 20000 //maximum low or high signal duration for a valid signal
- #define MINIMUMSILENCE 30000 //minimum low period after a complete signal in microseconds
- #define MAXEDGES 800 //maximum samples, limited by RAM
- int timings[MAXEDGES];
- int edges = 0;
- long signalstart = 0;
- long signalend;
- long interval;
- boolean validSignal = true;
- boolean captureFinished = false;
- void setup() {
- Serial.begin(9600);
- pinMode(2, INPUT);
- pinMode(6, OUTPUT);
- digitalWrite(6, LOW);
- while (digitalRead(2) == LOW) {}
- }
- void loop() {
- if (!captureFinished) {
- if (signalstart == 0) {
- signalstart = micros();
- }
- while (bitRead(PIND, 2) == HIGH) {}
- signalend = micros();
- interval = signalend - signalstart;
- //Serial.println(interval);
- if (interval > MINIMUMDURATION && interval < MAXIMUMDURATION ) {
- timings[edges] = interval;
- edges++;
- }
- else {
- edges = 0;
- validSignal = false;
- captureFinished = true;
- }
- if (validSignal) {
- while (bitRead(PIND, 2) == LOW && (micros() - signalend) < MINIMUMSILENCE ) {}
- signalstart = micros();
- interval = signalstart - signalend;
- if (interval > MINIMUMDURATION && interval < MAXIMUMDURATION ) {
- timings[edges] = interval;
- edges++;
- }
- else if (interval >= MINIMUMSILENCE) {
- captureFinished = true;
- }
- else {
- validSignal = false;
- captureFinished = true;
- }
- }
- if (edges >= MAXEDGES - 2) {
- captureFinished = true;
- }
- }
- else {
- if (validSignal && edges > 10) {
- captureFinished = false;
- Serial.print("Signal captured with ");
- Serial.print(edges+1);
- Serial.println(" edges");
- Serial.println("-");
- for (int i = 0; i <= edges; i++) {
- Serial.print(timings[i]);
- Serial.print(" ");
- }
- Serial.println(" ");
- Serial.println("-");
- Serial.print("int intervals[] = {");
- for (int i = 0; i < edges; i++) {
- Serial.print(timings[i]);
- Serial.print(", ");
- }
- Serial.print(timings[edges]);
- Serial.println("};");
- Serial.println("Sending signal");
- delay(3000);
- boolean high = false;
- for (int i = 0; i <= edges; i++) {
- if (high) {
- digitalWrite(6, LOW);
- high = false;
- }
- else {
- digitalWrite(6, HIGH);
- high = true;
- }
- delayMicroseconds(timings[i]);
- }
- digitalWrite(6, LOW);
- Serial.println("...sent");
- }
- else {
- captureFinished = false;
- validSignal = true;
- }
- edges = 0;
- signalstart = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement