Помогите с программированием плииз!
- Войдите на сайт для отправки комментариев
Ср, 08/07/2020 - 00:32
Доброго времени суток ! Пытаюсь сделать хронограф как у Гувера , но с дисплеем нокиа 5110.
но с толкнулся с проблемой. вот оригинал схемы и прошивки от гувера:
/*
Created 2016
by AlexGyver
AlexGyver Home Labs Inc.
*/
char masschar[5]; //массив символов для перевода
String massstring; //строка, в которую задаётся масса в режиме выбора массы
int set,setmass,rapidtime;
boolean initial,flagmass, flagmassset, rapidflag; //флажки
int n=1; //номер выстрела, начиная с 1
float velocity, energy; //переменная для хранения скорости
float mass=0.00035; //масса снаряда в килограммах
float dist=0.0845; //расстояние между датчиками в метрах
volatile unsigned long gap1, gap2; //отметки времени прохождения пулей датчиков
unsigned long lastshot;
void setup() {
Serial.begin(9600); //открываем COM порт
attachInterrupt(1,start,RISING); //аппаратное прерывание при прохождении первого датчика
attachInterrupt(0,finish,RISING); //аппаратное прерывание при прохождении второго датчика
}
void start()
{
if (gap1==0) { //если измерение еще не проводилось
gap1=micros(); //получаем время работы ардуино с момента включения до момента пролетания первой пули
}
}
void finish()
{
if (gap2==0) { //если измерение еще не проводилось
gap2=micros(); //получаем время работы ардуино с момента включения до момента пролетания второй пули
}
}
void loop() {
if (initial==0) { //флажок первого запуска
Serial.println("Press 3 to rapidity mode"); //режим измерения скорострельности
Serial.println("Press 2 to mass set mode"); //режим выбора массы снаряда
Serial.println("Press 1 to service mode"); //режим отладки (резисторы)
Serial.println("Press 0 speed measure mode (default)"); //выход из режимов
Serial.println("System is ready, just pull the f*ckin trigger!"); //уведомление о том, что хрон готов к работе
Serial.println(" ");
initial=1; //первый запуск, больше не показываем сообщения
}
if (Serial.available() > 0 && set!=2) { //еси есть какие буквы на вход с порта и не выбран 2 режим
int val=Serial.read(); //прочитать что было послано в порт
switch(val) { //оператор выбора
case 48: set=0; flagmass=0; rapidflag=0; initial=0; break; //если приняли 0 то выбрать 0 режим
case 49: set=1; break; //если приняли 1 то запустить режим 1
case 50: set=2; break; //если приняли 2 то запустить режим 2
case 51: set=3; break; //если приняли 3 то запустить режим 3
}
}
if (set==1) { //если 1 режим
Serial.print("sensor 1: ");
Serial.println(analogRead(2)); //показать значение на первом датчике
Serial.print("sensor 2: ");
Serial.print(analogRead(4)); //показать значение на втором датчике
Serial.println();
Serial.println(); //ну типо два переноса строки
}
if (set==2) { //если 2 режим
if (flagmass==0) { //флажок чтобы показать надпись только 1 раз
Serial.print("Set the mass of bullet (gramm): "); //надпись
flagmass=1;
}
if(Serial.available() > 0) //если есть что на вход с порта
{
massstring = Serial.readStringUntil('\n'); //присвоить massstring всё что было послано в порт
flagmassset=1; //поднять флажок
}
if (flagmassset==1) { //если флажок поднят (приняли значение в порт)
Serial.println(massstring); //написать введённое значение
Serial.println(" ");
massstring.toCharArray(masschar,sizeof(masschar)); //перевод значения в float (десятичная дробь)
mass=atof(masschar)/1000; //всё ещё перевод
flagmass=0; //опустить все флажки
flagmassset=0;
initial=0;
set=0; //показать приветственную надпись
}
}
if (gap1!=0 && gap2!=0 && gap2>gap1 && set==0) { //если пуля прошла оба датчика в 0 режиме
velocity=(1000000*(dist)/(gap2-gap1)); //вычисление скорости как расстояние/время
energy=velocity*velocity*mass/2; //вычисление энергии
Serial.print("Shot #");
Serial.println(n); //вывод номера выстрела
Serial.print("Speed: ");
Serial.println(velocity); //вывод скорости в COM
Serial.print("Energy: ");
Serial.println(energy); //вывод энергии в COM
Serial.println(" ");
gap1=0; //сброс значений
gap2=0;
n++; //номер выстрела +1
}
if (micros()-gap1>1000000 && gap1!=0 && set!=1) { // (если пуля прошла первый датчик) И (прошла уже 1 секунда, а второй датчик не тронут)
Serial.println("FAIL"); //выдаёт FAIL через 1 секунду, если пуля прошла через первый датчик, а через второй нет
gap1=0;
gap2=0;
}
if (set==3) { //режим скорострельности
if (rapidflag==0) {
Serial.println("Welcome to the rapidity test!");
Serial.println("");
rapidflag=1; //показать надпись один раз
}
if (gap1!=0) { //если пролетели через первый датчик
rapidtime=60/((float)(gap1-lastshot)/1000000); //расчет скорострельности выстр/мин
lastshot=gap1; //запомнить время между выстрелами
Serial.print("Rapidity (shot/min): "); //вывод
Serial.println(rapidtime);
Serial.println(" ");
gap1=0;
}
}
delay(200); //задержка для стабильности
}
а вот такой дисплей с такой схемой найден в просторах...

