Помогите с программированием плииз!

33Wolf
Offline
Зарегистрирован: 07.07.2020

Доброго времени суток ! Пытаюсь сделать хронограф как у Гувера , но с дисплеем нокиа 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;

}

 

Люди ! помогите запилить все во едино нубу! Заранее ОЧЕНЬ Благодарю!!!
sadman41
Offline
Зарегистрирован: 19.10.2016

У Гувера есть свой форум. Его обитателям прошивки попеределывать - одно удовольствие. Найдете там Архата - скажете, что вас отсюда послали. Это будет кодовой фразой.

33Wolf
Offline
Зарегистрирован: 07.07.2020

sadman41 пишет:
У Гувера есть свой форум. Его обитателям прошивки попеределывать - одно удовольствие. Найдете там Архата - скажете, что вас отсюда послали. Это будет кодовой фразой.

и на этом спасибо добрый человек!

vvadim
Offline
Зарегистрирован: 23.05.2012

не поважают здесь гайвера))))

inspiritus
Offline
Зарегистрирован: 17.12.2012

В схеме самое эпичное- 9v батарейка.

а скажите ка мне милчел 33 , что Вы понимаете под «помогите»?

и ОЧЕНЬ тоже прозвучало, «ОЧЕНЬ» это сколько?

Green
Онлайн
Зарегистрирован: 01.10.2015

"Моя благодарность не будет иметь границ! Но, в пределах разумного.")

Клапауций 12345
Offline
Зарегистрирован: 17.05.2020

inspiritus пишет:

В схеме самое эпичное- 9v батарейка.

а скажите ка мне милчел 33 , что Вы понимаете под «помогите»?

и ОЧЕНЬ тоже прозвучало, «ОЧЕНЬ» это сколько?


всё там в порядке с батарейкой - никому нафик не впали самоубившиеся от 220V тупорылые дети.

BOOM
BOOM аватар
Онлайн
Зарегистрирован: 14.11.2018

А я, признаться, смотрел несколько видео с ютуба с этим самым (ну вы поняли). Веселый парень! «Соплеклей» как универсальный инструмент для соединения чего угодно с чем угодно! Ну и так по мелочи позыв к зрителю не плохой. Реализация храмает на все 4 колена. (

vvadim
Offline
Зарегистрирован: 23.05.2012

BOOM пишет:

А я, признаться, смотрел несколько видео с ютуба с этим самым (ну вы поняли). Веселый парень! «Соплеклей» как универсальный инструмент для соединения чего угодно с чем угодно! Ну и так по мелочи позыв к зрителю не плохой. Реализация храмает на все 4 колена. (

а ещё чужие библиотеки тупо тырит и выдаёт за свои))))

BOOM
BOOM аватар
Онлайн
Зарегистрирован: 14.11.2018

Может быть, даже навеивает... Скорее всего. Но я не ловил, судить не могу.