помогите дописать скетч
- Войдите на сайт для отправки комментариев
Пт, 25/03/2016 - 09:50
Приветствую всех. я в ардуино новичек. помогите советом. как заставить выполняться программу пока есть сигнал на шим входе. например - пока есть сигнал, загорается светодиод, как сигнал пропадает, светодиод гаснет. и как зациклить работу в данном примере
#define FIRST_LED 4
#define TOTAL_LEDS 10
int ledPin = FIRST_LED;
void setup()
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(100);
ledPin = (ledPin - FIRST_LED +1) % TOTAL_LEDS + FIRST_LED;
digitalWrite(ledPin, LOW);// поочередно включаем светодиоды, а когда шкала заполнилась вся - гасим:
}
Про ШИМ ведь где-то прочитали? Либо читайте еще раз, пока не разберетесь. Либо предъявите всем источник в котором говорится о сигнале ШИМ на входе. Пока не понятно, что именно Вы хотите сделать.
И с этим материалом ознакомьтесть http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
не совсем понятно что нужно, но может поможет если вбить в гугл "arduino бегущий огонек" там и ютуб и так много ссылок, а на основе примеров уже свой дописать...
чтобы не создавать лишних тем, нужен совет по счетчику импульсов.
выдернул часть из найденых скетчей, считает нормально, не могу понять cnt++ когда значение меняет? по переднему фронту импульса или когда он закончен?
static long cnt1 = 0; static int in1_last = HIGH; static long time_last = 0; int in1 = digitalRead(IN1); long ct = micros(); if (in1 == HIGH && in1_last ==LOW) { cnt1++; time_last = ct;После выполнения условия in1 == HIGH && in1_last ==LOW
а на человеческом языке?
просто in1 вижу считывает состояние IN1, а in_last когда Low? (т.е. я понимаю перевод слова last, но думаю ничего неизменится если написать next)
А на человеческом языке надо код нормально приводить, а не абы как выдранный кусок.
в данном куске кода in_last у вас не меняется тк прописан константой
staticintin1_last = HIGH;там вроде больше ничего относящегося к изменению cnt нету
#define IN1 2 #define IN2 5 void setup() { pinMode(IN1, INPUT_PULLUP); pinMode(IN2, INPUT_PULLUP); Serial.begin(9600); Serial.println("Hello!"); } void loop() { static long cnt1 = 0; static long cnt2 = 0; static int in1_last = HIGH; static int in2_last = HIGH; static long time_last = 0; int in1 = digitalRead(IN1); int in2 = digitalRead(IN2); long ct = micros(); if (in1 == HIGH && in1_last ==LOW) { cnt1++; time_last = ct; } if (in2 == HIGH && in2_last ==LOW) { cnt2++; time_last = ct; } if (ct - time_last > 500000 && (cnt1 || cnt2)) { Serial.println(" --- "); Serial.println(cnt1); Serial.println(cnt2); cnt1 = 0; cnt2 = 0; } in1_last = in1; in2_last = in2; }все, понял, в конце заметил, т.е. передний фронт импульса
а цель то какая? поочередно лампочками мигать?
не, по подсчету импульсов выполнять действия уже в другом скетче,
надо было понять в какой момент cnt1 станет например 100, и понять во втором канале в данный момент еще идет импульс или нет (два канала со сдвигом 90 градусов)
спасибо за быстрые ответы
все, понял, в конце заметил, т.е. передний фронт импульса
Это зависит от того, что вы импульсом считать будете :)
не совсем понятно что нужно, но может поможет если вбить в гугл "arduino бегущий огонек" там и ютуб и так много ссылок, а на основе примеров уже свой дописать...
чтобы не создавать лишних тем, нужен совет по счетчику импульсов.
выдернул часть из найденых скетчей, считает нормально, не могу понять cnt++ когда значение меняет? по переднему фронту импульса или когда он закончен?
static long cnt1 = 0; static int in1_last = HIGH; static long time_last = 0; int in1 = digitalRead(IN1); long ct = micros(); if (in1 == HIGH && in1_last ==LOW) { cnt1++; time_last = ct;Вот же условие: (in1 == HIGH && in1_last ==LOW) : когда сигнал HIGH, а до этого был LOW - передний фронт.
это случайно не светодиодный тахометр будет?) я задался целью сделать такой на мотоцикл)
с тахомтером все проще намного
нет. это бегущие поворотники. но чтобы не тянуть провода до подрулевых переключателей, в качестве сигнала использовать прерывание напряжения на лампе.