и вот с таким кодом:
Текст скетча:
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
unsigned int data = 0;
volatile unsigned int time_IN = 0;
volatile unsigned int time_OUT = 0;
Adafruit_PCD8544 display = Adafruit_PCD8544( 4, 5, 6, 7, 8);
const static unsigned char PROGMEM logoBmp[] =
{
B00111110, B01111111, B01100011, B01111111, B01100011, B01100011, B00111110, B01111111, B00000011, B11111011, B11110000,
B01111111, B01111111, B01100011, B01111111, B01100011, B01100011, B01111111, B01111111, B00000011, B11111011, B11111000,
B01100011, B01100000, B01100011, B01100000, B01100011, B01100011, B01100011, B01100000, B00000000, B01100011, B00011000,
B01100011, B01100000, B01111111, B01111111, B01111111, B01111111, B01100011, B01111111, B00000000, B01100011, B11110000,
B01100011, B01100000, B01111111, B01111111, B01111111, B01111111, B01100011, B01111111, B00000000, B01100011, B11111000,
B01100011, B01100000, B01100011, B01100000, B01100011, B01100011, B01100011, B01100000, B00000000, B01100011, B00011000,
B01111111, B01100000, B01100011, B01111111, B01100011, B01100011, B01111111, B01111111, B00000000, B01100011, B11111000,
B00111110, B01100000, B01100011, B01111111, B01100011, B01100011, B00111110, B01111111, B00000000, B01100011, B11110000
};
void setup(){
Serial.begin(9600);
attachInterrupt(0, IN, RISING);
attachInterrupt(1, OUT, RISING);
display.begin(); // Инициализация дисплея
display.setContrast(60); // Устанавливаем контраст
display.setTextColor(BLACK); // Устанавливаем цвет текста
display.setTextSize(4); // Устанавливаем размер текста
display.clearDisplay(); // Очищаем дисплей
display.display();
delay(1000);
}
void IN(){
if (time_IN == 0)
{
time_IN = micros();
}
}
void OUT(){
if (time_OUT == 0)
{
time_OUT = micros();
}
}
void loop(){
display.drawBitmap(LCDWIDTH/0, LCDHEIGHT/1-8, logoBmp, 88, 8, BLACK); // x, y, logo, w, h, color
display.display();
delay(2000);
while ( time_IN == 0 && time_OUT == 0 ) ;
delay(100);
if ( time_IN != 0 && time_OUT != 0 && time_OUT > time_IN ){
data = 0.06/((time_OUT-time_IN)/1000000.0); // v = s / t
display.clearDisplay(); // Очищаем дисплей
display.display();
delay(100);
Serial.println(data);
display.println(data);
}
else
{
display.clearDisplay(); // Очищаем дисплей
display.display();
delay(100);
Serial.println(«X»);
display.println(«X»);
}
time_IN = 0;
time_OUT = 0;
}
Люди ! помогите запилить все во едино нубу! Заранее ОЧЕНЬ Благодарю!!!

У Гувера есть свой форум. Его обитателям прошивки попеределывать - одно удовольствие. Найдете там Архата - скажете, что вас отсюда послали. Это будет кодовой фразой.
и на этом спасибо добрый человек!
не поважают здесь гайвера))))
В схеме самое эпичное- 9v батарейка.
а скажите ка мне милчел 33 , что Вы понимаете под «помогите»?
и ОЧЕНЬ тоже прозвучало, «ОЧЕНЬ» это сколько?
"Моя благодарность не будет иметь границ! Но, в пределах разумного.")
В схеме самое эпичное- 9v батарейка.
а скажите ка мне милчел 33 , что Вы понимаете под «помогите»?
и ОЧЕНЬ тоже прозвучало, «ОЧЕНЬ» это сколько?
всё там в порядке с батарейкой - никому нафик не впали самоубившиеся от 220V тупорылые дети.
А я, признаться, смотрел несколько видео с ютуба с этим самым (ну вы поняли). Веселый парень! «Соплеклей» как универсальный инструмент для соединения чего угодно с чем угодно! Ну и так по мелочи позыв к зрителю не плохой. Реализация храмает на все 4 колена. (
А я, признаться, смотрел несколько видео с ютуба с этим самым (ну вы поняли). Веселый парень! «Соплеклей» как универсальный инструмент для соединения чего угодно с чем угодно! Ну и так по мелочи позыв к зрителю не плохой. Реализация храмает на все 4 колена. (
а ещё чужие библиотеки тупо тырит и выдаёт за свои))))
Может быть, даже навеивает... Скорее всего. Но я не ловил, судить не могу.