Прерывания serial
- Войдите на сайт для отправки комментариев
вобщем дело было так
купил gps 6mv2
использовал прошивку tunny gps и ее библиотеки
подключил дешманскую нано 328 на пины 4.3
запустил окно сриал данные идут все хорошо .. шайтан каробка работатет
далее подпаял 2 провода сдвигового регистра 74нс164
простой как 2 копейки с одной стороны подключил управление анодами с другой управление катодами
далее ардуину и плюс сдвигового запитал от dc преобразователя корм 12 вольт а преобразователь выдает 4.8 вольта
забил статичное число включил систему работает все выводит как в апптере(реализовал динамическую индикацию с прерываниями)
int data = 11;
int clock = 12; void setup() { pinMode(data,OUTPUT); pinMode(clock,OUTPUT); } byte z[]={ B00100001,//0 B10100001,//1 B00110001,//2 B10010001,//3 B00000001,//4 B01000001,//5 B11000001,//6 B10000001,//7 B00010001,//8 B10110001//9 }; byte zz[]={ B00100010,//0 B10100010,//1 B00110010,//2 B10010010,//3 B00000010,//4 B01000010,//5 B11000010,//6 B10000010,//7 B00010010,//8 B10110010//9 }; byte zzz[]={ B00100100,//0 B10100100,//1 B00110100,//2 B10010100,//3 B00000100,//4 B01000100,//5 B11000100,//6 B10000100,//7 B00010100,//8 B10110100//9 }; byte zzzz[]={ B00101000,//0 B10101000,//1 B00111000,//2 B10011000,//3 B00001000,//4 B01001000,//5 B11001000,//6 B10001000,//7 B00011000,//8 B10111000//9 }; void loop() { int r; r=6789; { int y=(r/1)%10; int yy=(r/10)%10; int yyy=(r/100)%10; int yyyy=(r/1000)%10; shiftOut(data, clock, MSBFIRST, z[y]); delay(4); shiftOut(data, clock, MSBFIRST, zz[yy]); delay(4); shiftOut(data, clock, MSBFIRST, zzz[yyy]); delay(4); shiftOut(data, clock, MSBFIRST, zzzz[yyyy]); delay(4); } }
написал так чтобы чтобы можно было по очереди выводить цифры четырех значного числа.
далее повставлял вышеописаное в пример кода тинни гпс
в результате горит первая цифра. мельком пролетают остальные далее опят секунды 2 горит пролетают осальные .
так я познал боль delay delaya это плохо .
поискав немного наткнулся на статью про конечный автомат.
реализовал его.. результат ужасный все мерцает так скорей всего загорается не вовремя и не вовремя стухает .
ладно думаю сложу чтоб попробовать посмотреть как оно хоть будет с гпс.
в результате либо гпс не работает либо автомать барахлит . либо случай 1
далее нашел псевдо паралельные потоки
http://soltau.ru/index.php/arduino/item/373-kak-vypolnyat-parallelnye-za...
#include <Thread.h> // подключение библиотеки ArduinoThread const int soundPin = 3; // переменная с номером пина пьезоэлемента const int ledPin = 13; // переменная с номером пина светодиода Thread ledThread = Thread(); // создаём поток управления светодиодом Thread soundThread = Thread(); // создаём поток управления сиреной void setup() { pinMode(soundPin, OUTPUT); // объявляем пин 3 как выход. pinMode(ledPin, OUTPUT); // объявляем пин 13 как выход. ledThread.onRun(ledBlink); // назначаем потоку задачу ledThread.setInterval(1000); // задаём интервал срабатывания, мсек soundThread.onRun(sound); // назначаем потоку задачу soundThread.setInterval(20); // задаём интервал срабатывания, мсек } void loop() { // Проверим, пришло ли время переключиться светодиоду: if (ledThread.shouldRun()) ledThread.run(); // запускаем поток // Проверим, пришло ли время сменить тональность сирены: if (soundThread.shouldRun()) soundThread.run(); // запускаем поток } // Поток светодиода: void ledBlink() { static bool ledStatus = false; // состояние светодиода Вкл/Выкл ledStatus = !ledStatus; // инвертируем состояние digitalWrite(ledPin, ledStatus); // включаем/выключаем светодиод } // Поток сирены: void sound() { static int ton = 100; // тональность звука, Гц tone(soundPin, ton); // включаем сирену на "ton" Гц if (ton <= 500) { // до частоты 500 Гц ton += 100; // увеличиваем тональность сирены } else { // по достижении 500 Гц ton = 100; // сбрасываем тональность до 100 Гц } }
реализовал индикацию по образу и подобию отдельно от гпс работатет стабильно как с delay ()
c gps так же как во втором случает ..
еще прикол в том что если работает просто гпс но обьявлены пины от регистра при получении данных по регисту текут биты на индикации проявляется какая то фигня