Прерывания 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 так же как во втором случает ..
еще прикол в том что если работает просто гпс но обьявлены пины от регистра при получении данных по регисту текут биты на индикации проявляется какая то фигня