fork download
  1. // У нас на плате pro mini ATmega 168 (5v, 16MHz), хотя это и неважно
  2. #include <SoftwareSerial.h> // Подключаем библиотеку
  3.  
  4. SoftwareSerial mySerial(10, 11); // RX, TX Назначаем пины на прием и передачу
  5.  
  6. byte pers = 0; // Переменная для получения данных порта (мощность в процентах)
  7. int pers1;
  8. int pers2;
  9. unsigned int n; // Счетчик непришедших пакетов
  10. unsigned long timer1;
  11.  
  12. void setup() {
  13. pinMode(12, OUTPUT); // Назначаем пин на выход (плата симистора)
  14. pinMode(13, OUTPUT); // Назначаем пин на выход (светодиод-контролька)
  15. digitalWrite(12, 0); // выход на плату симистора (отключено)
  16. digitalWrite(13, 0); // Светодиод потушен
  17. Serial.begin(9600);
  18. mySerial.begin(4800); // Запускаем работу порта
  19. }
  20.  
  21. void loop()
  22. {
  23. timer1 = millis(); // Начинаем отсчет времени
  24. Serial.println(millis());
  25. if (pers2 <= 500) // Если мощность менее 50%
  26. {
  27. if (pers2 == 0) // Если мощность равна 0
  28. {
  29. digitalWrite(12, 0); // Выключаем все
  30. digitalWrite(13, 0);
  31. receiveData (); // Получаем данные с основного контроллера
  32. while ((millis() - timer1) <= 999) {
  33. ; // Просто ждем, когда секунда пройдет
  34. }
  35. }
  36. else
  37. {
  38. digitalWrite(12, HIGH); // Если мощность менее 50%, но не 0
  39. digitalWrite(13, HIGH); // Включаем все
  40. delay (pers2); // ждем (мощность х 10)мсек
  41. digitalWrite(12, LOW); // Выключаем все
  42. digitalWrite(13, LOW);
  43. }
  44.  
  45. receiveData (); // получаем данные
  46.  
  47. while ((millis() - timer1) <= 999) {
  48. ; // ждем, когда закончится секунда
  49. }
  50. }
  51. else
  52. {
  53. digitalWrite(12, HIGH); // Если мощность более 50%
  54. digitalWrite(13, HIGH); // Включаем все
  55. pers1 = pers2; // Запоминаем переменную
  56. receiveData (); // получаем данные
  57. while ((millis() - timer1) <= (pers1)) {
  58. ; // Ждем пока закончится импульс, пропорциональный мощности
  59. }
  60. digitalWrite(12, LOW); // Выключаем все
  61. digitalWrite(13, LOW);
  62. while ((millis() - timer1) <= 999) {
  63. ; // Ждем пока закончится секунда
  64. }
  65. }
  66. }
  67.  
  68. void receiveData () // Функция получения данных с основной платы.
  69. {
  70. if (mySerial.available())
  71. {
  72. pers = mySerial.read(); // Считываем данные с порта, если там что-то есть
  73. n = 0; // Раз данные пришли, обнулим счетчик
  74. }
  75. else
  76. {
  77. n++; // Считаем, сколько раз не пришли данные
  78. }
  79. if (pers > 100)
  80. {
  81. pers = 0; // Отсечем нереальные значения на всякий случай значение
  82. }
  83.  
  84. if (n > 10) // Если 10 секунд данные не приходят, прекраим подачу импульсов.
  85. {
  86. pers = 0;
  87. }
  88. pers2 = (pers * 10); // Получим длину импульса в милисекундах.
  89. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:83: fatal error: SoftwareSerial.h: No such file or directory
 #include <SoftwareSerial.h>           // Подключаем библиотеку
                                                                                   ^
compilation terminated.
stdout
Standard output is empty