Advertisement
Guest User

RF Capture sketch

a guest
Dec 16th, 2014
1,789
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. #define MINIMUMDURATION 50 //minimum low or high signal duration for a valid signal in microseconds
  2. #define MAXIMUMDURATION 20000 //maximum low or high signal duration for a valid signal
  3. #define MINIMUMSILENCE 30000 //minimum low period after a complete signal in microseconds
  4. #define MAXEDGES 800 //maximum samples, limited by RAM
  5.  
  6. int timings[MAXEDGES];
  7. int edges = 0;
  8. long signalstart = 0;
  9. long signalend;
  10. long interval;
  11. boolean validSignal = true;
  12. boolean captureFinished = false;
  13.  
  14. void setup() {
  15.   Serial.begin(9600);
  16.   pinMode(2, INPUT);
  17.   pinMode(6, OUTPUT);
  18.   digitalWrite(6, LOW);
  19.   while (digitalRead(2) == LOW) {}
  20. }
  21.  
  22.  
  23. void loop() {
  24.   if (!captureFinished) {
  25.     if (signalstart == 0) {
  26.       signalstart = micros();
  27.     }
  28.     while (bitRead(PIND, 2) == HIGH) {}
  29.     signalend = micros();
  30.     interval = signalend - signalstart;
  31.     //Serial.println(interval);
  32.     if (interval > MINIMUMDURATION && interval < MAXIMUMDURATION ) {
  33.       timings[edges] = interval;
  34.       edges++;
  35.     }
  36.     else {
  37.       edges = 0;
  38.       validSignal = false;
  39.       captureFinished = true;
  40.     }
  41.     if (validSignal) {
  42.       while (bitRead(PIND, 2) == LOW && (micros() - signalend) < MINIMUMSILENCE ) {}
  43.       signalstart = micros();
  44.       interval = signalstart - signalend;
  45.       if (interval > MINIMUMDURATION && interval < MAXIMUMDURATION ) {
  46.         timings[edges] = interval;
  47.         edges++;
  48.       }
  49.       else if (interval >= MINIMUMSILENCE) {
  50.         captureFinished = true;
  51.       }
  52.       else {
  53.         validSignal = false;
  54.         captureFinished = true;
  55.       }
  56.     }
  57.     if (edges >= MAXEDGES - 2) {
  58.       captureFinished = true;
  59.     }
  60.  
  61.   }
  62.  
  63.  
  64.   else {
  65.     if (validSignal && edges > 10) {
  66.       captureFinished = false;
  67.       Serial.print("Signal captured with ");
  68.       Serial.print(edges+1);
  69.       Serial.println(" edges");
  70.       Serial.println("-");
  71.       for (int i = 0; i <= edges; i++) {
  72.         Serial.print(timings[i]);
  73.         Serial.print(" ");
  74.       }
  75.       Serial.println(" ");
  76.       Serial.println("-");
  77.       Serial.print("int intervals[] = {");
  78.       for (int i = 0; i < edges; i++) {
  79.         Serial.print(timings[i]);
  80.         Serial.print(", ");
  81.       }
  82.       Serial.print(timings[edges]);
  83.       Serial.println("};");
  84.  
  85.      
  86.       Serial.println("Sending signal");
  87.       delay(3000);
  88.       boolean high = false;
  89.       for (int i = 0; i <= edges; i++) {
  90.         if (high) {
  91.           digitalWrite(6, LOW);
  92.           high = false;
  93.         }
  94.         else {
  95.           digitalWrite(6, HIGH);
  96.           high = true;
  97.         }
  98.         delayMicroseconds(timings[i]);
  99.       }
  100.       digitalWrite(6, LOW);
  101.       Serial.println("...sent");
  102.     }
  103.     else {
  104.       captureFinished = false;
  105.       validSignal = true;
  106.     }
  107.     edges = 0;
  108.     signalstart = 0;
  109.   }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement