![]() |
|
![]() |
#1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
1 - у Вас срабатывание прерывания будет только по положительному полупериоду
2 - не понятно что вы пытаетесь здесь получить? PHP код:
|
![]() |
![]() |
![]() |
#2 |
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
![]()
1. Я понимаю, что срабатывание будет только по положительному пп, это я потом исправлю, в этом нет сложности;
2. Читаю с сериал число посимвольно, т.к. заранее неизвестно количество символов, которое пойдет на ком порт. Если символ пробел, то вывожу в сериал всю строку символов (чтобы следить, как идет запись), говорю, что этот набор символов есть длина прерывания в полупериоде (перевожу из стринг в интеджер), обнуляю строку. Если не пробел, то продолжаю ловить символы в эту переменную. Своего рода программный буфер. С типами переменных все хорошо |
![]() |
![]() |
![]() |
#3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Похоже я отстал, не знал что в Arduino есть тим string
Ошибок не вижу, если только время полупериода нужно уменьшить Так как прерывание не будет срабатывать точно в нулевой точке Но это актуально только при минимальном свечении По поводу срабатывания только по положительным полупериодам, я был не прав, так как на схеме есть диодный мост |
![]() |
![]() |
![]() |
#4 |
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
![]() ![]() Код:
while (Serial.available() > 0) { char c = Serial.read();//Читаем символ, загоняем его в переменную "с" if (c == ' ')// Если "с" пробел (символ, который я использую для окончания приёма данных), т.е. передача закончена, то { Serial.println(Bi); //выводим строку "Bi", состоящую из символов "с", т.е. строку символов "с1""с2""с3"... dimming = Bi.toInt();//Получим заданный уровень яркости переведя строку "Bi" в интеджер; Bi = ""; //Саму строку обнуляем до следующего ввода } else { Bi += c; //Если не пробел, то добавляем в строку "Bi" ещё один символ. Это х=х+у, но со строковым типом это будет просто добавление ещё одного символа в конец строки. } } } |
![]() |
![]() |
![]() |
#5 |
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
![]()
Переправил чуть код. Постарался избавиться от delay... но совсем не работает: лампочка горит постоянно. Подскажите, пожалуйста, в чем ошибка?
Код:
String Bi = ""; const int AC_LOAD = 3; long dimming = 255; unsigned long previousMicros = 0; void setup() { Serial.begin(9600); pinMode(AC_LOAD, OUTPUT);// Устанавливаем AC Load пин как вывод attachInterrupt(2, ZC, RISING); } void ZC() { unsigned long currentMicros = micros(); previousMicros = currentMicros; int dimtime = (39*(255-dimming)); // Полное время while(currentMicros - previousMicros < dimtime) {} previousMicros = currentMicros; digitalWrite(AC_LOAD, HIGH);// Триак посылает сигнал зажечься while(currentMicros - previousMicros < 10)// Триак ждет, для 50 Гц - 10мкс {}// Триак посылает сигнал потухнуть digitalWrite(AC_LOAD, LOW); } void loop() { while (Serial.available() > 0) { char c = Serial.read(); if (c == ' ') { Serial.println(Bi); dimming = Bi.toInt(); Bi = ""; } else { Bi += c; } } } |
![]() |
![]() |
![]() |
#6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Попробуйте поменять CHANG на HIGH
|
![]() |
![]() |
![]() |
#7 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() PHP код:
|
![]() |
![]() |
![]() |
#8 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Может стоит подумать над предложением Bulatovor ?
|
![]() |
![]() |
![]() |
#9 |
Junior Member
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0 ![]() |
![]() |
![]() |
![]() |
![]() |
#10 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Можно без библиотеки обойтись, стандартными функциями
Пробовали код выше? |
![]() |
![]() |
![]() |
Здесь присутствуют: 18 (пользователей: 0 , гостей: 18) | |
|
|