МиГ, выведите cas в serial и посмотрите что там за значение
|
офлайн
Protez1999
Senior Member
Автор темы
|
|
|
9978 |
18 лет на сайте Город:
|
может код надо было точно переписать как я кидал? для чего 0 минус час ? Чтоб приравнивать что то к изображению на экране надо и вводить тоже значение. Надо посмотреть в порте не 0 - час а просто час. К этому и приравнивается формула больше или меньше.
Protez1999:может код надо было точно переписать как я кидал? для чего 0 минус час ? Чтоб приравнивать что то к изображению на экране надо и вводить тоже значение. Надо посмотреть в порте не 0 - час а просто час. К этому и приравнивается формула больше или меньше.
Хорошо, если не вводить 0-cas, как я тогда смогу обозначить ардуине необходимый мне интервал времени по величине cas. Отсчет мне нужен в обратную сторону и если таймер нужен на 2 часа, тогда прописывать надо 1-cas, 60-min, 60-sec.
А как в данном случае можно еще поступить??? Или я что-то туплю
Но вообще проблемку я разрешил сам, ввел еще одну переменную
int timer = 0-cas;
ну а дальше, все как обычно
if(timer<0)
digitalWrite(13, LOW);
else
digitalWrite(13, HIGH);
таким макаром заработало ![]()
Protez1999:может код надо было точно переписать как я кидал? для чего 0 минус час ? Чтоб приравнивать что то к изображению на экране надо и вводить тоже значение. Надо посмотреть в порте не 0 - час а просто час. К этому и приравнивается формула больше или меньше.
Если вы имеете виду эту часть кода
if(cas<0)
digitalWrite(13, LOW);
else if (cas>0)
digitalWrite(13, HIGH);
можно так
То я его тоже вводил, результат был тот же, т.е. таймер не оключался
|
офлайн
Protez1999
Senior Member
Автор темы
|
|
|
9978 |
18 лет на сайте Город:
|
|
офлайн
Protez1999
Senior Member
Автор темы
|
|
|
9978 |
18 лет на сайте Город:
|
Кто подскажет как сделать не используя аналоговый выход Нужно что диод имел 2 яркости. Пробовал подключать через 2 разных резистора и 2 порта ардуино не прокатывает. Горит тока 1 режим
проблема решена через analogWrite
digitalWrite(pin, 150); и digitalWrite(pin, 20);
по крайней мере я для каналов RGB ленты так делал
unsigned long time;
#include <LCD5110_Basic.h>
LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t SmallFont[];
void setup(){
myGLCD.InitLCD(); // инициализация дисплея
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
myGLCD.setFont(SmallFont);
time = millis();
int sek = time/1000;
int minyt = (time/1000)/60;
int cas = (minyt/60);
int minyt2 = minyt;
if(cas>0) minyt2 =(minyt-60*cas);
if((time/1000)>60) sek =(sek-60*minyt);
if(cas<0)digitalWrite(13, LOW);
else
digitalWrite(13, HIGH);
//выводит количество миллисекунд с момента начала выполнения программы
myGLCD.print("Vremya ostalos", 0, 0);
myGLCD.printNumI(int(0-cas), 9, 30);
myGLCD.print("CHAS:", LEFT, 20);
myGLCD.printNumI(int(60-minyt2), 39 , 30);
myGLCD.print("MIN:", 33, 20);
myGLCD.printNumI(int(60-sek), 66, 30);
myGLCD.print("SEC:", RIGHT, 20);
// ждет секунду, перед следующей итерацией цикла.
delay(1000);
myGLCD.clrScr();
}
Protez1999 или Drosha,Возвращаюсь все-таки к теме отрицательных значений таймера. Как можно запретить отрицательные значения используя часы в обратную сторону???
По логике как-то должно быть
if (sek<0)
sek=0;
вчера попробовал не получилось, ардуина упрямо лезет в минус. Просто вчера решил усложнить себе задачу и сделать программу более гибкой, т.е. чтобы была возможность вводить не целы часом, а скажем 2 часа и 30 минут???
МиГ, попробуйте использовать {}
if (sek < 0) {
sek = 0;
}myGLCD.printNumI(int(0-cas), 9, 30); // Всегда будет отрицательное значение
А вообще в главном цикле какая-то ересь написана...
int cas = (minyt/60); // Всегда больше 0
следовательно
if(cas<0)
вообще не имеет смысла!
Далее...
if(cas>0) minyt2 =(minyt-60*cas);
Условие не имеет смысла, потому что см. выше.
а minut2 всегда будет = minut
VitFil:myGLCD.printNumI(int(0-cas), 9, 30); // Всегда будет отрицательное значение
Не отрицательное значение, т.к. есть еще minyte и sek, и только когда они (эти значения) дойдут до ноля, тогда cas будет равно -1.
Уже проверено, так и работает. По поводу cas<0 согласен, это был первый вариант скетча - это уже исправлено и я ввел еще другую переменную 0-cas (или любое др. число, в зависимости на какой период нужен таймер. if cas<0 уже убрано. По поводу minyt2=minyt, сам не пойму зачем эта переменная, но именно потому что не понял, трогать не стал. Пока пробую запретить ардуине отрицательные значения sek. Пока не получилось...
Возможно. То в этом случае, вы выложили не те исходники. Кстати!
// ждет секунду, перед следующей итерацией цикла.
delay(1000);
Как время выполнения операторов цикла учитывается? В теории, на экране могут быть "перескоки" через секунду.
|
офлайн
Protez1999
Senior Member
Автор темы
|
|
|
9978 |
18 лет на сайте Город:
|
delay особо ни на что не влияет. просто выводит информацию раз в сек на экран
|
офлайн
Protez1999
Senior Member
Автор темы
|
|
|
9978 |
18 лет на сайте Город:
|
Товарищи, помогите оживить плату multiwii. Слетел загрузчик.
При попытке залить бутлоудер через ARDUINO пишет ошибки:
что-то тут затихло
Из сегодняшнего


BORTACH:Товарищи, помогите оживить плату multiwii. Слетел загрузчик.
При попытке залить бутлоудер через ARDUINO пишет ошибки:avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
и в первом и во втором случае просто нет синхронизированного корректного адекватного ответа
если слетел классический ардуино загрузчик поступаем классически
шьем через классические 4 провода MISO MOSI и т.д. каждый процессор на индивидуальных штырьках
подробности надо вспоминать
на классической плате классически 2 микроконтроллера
Atmega16U2
Atmega328

а какой плате идет разговор?
О такой облегченной вертолетной?

Привет!
Заранее извините, если пишу не по месту.
Может кто делал, или кто просто поможет идеями.
Подопытный: гольф 2 85-года 1,6тд мотор.
Задача: Цифровая приборная панель.
Планы:
1. Датчик температуры - заказал на али (цифровой, жк). всунуть внутрь родного корпуса его датчик.
2. Индикаторные светодиоды (акб, масло, свечи, повороты...) будут работать по заводскому принципу, только в новом стиле.
===== дальше то, что требует вашего внимания =====
3. Спидометр - стрелка.
Думал сделать на ардуине + сервомашинке мелкой. Импульсы от штатного (ну почти, переведен на цифру) датчика скорости, такого, как в гольф3.
4. Одометр - LCD 8*2 от той же ардуины
5. Тахометр - стрелка.
Тут так же, как и со спидометром. Импульсы буду брать с генератора.
Как правильно все организовать. Может кто кодом поможет?