![]() |
|
|
|
|
#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 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Можно без библиотеки обойтись, стандартными функциями
Пробовали код выше? |
|
|
|
![]() |
| Здесь присутствуют: 19 (пользователей: 0 , гостей: 19) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|