Krokování programu
Krokování programu
Zdravím a mám začátečnickou otázku.
Zkouším si upravit program, který používá displej z Nokie 5110. Chtěl bych to předělat na LCD 4x20, ale ztrácím se v tom. Je tam dost podmínek a větvení.
Exisuje něco jako debugger nebo něco jiného, kde by se sketch dal trasovat po krocích aby bylo vidět kam to skáče a co kde dělá? Našel jsem jen arduino-pro-ide-0.0.5-alpha.preview-windows, ale tam se nechytám.
Zkouším si upravit program, který používá displej z Nokie 5110. Chtěl bych to předělat na LCD 4x20, ale ztrácím se v tom. Je tam dost podmínek a větvení.
Exisuje něco jako debugger nebo něco jiného, kde by se sketch dal trasovat po krocích aby bylo vidět kam to skáče a co kde dělá? Našel jsem jen arduino-pro-ide-0.0.5-alpha.preview-windows, ale tam se nechytám.
Re: Krokování programu
můžeš použít a hodně se využívá seriový minitor u programu IDE
jako třeba tady : http://www.pistek.eu/blog/2013/03/07/ar ... -podminky/
není to sice přesně o krokování programu, ale vidíš co se v programu děje, záleží co chceš vědět, co se má provést, jestli se to provedlo a kdy atd.
jako třeba tady : http://www.pistek.eu/blog/2013/03/07/ar ... -podminky/
není to sice přesně o krokování programu, ale vidíš co se v programu děje, záleží co chceš vědět, co se má provést, jestli se to provedlo a kdy atd.
Re: Krokování programu
Port používám, ale je tak trochu přes ruku. Navíc se mi objevuje co potřebuji i na displeji. Jenže občas se na něm objeví něco, co jsem nečekal nebo zase neobjeví co jsem očekával.
Re: Krokování programu
https://www.visualmicro.com/
Běží to pod Visual studiem od Microsoftu (free). Samotné visualmicro je na měsíc zdarma (krokování na dva týdny). pak se dá koupit permanentní nebo roční licence.
Běží to pod Visual studiem od Microsoftu (free). Samotné visualmicro je na měsíc zdarma (krokování na dva týdny). pak se dá koupit permanentní nebo roční licence.
Re: Krokování programu
Dík, kouknu a vyzkouším.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Krokování programu
Ondro a ten debuging i krokování funguje i na Arduinech ?ondraN píše: ↑06 srp 2020, 21:33https://www.visualmicro.com/
Běží to pod Visual studiem od Microsoftu (free). Samotné visualmicro je na měsíc zdarma (krokování na dva týdny). pak se dá koupit permanentní nebo roční licence.
Co to používám na "lepších" procesorech, musí tam být jiné rozhraní než UART a speciální programátor. Ale je to dotaz "začátečníka", krokování na Arduinu mne ještě nenapadlo vyzkoušet ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Krokování programu
Mělo by to fungovat na všem, co se dá provozovat pod arduino IDE. Jeden čas jsem o tom uvažoval, ale pak jsem přešel na STM32 a začal používat CUBE IDE a návrat k arduino IDE už mě moc neláká.
Re: Krokování programu
jsem taky začáteník a nemyslím si, že debugger bude pro tebe to "pravé ořechové" , vlož jsem kod pomocí tlačítka </> a hodní lidi ti pomůžou, tak jako laskavě pomohli mě a taky dalším stovkám / tisícům příznivců Arduina, kteří jen navštívili stránky AFora
No a jestli je to pořád jeden a ten samý problém, který si chtěl vyřešit tady :
tak máš sice trpělivost, a ta se cení, ale k výsledku si zatím nedošel, což je škoda.
Dej kod, napiš co potřebuješ nebo naopak nechceš, co se děje nebo neděje atd. ...
Ono - někdy stačí postrčit, ale někdy tě musí třeba tlačit , tak jako tlačili mě hodně štěstí
No a jestli je to pořád jeden a ten samý problém, který si chtěl vyřešit tady :
hafca
Příspěvky: 16
Registrován: 23 říj 2017, 23:05
Reputation: 0
Deklarace LCD
Příspěvek od hafca » 02 črc 2020, 15:11
Jsem začátečník a zkouším přepsat kód, který je pro displej z Nokie 5110 na LCD 20x4. V první části kódu void setup() je LCD definované LiquidCrystal_I2C lcd(0x23,20,4); a všechny příkazy lcd.print projdou kompilací bez chyby.
Jenže kód pak pokračuje void loop() a tam už mi vypadává chyba 'lcd' was not declared in this scope. Je tam dost podmínek pro zobrazení a co jsem zkoušel, tak po každé podmínce musím znovu deklarovat to LCD.
Musí to tak být nebo se to dá nějak obejít? Jde mi o zjednodušení aby kód moc nebobtnal.
tak máš sice trpělivost, a ta se cení, ale k výsledku si zatím nedošel, což je škoda.
Dej kod, napiš co potřebuješ nebo naopak nechceš, co se děje nebo neděje atd. ...
Ono - někdy stačí postrčit, ale někdy tě musí třeba tlačit , tak jako tlačili mě hodně štěstí
Re: Krokování programu
Už jsem pokročil a kompilace prochází bez chyb. Teď ještě bádám nad tím, kde by měly být správně výpisy na displej. V původním programu jsou řádky updatelcd(); a tak předpokládám, že tam by měly přijít ty výpisy.
Program je "neučesaná" pracovní verze. jsou tam nechané věci, co nejsou už potřeba a po konečném odladění přijdou smazat.
Špatně se to odlaďuje, protože čekat na bouřku dost dobře nejde a simulace zapalovačem není to nejlepší. Tápu kde by měl být výpis text7 a jak do výpisů dostat české znaky. Jestli to jde dát do jedné proměnné nebo to musím vypisovat po částech.
Doufám, že to není proti nějakému pravidlu, když jsem nežádal autory o svolení k úpravám.
Program je "neučesaná" pracovní verze. jsou tam nechané věci, co nejsou už potřeba a po konečném odladění přijdou smazat.
Špatně se to odlaďuje, protože čekat na bouřku dost dobře nejde a simulace zapalovačem není to nejlepší. Tápu kde by měl být výpis text7 a jak do výpisů dostat české znaky. Jestli to jde dát do jedné proměnné nebo to musím vypisovat po částech.
Doufám, že to není proti nějakému pravidlu, když jsem nežádal autory o svolení k úpravám.
Kód: Vybrat vše
/*
Modified to perform full scale detection and reporting by Glen Popiel - (kw5gp [at] hotmail.com)
Modified and added some functions by www.pablox.net pablox(at)pablox.net
-counter of total strikes
-added abiity to select indoor or outdoor mode by pin
-added logo on power on
-added accoustic output to beep on every strike
-added ability to send extra debug information via UART by shorting pin to ground + calibrate of AS3935 by shorting this pin to ground
-added ability to set minimum of strikes to made interrupt
-added sensor BMP180 for measuring temperature, barometric pressure and display then on LCD
Based on LightningDetector.pde - AS3935 Franklin Lightning Sensor™ IC by AMS library demo code
Copyright (c) 2012 Raivis Rengelis (raivis [at] rrkb.lv). All rights reserved.
Modified in 2013 for I2C by Luka Mustafa - Musti (musti [at] wlan-si.net).
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
// BMP180 sensor i2c address is 0x77, sensor connected to i2c bus paralell with AS3935 board, supply of both chips must be 3,3V!
// I2c library by Wayne Truchsess
// I2C and AS3935 Libraries
#include "I2C.h" // Use the I2C Library
#include <AS3935.h> // Use the AS4935 Library
#include <LCD5110_Basic.h> // Use the Nokia 5110 LCD Library
#include <Wire.h> // Include the Wire Communication Library
#include <SFE_BMP180.h> // include BMP180 library
// BMP180
// create an SFE_BMP180 object, here called "pressure":
SFE_BMP180 pressure;
#include "I2C.h" // Use the I2C Library
#include <AS3935.h> // Use the AS4935 Library
#include <Wire.h> // Include the Wire Communication Library
#include <SFE_BMP180.h> // include BMP180 library
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
// ř
byte r_hacek[8] = {
B00101,
B00010,
B10110,
B11001,
B10000,
B10000,
B10000,
B00000
};
// š
byte s_hacek[8] = {
B00100,
B01010,
B01010,
B01010,
B01010,
B10001,
B10001,
B01110
};
// í
byte i_carka[8] = {
B00010,
B00100,
B01100,
B00100,
B00100,
B00100,
B01110,
B00000
};
// ý
byte y_carka[8] = {
B00001,
B00010,
B01001,
B01001,
B01111,
B00001,
B01110,
B00000
};
// é
byte e_carka[8] = {
B00010,
B00100,
B01110,
B10001,
B11111,
B10000,
B01110,
B00000
};
// šipka nahoru
byte sipka[8] = {
B00000,
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
B00000
};
//LCD5110 glcd(3,4,5,7,6); // Assign the Nokia 5110 LCD Pins
extern uint8_t SmallFont[]; // define the Nokia Font
extern uint8_t uvod_logo[]; // define startup logo
// Lightning Detector library object initialization First argument is interrupt pin, second is device I2C address
//!!! IF YOU HAVE BOARD WITH ANOTHER ADDRESS THAN 0, YOU MUST CHANGE IT !!!
AS3935 AS3935(2,0);
#define IRQ_PIN 2 // Define Pin 2 for the Interrupt from the Detector Module
#define SIMULATE_PIN 12 // Define Pin 12 for the Lightning Simulation switch
#define in_out_PIN 13 // Define pin 13 for indoor/outdooor/auto mode
#define spk_PIN 10 // Define pin 10 for speaker
#define diag_PIN 11 // Define pin 11 for full diagnostics via UART
#define EMI_PIN 8 // Define pin 8 for EMI
#define noise_PIN 9 // Define pin 9 for Noise High
#define holddown_time 20 // Delay to allow Detector Module settling after startup
#define AS3935_ENERGY_HIGH 0x6,0x1f // Defines the Register for the High order bits of the lightning energy
#define AS3935_ENERGY_MID 0x5,0xff // Defines the Register for the Middle order bits of the lightning energy
#define AS3935_ENERGY_LOW 0x4,0xff // Defines the Register for the Low order bits of the lightning energy
#define NoiseFloor 2 // Define the Noise Floor Level of the Detector Chip
#define SpikeReject 2 // Define the Spike Rejection Level of the Detector Chip
#define Watchdog 2 // Define the Watchdog Setting of the Detector Chip
#define minimum_lightnings 0 //define minimum of lightnings in 15 minutes to cause interrupt; 0: one lightning, 1: 5 lightnings, 2: 9 lightnings, 3: 16 lightnings
int strikes_total = 0;
int debug = 1;
int recommended_tune_cap=5; // Set the Recommended Value of the Detector Tuning Capacitor
int test; // calculated tuning cap valuecap
int strokeIntensity; // The intensity of the strike
int simulated; // Indicates if strike is simulated
int irqSource; // The source of the AS3935 interrupt
int strokeDistance; // the distance of the strike
int holddown = 1; // Set the Flag indicating startup
long last_event = 0; // Holds the time of the last event detected
long last_tick =0; // the time of the last minute "tick" in millis()
long current_time; // the current time in millis()
long time; // the difference in millis() between last "tick" and the last event
long time_mins; // when elapsed over 1 hour, here are minutes (1 hour and 10 minutes)
long time_mod; // save elapsed minutes before conversion to hours
double T,P; // Temperature and pressure
// Used to calcluate the intensity of the strike
long strokeEnergyHigh, strokeEnergyMid, strokeEnergyLow, strokeTotal;
// The lines of text for the Nokia display
String text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13;
String data_buffer = " ";
LiquidCrystal_I2C lcd(0x23,20,4);
void setup()
{
Serial.begin(9600); // set the Serial USB port speed
lcd.init();
//I2C library initialization
I2c.begin();
I2c.pullup(true);
I2c.setSpeed(0); //100kHz
pinMode(IRQ_PIN, INPUT); // Setup the Detector IRQ pin
pinMode(diag_PIN, INPUT); // Setup the diagnostics pin
pinMode(SIMULATE_PIN, INPUT); // Setup the Lightning Simulate Button
digitalWrite(SIMULATE_PIN, HIGH); // enable the pullup resistor on the Simulate pin
digitalWrite(diag_PIN, HIGH); //enable the pull up on diagnostics pin
randomSeed(analogRead(0)); // seed the random number generator
simulated = LOW; // reset the simulate flag
pinMode(in_out_PIN, INPUT); // Setup the mode pin
digitalWrite(in_out_PIN, HIGH); // enable the pullup resistor on the in_out button
pinMode(spk_PIN, OUTPUT); // Setup the speaker PIN
pinMode(EMI_PIN, OUTPUT); // Setup the EMI
pinMode(noise_PIN, OUTPUT); // Setup the Noise High
lcd.createChar(1, r_hacek);
lcd.createChar(2, s_hacek);
lcd.createChar(3, i_carka);
lcd.createChar(4, y_carka);
lcd.createChar(5, e_carka);
lcd.createChar(6, sipka);
/* Set up the Nokia 5110 Display
glcd.InitLCD(65); // Initialize
glcd.setFont(SmallFont); // Use Small Font
cleartext(); // clear the text values
glcd.drawBitmap(0, 0, uvod_logo, 84, 48); // show startup logo
glcd.clrScr();
glcd.print("orig by kw5gp",CENTER,8);
glcd.print("mod pablox.net",CENTER,16);
glcd.print("init...",CENTER,32);
delay(10);
*/
// inicializace čidel
lcd.clear();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print(" Inicializace.");
//if diagnostic pin is shorted do GROUND, sets debug flag to 1
if (digitalRead(diag_PIN) == LOW)
{
debug=1;
} else {
debug=0;
}
// BMP180 init - if fails, display message on UART
if (pressure.begin())
{
Serial.println("BMP180 init success");
text2="BMP180 OK";
lcd.setCursor(0,1);
lcd.print(text2);
updatelcd();
}
else
{
// BMP180 error
Serial.println("BMP180 init fail (disconnected?)\n\n");
text2="BMP180 ERR";
lcd.setCursor(0,1);
lcd.print(text2);
updatelcd();
while(1); // Pause forever.
}
// end of BMP180 init
if(debug == 0) // If the debug flag is set, provide extra diagnostic information
{
Serial.println("Scan I2C Bus"); // verify that we can see the Lightning Detector (should be at 0x3)
I2c.scan(); // Run the I2c Bus Scan function
}
Serial.println("Reset Detector");
// reset all internal register values to defaults
AS3935.reset(); // Reset the AS3935
delay(2000); // Wait a second for things to settle
// Set the Noise Floor, Spike Rejection and Watchdog settings
AS3935.setNoiseFloor(NoiseFloor); // Set the Noise Floor Level
delay(200);
AS3935.setSpikeRejection(SpikeReject); // Set the Spike Rejection Level
delay(200);
AS3935.setWatchdogThreshold(Watchdog); // Set the Watchdog Level
delay(1000);
AS3935.setMinimumLightnings(minimum_lightnings); // Set the minimum lightnings for interrupt
delay(1000);
AS3935.calibrate(); //start calibration procedure of AS3935
delay(500);
// if lightning detector can not tune tank circuit to required tolerance, shows message on LCD
if(!AS3935.calibrate()) {
cleartext();
text2="AS3935 ERR";
lcd.setCursor(0,2);
lcd.print(text2);
Serial.println("AS3935 ERR");
updatelcd();
}else
{
cleartext();
text2="AS3935 OK";
lcd.setCursor(0,2);
lcd.print(text2);
Serial.println("AS3935 OK");
updatelcd();
}
// konec inicializace
lcd.setCursor(0,3);
lcd.print("Konec inicializace.");
delay(3000);
lcd.clear();
// The Embedded Adventures MOD-1016 includes the recommended Tuning Capacitor Setting on the package
// This Debug calibration routine is for testing and verification purposes
if (debug == 0) // run calibration if debug flag set
{
// if lightning detector can not tune tank circuit to required tolerance,
// calibration function will return false
if(!AS3935.calibrate()) {
Serial.println("Tune Error");
}
// Set the Tuning Cap register to the value recommended
Serial.println("Set Tune Cap Reg");
AS3935.registerWrite(AS3935_TUN_CAP,recommended_tune_cap); // Write the recommended value to the Tuning Capacitor Register
delay(500); // Wait for things to settle
test = AS3935.registerRead(AS3935_TUN_CAP); // read and display the current Tuning Cap value
delay(500);
Serial.print("Tuning Cap: ");
Serial.println(test,HEX);
}
test = AS3935.registerRead(AS3935_TUN_CAP); // verify it is set correctly
delay(500);
Serial.print("Tuning Cap: ");
Serial.println(test,HEX);
// Display LCO frequency for 20 seconds. Uncomment below to use an oscilloscope
//or frequency counter to see LCO ffrequency. Frequency of LCO is divided by 16
// if LCO frequency is 500kHz, you see here 31.25 kHz +-3.5%
//*
Serial.println("Disp LCO frequency on IRQ pin :16");
AS3935.registerWrite(AS3935_DISP_LCO,1);
delay(100);
AS3935.registerWrite(AS3935_DISP_LCO,0);
Serial.println("LCO disp complete");
//*/
//Select mode Indoor/outdoor
if (digitalRead(in_out_PIN) == HIGH) // Check for a simulation
{
AS3935.setIndoors(); // Set Gain for Indoors
Serial.println("Mod doma");
text3="<-DUM->";
lcd.setCursor(5, 0);
lcd.print(text3);
updatelcd();
} else {
AS3935.setOutdoors(); // uncomment to set Gain for Outdoors
Serial.println("Mod venku");
text3="<-VENKU->";
lcd.setCursor(5, 0);
lcd.print(text3);
updatelcd();
}
delay(400); // Wait for things to Settle
// if debug flag is set to 1, EMI disturbers are allowed
if (debug == 0) // run calibration if debug flag set
{
AS3935.enableDisturbers(); } // Uncomment to turn on Disturber Interrupts (EMI)
else {
AS3935.disableDisturbers(); // We only want Lightning, turn off EMI interrupts
}
delay(400); // Wait for it things to settle
printAS3935Registers(); // Display the registers
int irqSource = AS3935.interruptSource(); // clear the IRQ before we start
delay(500);
Serial.println("Detektor Aktivni"); // And we're ready for lightning
// beep - init finished
for (int i=1; i<300; i++)
{
digitalWrite(spk_PIN,HIGH);
delayMicroseconds(1000);
digitalWrite(spk_PIN,LOW);
delayMicroseconds(500);
}
cleartext(); // Clear all the LCD text variables
bmp_readdata();
// výpis v klidu bez detekce
text3 = "Pozoruji";
text5 = String(strikes_total) +".";
lcd.setCursor(0, 1);
lcd.print(text3);
updatelcd(); // Update the LCD
} // End Setup Loop
void loop() // Start the Main Loop
{
// Check and update timestamp
current_time = abs(millis())/1000; // Current time (seconds since start)
if (current_time - last_tick >= 60) // Run if 60 seconds has passed
{
last_tick = current_time;
bmp_readdata(); //update data from BMP180 and display then on LCD
// convert to minutes and hours
time = last_tick - last_event; // convert difference last event to current time into seconds
if (time >=60 ) // One minute has passed
{
time = time/60;
text6 = String(time);
if ((time >= 1) && (time <60))
// 1 to 59 minutes ago
{
text6 = text6 + "min. stare";
} else {
if (time >=60)
{
time_mins = time - 60; // minutes over one hour to display in format XXh XXmin"
time_mod = time; // save elapsed time in minutes before conversion to hours
time = time/60;
// convert to hours
text6 = String(time);
if (time >=1)
{
if (time == 1)
{
text6 = text6 + "h:" + String(time_mins)+ "min. stare";
} else {
time_mins = time_mod - (60*time);
text6 = text6 + "h:" + String(time_mins)+ "min. stare";
}
}
}
}
// výpis času od poslední události
lcd.setCursor(5, 3);
lcd.print(text6);
updatelcd(); // Update the LCD with time since last event
}
}
if (holddown == 1) // Delay the start for a few seconds to let everything settle
{
if ((millis()/1000) > holddown_time) // If we've passed the hold down time
{
holddown = 0; // Turn it loose
}
} else {
// We've passed holddown time - rock and roll
if (digitalRead(SIMULATE_PIN) == LOW) // Check for a simulation
{
simulated = HIGH; // Turn on the simulated flag
delay(1000); // disable the simulate button for 1 second
} else {
simulated = LOW; // Make sure we turn off the simulated flag
}
if ((digitalRead(IRQ_PIN) == HIGH) || (simulated)) // If we have a real or simulated event let's do it
{
if (!simulated){ // if it's a real event, use the actual interrupt, otherwise set the IRQ code for lightning
delay(200); // wait for interrupt register to settle
irqSource = AS3935.interruptSource(); // Read the AS3935 IRQ Register
} else {
irqSource = 0b1000; // Set the IRQ code for lighting
}
// first step is to find out what caused interrupt
// as soon as we read interrupt cause register, irq pin goes low
// returned value is bitmap field, bit 0 - noise level too high, bit 2 - disturber detected, and finally bit 3 - lightning!
// create timestamp so we k when it occurred
if(irqSource != 0)
{ // 0 is a stat purge, we don't want to do anything with it
timestamp(); // Run the timestamp function
text6= "Novy "; // Set the Text time of the event to "Now"
bmp_readdata();
}
if (irqSource & 0b0001) // Noise Level High Interrupt
{
bmp_readdata();
//text2 = " "; // if lightning was detected in previous event, clears lines "Detected" and "Distance"
// text4 = " ";
// ?? výpis při detekci zvýšeného šumu
text7 = "Noise";
text5 = String(strikes_total) + ".";
lcd.setCursor(13, 2);
lcd.write (6);
lcd.setCursor(14, 2);
lcd.print(text7);
}
if (irqSource & 0b0100) // Man Made Disturber (EMI) Interrupt
// ?? výpis při velkém rušení EMI
{
text7 = "EMI ";
lcd.setCursor(13, 2);
lcd.write (6);
lcd.setCursor(14, 2);
lcd.print(text7);
}
if (irqSource & 0b1000) // Lightning
{
//beep
for (int i=1; i<100; i++)
{
digitalWrite(spk_PIN,HIGH);
delayMicroseconds(1000);
digitalWrite(spk_PIN,LOW);
delayMicroseconds(500);
}
//increment counter of total strikes
strikes_total = strikes_total + 1;
text5 = String(strikes_total) + ".";
// need to find distance of lightning strike, function returns approximate distance in kilometers,
// where value 1 represents storm in detector's near victinity, and 63 - very distant, out of range stroke
// everything in between is the distance in kilometers
//Detected
// text2 = " ";
if (simulated)
{ // make up a distance if we're faking it
strokeDistance = int(random(45)); // Pick a distance between 1 and 44)
if (strokeDistance < 5 ) // If a real strike is less than 5km, it's "Overhead", so we match that
{
strokeDistance = 1;
}
text1 = "Simulace";
} else { // otherwise, get the real distance
delay(8);
strokeDistance = AS3935.lightningDistanceKm(); // It's real lightning, read the AS3935 Distance Register
text1 = "Blesk!!! ";
}
if (strokeDistance < 5) // The AS3935 Reports Lightning distance as Out of Range,40,37,34,31,27,24,20,17,14,12,10,8,6,5,Overhead
{
text3 = "Nad hlavou";
}
if (strokeDistance > 40)
{
text3 = "Mimo dosah";
}
if (strokeDistance <= 40 && strokeDistance >= 5)
{
text3 = String(strokeDistance) + "km daleko";
}
if (simulated) // Make up the energy of the stroke
{
strokeEnergyHigh = int(random(31)); // There are 3 registers containing strike energy
strokeEnergyMid = int(random(255));
strokeEnergyLow = int(random(255));
} else { // otherwise get the real energy
strokeEnergyHigh = AS3935.registerRead(AS3935_ENERGY_HIGH); // Read the 3 Strike Energy Registers
strokeEnergyMid = AS3935.registerRead(AS3935_ENERGY_MID);
strokeEnergyLow = AS3935.registerRead(AS3935_ENERGY_LOW);
}
strokeTotal = strokeEnergyLow + (strokeEnergyMid*256)+ (strokeEnergyHigh*65536); // Calculate the total Strike Energy
strokeIntensity = map(strokeTotal,1,2000000,1,10); // map it to an Intensity factor of 1 thru 10
text4 = "Intensita:" + String(strokeIntensity);
}
if (irqSource == 0)
{
} else {
// výpis času
lcd.setCursor(5, 3);
lcd.print(text6);
// výpis vzdálenosti
lcd.setCursor(9, 1);
lcd.print(text3);
// hlášení blesku
lcd.setCursor(0, 1);
lcd.print(text1);
// počítadlo detekcí blesku
lcd.setCursor(0, 3);
lcd.print(text5);
// intenzita blesku
lcd.setCursor(0, 2);
lcd.print(text4);
// sem možná patří výpis text7
updatelcd(); // Update the LCD with the Event Data
if (irqSource & 0b1000)
{
data_buffer = String(strikes_total) + ". - " + String(strokeDistance) + " Km - " + "Intensita " + String(strokeIntensity) +
" - Tlak " + String(P+45,0) + "mbar - " + "teplota " + String (T,0) + "C -";
Serial.println(data_buffer);
}
}
}
}
} // End the Main Loop
void printAS3935Registers() // Display the basic AS3935 Registers
{
int noiseFloor = AS3935.getNoiseFloor(); // Read the Noise Floor setting
int spikeRejection = AS3935.getSpikeRejection(); // Read the Spike Rejection setting
int watchdogThreshold = AS3935.getWatchdogThreshold(); // Read the Watchdog Threshold setting
int min_lightnings = AS3935.getMinimumLightnings();
Serial.print("Noise floor: ");
Serial.println(noiseFloor,DEC);
Serial.print("Spike reject: ");
Serial.println(spikeRejection,DEC);
Serial.print("WD threshold: ");
Serial.println(watchdogThreshold,DEC);
Serial.print("Minimum lightnings: ");
Serial.println(min_lightnings,DEC);
}
void timestamp() // stores the time of the last event in seconds
{
last_event = abs(millis()/1000);
}
void updatelcd() // clears LCD display and writes the current LCD text data
{
}
void cleartext() // clears the text data
{
text1 = text1;
text2 = text1;
text3 = text1;
text4 = text1;
text3 = text1;
text4 = text1;
text5 = text1;
text6 = text1;
text7 = text1;
text8 = text1;
text9 = text1;
text10 = text1;
text11 = text1;
text12 = text1;
text13 = text1;
}
//function to read data from BMP180 sensor, display then on LCD and send them over UART
void bmp_readdata()
{
char status;
// You must first get a temperature measurement to perform a pressure reading.
// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.
// výpis teploty a tlaku
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
text1 = String(T,0);
text1 = text1 + ((char)223)+"C";
//lcd.setCursor(0, 0);
//lcd.print(t1);
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
// Přidaná korekce tlaku podle místa (+45):
status = pressure.getPressure(P,T);
if (status != 0)
{
text1 = String(T,0)+ ((char)223)+"C ";
text2 = String(P+45,0)+ "mbr";
}
}
}
}
lcd.setCursor(0,0);
lcd.print(text1);
lcd.setCursor(13,0);
lcd.print(text2);
updatelcd();
}
Re: Krokování programu
Program je sice placený, ale hooooodně mocný ... https://www.oshonsoft.com/avr.html - zadarmo funguje jen chvilku na odzkoušení.
Já na něm začínal s PICkama. Ten BASIC Compilátor taky není špatná věc. Debuger, breakpointy, manuálně můžeš měnit stavy jakýchkoliv registrů a simulovat tak určité jevy. Nic podobného zadrma jsem ale bohužel nenašel.
Já na něm začínal s PICkama. Ten BASIC Compilátor taky není špatná věc. Debuger, breakpointy, manuálně můžeš měnit stavy jakýchkoliv registrů a simulovat tak určité jevy. Nic podobného zadrma jsem ale bohužel nenašel.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů