ArtemTechnologies

ATWatch - Arduino совместимая носимая платформа для обучения робототехнике и программированию на языке C++

Сканер WI-FI диапазона

  1. #include <SPI.h>
  2. #include "nRF24L01.h"
  3. #include "RF24.h"
  4. #include "printf.h"
  5. #include <Adafruit_GFX.h>
  6. #include <Adafruit_SSD1306.h>
  7.  
  8. #define BuzzerPin   15
  9. #define OLED_RESET  24
  10. #define OLED_DC     26
  11. #define OLED_CS     31
  12.  
  13. RF24 radio(3, 4);
  14. Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
  15.  
  16. const uint8_t num_channels = 128;
  17. uint8_t values[num_channels];
  18. const int num_reps = 100;
  19.  
  20. void setup(void)
  21. {
  22.   display.begin(SSD1306_SWITCHCAPVCC);
  23.   display.setTextColor(WHITE);
  24.   display.clearDisplay();
  25.   display.display();
  26.   display.setCursor(0, 0);
  27.  
  28.   display.println("Loading...");
  29.   display.display();
  30.   Serial.begin(57600);
  31.   printf_begin();
  32.   printf("\n\rRF24/examples/scanner/\n\r");
  33.  
  34.   radio.begin();
  35.   radio.setAutoAck(false);
  36.  
  37.   radio.startListening();
  38.   radio.stopListening();
  39.  
  40.   int i = 0;
  41.   while ( i < num_channels )
  42.   {
  43.     printf("%x", i >> 4);
  44.     ++i;
  45.   }
  46.   printf("\n\r");
  47.   i = 0;
  48.   while ( i < num_channels )
  49.   {
  50.     printf("%x", i & 0xf);
  51.     ++i;
  52.   }
  53.   printf("\n\r");
  54.   CreateStartScrean();
  55. }
  56.  
  57. void loop(void)
  58. {
  59.   memset(values, 0, sizeof(values));
  60.  
  61.   int rep_counter = num_reps;
  62.   while (rep_counter--)
  63.   {
  64.     int i = num_channels;
  65.     while (i--)
  66.     {
  67.       radio.setChannel(i);
  68.  
  69.       radio.startListening();
  70.       delayMicroseconds(225);
  71.       if ( radio.testCarrier() ) {
  72.         ++values[i];
  73.       }
  74.       radio.stopListening();
  75.     }
  76.     if (rep_counter % 5  == 0) {
  77.       display.write(218);
  78.       tone(BuzzerPin, 500, 150);
  79.       display.display();
  80.     }
  81.   }
  82.  
  83.   int i = 0;
  84.   tone(BuzzerPin, 1000, 200);
  85.   CreateStartScrean();
  86.   while ( i < num_channels )
  87.   {
  88.     display.drawLine(i, 63, i, 63 - values[i], 1);
  89.     printf("%x", min(0xf, values[i] & 0xf));
  90.     ++i;
  91.   }
  92.   printf("\n\r");
  93.   display.display();
  94. }
  95.  
  96. void CreateStartScrean()
  97. {
  98.   display.clearDisplay();
  99.   display.setCursor(0, 0);
  100.   display.println F("Progress: ");
  101.   for (int k = 0 ; k < 20; k ++) {
  102.     display.write(176);
  103.   }
  104.   display.setCursor(0, 8);
  105. }