Eigen doseerprogramma?
20 berichten
• Pagina 2 van 2 • 1, 2
Re: Eigen doseerprogramma?
Dank je wel, Koepel. Inmiddels werkt alles, helaas kan ik niet testen, ik schrijf dit vanuit het ziekenhuis. Opvolgende reacties komen zeker, wanneer weet ik ook niet.
Advertisement
Re: Eigen doseerprogramma?
Dank je wel, Koepel. Mijn vrouw heeft mijn Ipad meegebracht. Van het programmeren komt nu niet veel terecht maar het is ook leuk om een beetje "bij" te blijven. De door jou genoemde library van J.Cristensen ken ik, sterker nog die gebruik ik nu. Dit werk nl. zowel met de DS3232 als ook de DS3231. Zoals ik al eerder vertelde werkt het doseer programma, alle knoppen, bijvoorbeeld, werken zonder dat ik de eerder genoemde timers gebruik. Nu moet dus getest worden of ik kan kalibreren en dat er op bepaalde tijden iets opgestart kan worden maar ja, daar kwam, zoals je nu weet iets tussen. Wordt vervolgd dus. Ik vind het al fijn dat dit geen knip en plak programma is maar zelf gemaakt. Hoewel ik wel zou begrijpen dat je de rillingen over je rug lopen bij het zien van de sketch... Dank en tot later. Groet, Ben
Re: Eigen doseerprogramma?
Oh ja, dit vergat ik nog; de tijd en datumString arrays had ik i.p.v. 9 op 16 gezet. De sprintsf invulling veranderd naar %4d, een voorloopnul is hier niet nodig, maar het gekke is dat zodra ik naar een andere pagina ga en daarna weer terug naar het Dash board screen ik de datum, alleen de datuminvulling niet de tijd, kwijt ben! Voor nu heb ik maar even weer teruggezet naar de oude situatie die wel werkte maar toch raar? Nu ik toch aan het leren ben zou de oorzaak graag willen weten.
Re: Eigen doseerprogramma?
Je bedoelt dat ik echt moet gaan nadenken ![Surprised :o](./images/smilies/icon_e_surprised.gif)
Helaas zie ik het probleem nu niet.
Is de grootte van het array voor de hoeveelheid groot genoeg ?
De stack of een variabele op de stack overschrijven is in ieder geval niet de bedoeling. Dus er zit niets anders op dan die arrays groter te maken (bijvoorbeeld 16), en dan de fout te gaan zoeken.
![Surprised :o](./images/smilies/icon_e_surprised.gif)
Helaas zie ik het probleem nu niet.
Is de grootte van het array voor de hoeveelheid groot genoeg ?
De stack of een variabele op de stack overschrijven is in ieder geval niet de bedoeling. Dus er zit niets anders op dan die arrays groter te maken (bijvoorbeeld 16), en dan de fout te gaan zoeken.
Re: Eigen doseerprogramma?
Hallo allemaal. Terug uit het ziekenhuis probeer ik alles weer een beetje op te pakken maar ik ben nog een langere revalidatie tijd nodig.
Terug naar mijn oorspronkelijke onderwerp. De gemaakte sketch, die ik nog een keer zal geven zoals hij nu is, schijnt alles te doen wat er verwacht wordt. Schijnt, schrijf ik, want het uiteindelijke doel; het doseren van een bepaalde hoeveelheid op een aangegeven tijd werkt niet. Wanneer ik een tijd invoer wanneer er een dosering plaats zou moeten vinden hoor ik een duidelijke klik. Er gebeurd dus iets. Maar de desbetreffende pomp start niet. Moet er een vertraging tussen, misschien? (Alarm.delay?) Zelf ben ik ook al aan het zoeken geweest in het kalibratie segment maar ook hier vind ik niets geks. Ik laat de sketch met de TimeAlarms functie zien in de hoop dat iemand opmerkt wat ik misschien overzie?
Groet,
Ben
cpp code
Terug naar mijn oorspronkelijke onderwerp. De gemaakte sketch, die ik nog een keer zal geven zoals hij nu is, schijnt alles te doen wat er verwacht wordt. Schijnt, schrijf ik, want het uiteindelijke doel; het doseren van een bepaalde hoeveelheid op een aangegeven tijd werkt niet. Wanneer ik een tijd invoer wanneer er een dosering plaats zou moeten vinden hoor ik een duidelijke klik. Er gebeurd dus iets. Maar de desbetreffende pomp start niet. Moet er een vertraging tussen, misschien? (Alarm.delay?) Zelf ben ik ook al aan het zoeken geweest in het kalibratie segment maar ook hier vind ik niets geks. Ik laat de sketch met de TimeAlarms functie zien in de hoop dat iemand opmerkt wat ik misschien overzie?
Groet,
Ben
cpp code
- Code: Alles selecteren
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <DS3232RTC.h>
#include <Nextion.h>
#include <Wire.h>
#include <EEPROM.h>
#include <Adafruit_MotorShield.h>
AlarmId id;
//Maak het motorschildobject met het standaard I2C-adres
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Of maak het met een ander I2C-adres (bijvoorbeeld voor stapelen):Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// Select which 'port' M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *Motor1 = AFMS.getMotor(1);
Adafruit_DCMotor *Motor2 = AFMS.getMotor(2);
Adafruit_DCMotor *Motor3 = AFMS.getMotor(3);
Adafruit_DCMotor *Motor4 = AFMS.getMotor(4);
//-----------------------Timerstrings----------------------
char Uur1String[5];
char Minuut1String[5];
char Seconde1String[5];
char Hoeveelheid1String[5];
char Uur2String[5];
char Minuut2String[5];
char Seconde2String[5];
char Hoeveelheid2String[5];
char Uur3String[5];
char Minuut3String[5];
char Seconde3String[5];
char Hoeveelheid3String[5];
char Uur4String[5];
char Minuut4String[5];
char Seconde4String[5];
char Hoeveelheid4String[5];
//------------------Variabelen---------------------------
unsigned long tijdMillis; //klok update timer
unsigned long startTijd; //kalibratie tijdmeting
unsigned long eindTijd; //kalibratie tijdmeting
unsigned long duur1Millis; //Gemeten tijd kalibratie pomp 1
unsigned long duur2Millis; //Gemeten tijd kalibratie pomp 2
unsigned long duur3Millis; //Gemeten tijd kalibratie pomp 3
unsigned long duur4Millis; //Gemeten tijd kalibratie pomp 4
unsigned long motor1Millis; //Timer motor 1 loop
unsigned long motor2Millis; //Timer motor 2 loop
unsigned long motor3Millis; //Timer motor 3 loop
unsigned long motor4Millis; //Timer motor 4 loop
unsigned long mot1Millis; //Timer totale motor 1 blok
unsigned long mot2Millis; //Timer totale motor 2 blok
unsigned long mot3Millis; //Timer totale motor 3 blok
unsigned long mot4Millis; //Timer totale motor 4 blok
unsigned long duur1; //Berekende tijdduur loop motor 1
unsigned long duur2; //Berekende tijdduur loop motor 2
unsigned long duur3; //Berekende tijdduur loop motor 3
unsigned long duur4; //Berekende tijdduur loop motor 4
int adres1 = 50; //EEPROM adres motor 1
int adres2 = 60; //EEPROM adres motor 2
int adres3 = 70; //EEPROM adres motor 3
int adres4 = 80; //EEPROM adres motor 4
const int TxPin = 16; //Tekstpin
long int tijdLoop; //Tijdloop berekening
uint32_t inhoud0; //Inhoud berekening voorraad flacon 1
uint32_t inhoud1; //Inhoud berekening voorraad flacon 2
uint32_t inhoud2; //Inhoud berekening voorraad flacon 3
uint32_t inhoud3; //Inhoud berekening voorraad flacon 4
int Uur1 = 0; //uur pomp 1
int Minuut1 = 0; //minuut pomp 1
int Seconde1 = 0; //seconde pomp 1
int Hoeveelheid1 = 0; //hoeveelheid in ml. pomp 1
int Uur2 = 0; //uur pomp 2
int Minuut2 = 0; //minuut pomp 2
int Seconde2 = 0; //seconde pomp 2
int Hoeveelheid2 = 0; //hoeveelheid in ml. pomp 2
int Uur3 = 0; //uur pomp 3
int Minuut3 = 0; //minuut pomp 3
int Seconde3 = 0; //seconde pomp 3
int Hoeveelheid3 = 0; //hoeveelheid in ml. pomp 3
int Uur4 = 0; //uur pomp 4
int Minuut4 = 0; //minuut pomp 4
int Seconde4 = 0; //seconde pomp 4
int Hoeveelheid4 = 0; //hoeveelheid in ml. pomp 4
int flacon1 = 0; //Definitie voorraad flacon 1
int flacon2 = 0; //Definitie voorraad flacon 2
int flacon3 = 0; //Definitie voorraad flacon 3
int flacon4 = 0; //Definitie voorraad flacon 4
/*---------------------------Nextion-----------------------------
Deze knoppen en progress bars worden vanuit de Nextion bestuurd
-----------------***-------------------------------------------
Pagina 0 Instellingen
NexButton b0 = NexButton(0, 3, "b0"); //Instellingen
Pagina 1 Menu
NexButton b1 = NexButton(1, 5, "b1"); //Thuis knop
NexButton b2 = NexButton(1, 1, "b2"); //Knop naar pomp test loop
NexButton b3 = NexButton(1, 2, "b3"); //Knop naar pomp kalibratie
NexButton b4 = NexButton(1, 3, "b4"); //Knop naar pompkeuze tijd/hoeveelheid
NexButton b5 = NexButton(1, 4, "b5"); //Knop vulling flacons
Pagina 2 Pomp test loop
NexButton b6 = NexButton(2, 5, "b6"); //Thuis knop
NexButton b7 = NexButton(2, 6, "b7"); //Terug naar Menu
Pagina 3 Pomp kalibratie
NexButton b12 = NexButton(3, 5, "b12"); //Thuis knop
NexButton b13 = NexButton(3, 6, "b13"); //Terug naar Menu
Pagina 4 Pompkeuze tijd/hoeveelheid
NexButton b18 = NexButton(4, 5, "b18"); //Thuis knop
NexButton b19 = NexButton(4, 5, "b19"); //Terug naar Menu
Pagina 5 tijd/hoeveelheid pomp 1
NexButton b24 = NexButton(5, 2, "b24"); //Thuis knop
NexButton b25 = NexButton(5, 1, "b25"); //Terug naar Pompkeuze tijd/hoeveelheid pagina 4
Pagina 6 tijd/hoeveelheid pomp 2
NexButton b34 = NexButton(6, 1, "b34"); //Thuis knop
NexButton b35 = NexButton(6, 2, "b35"); //Terug naar Pompkeuze tijd/hoeveelheid pagina 4
Pagina 7 tijd/hoeveelheid pomp 3
NexButton b44 = NexButton(7, 1, "b44"); //Thuis knop
NexButton b45 = NexButton(7, 2, "b45"); //Terug naar Pompkeuze tijd/hoeveelheid pagina 4
Pagina 8 tijd/hoeveelheid pomp 4
NexButton b54 = NexButton(8, 1, "b54"); //Thuis knop
NexButton b55 = NexButton(8, 2, "b55"); //Terug naar Pompkeuze tijd/hoeveelheid pagina 4
Pagina 9 Knop vulling flacons
NexButton b64 = NexButton(9, 9, "b64"); //Thuis knop
NexButton b65 = NexButton(9, 10, "b65"); //Terug naar Menu*/
//--------------------pagina 0: Dashboard-----------------------
NexText t0 = NexText(0, 1, "t0"); //uren, minuten en seconden (Klok veld)
NexText t1 = NexText(0, 2, "t1"); //Dag, maand en jaar (Datum veld)
//--------------------pagina 2: Pomp test loop-------------------
NexButton b8 = NexButton(2, 1, "b8"); //Push and release knop pomp 1 start/stop test loop
NexButton b9 = NexButton(2, 2, "b9"); //Push and release knop pomp 2 start/stop test loop
NexButton b10 = NexButton(2, 3, "b10"); //Push and release knop pomp 3 start/stop test loop
NexButton b11 = NexButton(2, 4, "b11"); //Push and release knop pomp 4 start/stop test loop
//--------------------pagina 3: Pomp kalibratie------------------
NexButton b14 = NexButton(3, 1, "b14"); //Push and release knop pomp 1 start/stop kalibratie
NexButton b15 = NexButton(3, 2, "b15"); //Push and release knop pomp 2 start/stop kalibratie
NexButton b16 = NexButton(3, 3, "b16"); //Push and release knop pomp 3 start/stop kalibratie
NexButton b17 = NexButton(3, 4, "b17"); //Push and release knop pomp 4 start/stop kalibratie
//--------------------pagina 4: Tijd en Hoeveelheid--------------
NexButton b20 = NexButton(4, 1, "b20"); //Knop naar instelling pagina pomp 1
NexButton b21 = NexButton(4, 2, "b21"); //Knop naar instelling pagina pomp 2
NexButton b22 = NexButton(4, 3, "b22"); //Knop naar instelling pagina pomp 3
NexButton b23 = NexButton(4, 4, "b23"); //Knop naar instelling pagina pomp 4
//--------------------pagina 5: instelling tijd/hoeveelheid pomp 1----
NexButton b26 = NexButton(5, 3, "b26"); //Uur plus 1
NexButton b27 = NexButton(5, 4, "b27"); //Uur min 1
NexButton b28 = NexButton(5, 5, "b28"); //Minuut plus 1
NexButton b29 = NexButton(5, 6, "b29"); //Minuut min 1
NexButton b30 = NexButton(5, 7, "b30"); //Seconde plus 1
NexButton b31 = NexButton(5, 8, "b31"); //Seconde min 1
NexButton b32 = NexButton(5, 9, "b32"); //Milliliter plus 1
NexButton b33 = NexButton(5, 10, "b33"); //Milliliter min 1
NexText t2 = NexText(5, 11, "t2"); //uren instelling pomp 1
NexText t3 = NexText(5, 12, "t3"); //minuten instelling pomp 1
NexText t4 = NexText(5, 13, "t4"); //seconden instelling pomp 1
NexText t5 = NexText(5, 14, "t5"); //Instelling hoeveelheid pomp 1
//--------------------pagina 6: instelling tijd/hoeveelheid pomp 2----
NexButton b36 = NexButton(6, 3, "b36"); //Uur plus 1
NexButton b37 = NexButton(6, 4, "b37"); //Uur min 1
NexButton b38 = NexButton(6, 5, "b38"); //Minuut plus 1
NexButton b39 = NexButton(6, 6, "b39"); //Minuut min 1
NexButton b40 = NexButton(6, 7, "b40"); //Seconde plus 1
NexButton b41 = NexButton(6, 8, "b41"); //Seconde min 1
NexButton b42 = NexButton(6, 9, "b42"); //Milliliter plus 1
NexButton b43 = NexButton(6, 10, "b43"); //Milliliter min 1
NexText t6 = NexText(6, 11, "t6"); //uren instelling pomp 2
NexText t7 = NexText(6, 12, "t7"); //minuten instelling pomp 2
NexText t8 = NexText(6, 13, "t8"); //seconden instelling pomp 2
NexText t9 = NexText(6, 14, "t9"); //Instelling hoeveelheid pomp 2
//--------------------pagina 7: instelling tijd/hoeveelheid pomp 3----
NexButton b46 = NexButton(7, 3, "b46"); //Uur plus 1
NexButton b47 = NexButton(7, 4, "b47"); //Uur min 1
NexButton b48 = NexButton(7, 5, "b48"); //Minuut plus 1
NexButton b49 = NexButton(7, 6, "b49"); //Minuut min 1
NexButton b50 = NexButton(7, 7, "b50"); //Seconde plus 1
NexButton b51 = NexButton(7, 8, "b51"); //Seconde min 1
NexButton b52 = NexButton(7, 9, "b52"); //Milliliter plus 1
NexButton b53 = NexButton(7, 10, "b53"); //Milliliter min 1
NexText t10 = NexText(7, 11, "t10"); //uren instelling pomp 3
NexText t11 = NexText(7, 12, "t11"); //minuten instelling pomp 3
NexText t12 = NexText(7, 13, "t12"); //seconden instelling pomp 3
NexText t13 = NexText(7, 14, "t13"); //Instelling hoeveelheid pomp 3
//--------------------pagina 8: instelling tijd/hoeveelheid pomp 4----
NexButton b56 = NexButton(8, 3, "b56"); //Uur plus 1
NexButton b57 = NexButton(8, 4, "b57"); //Uur min 1
NexButton b58 = NexButton(8, 5, "b58"); //Minuut plus 1
NexButton b59 = NexButton(8, 6, "b59"); //Minuut min 1
NexButton b60 = NexButton(8, 7, "b60"); //Seconde plus 1
NexButton b61 = NexButton(8, 8, "b61"); //Seconde min 1
NexButton b62 = NexButton(8, 9, "b62"); //Milliliter plus 1
NexButton b63 = NexButton(8, 10, "b63"); //Milliliter min 1
NexText t14 = NexText(8, 11, "t14"); //uren instelling pomp 4
NexText t15 = NexText(8, 12, "t15"); //minuten instelling pomp 4
NexText t16 = NexText(8, 13, "t16"); //seconden instelling pomp 4
NexText t17 = NexText(8, 14, "t17"); //Instelling hoeveelheid pomp 4
//--------------------pagina 9: Inhoud doseer flessen-------------
NexButton b66 = NexButton(9, 5, "b66"); //vult flacon j0 tot 100
NexButton b67 = NexButton(9, 6, "b67"); //vult flacon j1 tot 100
NexButton b68 = NexButton(9, 7, "b68"); //vult flacon j2 tot 100
NexButton b69 = NexButton(9, 8, "b69"); //vult flacon j3 tot 100
NexProgressBar j0 = NexProgressBar(9, 1, "j0"); //geeft inhoud aan van flacon j0
NexProgressBar j1 = NexProgressBar(9, 2, "j1"); //geeft inhoud aan van flacon j1
NexProgressBar j2 = NexProgressBar(9, 3, "j2"); //geeft inhoud aan van flacon j2
NexProgressBar j3 = NexProgressBar(9, 4, "j3"); //geeft inhoud aan van flacon j3
NexTouch *nex_listen_list[] =
{
&b8,
&b9,
&b10,
&b11,
&b14,
&b15,
&b16,
&b17,
&b20,
&b21,
&b22,
&b23,
&b26,
&b27,
&b28,
&b29,
&b30,
&b31,
&b32,
&b33,
&b36,
&b37,
&b38,
&b39,
&b40,
&b41,
&b42,
&b43,
&b46,
&b47,
&b48,
&b49,
&b50,
&b51,
&b52,
&b53,
&b56,
&b57,
&b58,
&b59,
&b60,
&b61,
&b62,
&b63,
&b66,
&b67,
&b68,
&b69,
&t0,
&t1,
&t2,
&t3,
&t4,
&t5,
&t6,
&t7,
&t8,
&t9,
&t10,
&t11,
&t12,
&t13,
&t14,
&t15,
&t16,
&t17,
NULL
};
//----------------------Pomp test loop Pagina 2-----------------
void b8PushCallback(void *ptr)
{
Motor1 ->run(FORWARD);
Motor1->setSpeed(255);
}
void b8PopCallback(void *ptr)
{
Motor1 ->run(RELEASE);
}
void b9PushCallback(void *ptr)
{
Motor2 ->run(FORWARD);
Motor2->setSpeed(255);
}
void b9PopCallback(void *ptr)
{
Motor2 ->run(RELEASE);
}
void b10PushCallback(void *ptr)
{
Motor3 ->run(FORWARD);
Motor3->setSpeed(255);
}
void b10PopCallback(void *ptr)
{
Motor3 ->run(RELEASE);
}
void b11PushCallback(void *ptr)
{
Motor4 ->run(FORWARD);
Motor4->setSpeed(255);
}
void b11PopCallback(void *ptr)
{
Motor4 ->run(RELEASE);
}
//-------------------------Pomp kalibratie Pagina 3--------------------
//10 ml. wordt overgepompt, hiervoor wordt de benodigde tijd vastgelegd.
void b14PushCallback(void *ptr)
{
if (tijdLoop == 0)
{
startTijd = millis();
Motor1 ->run(FORWARD);
Motor1->setSpeed(255);
tijdLoop = 1;
}
}
void b14PopCallback(void *ptr)
{
if (tijdLoop == 1)
{
Motor1 ->run(RELEASE);
eindTijd = millis();
tijdLoop = 0;
duur1 = eindTijd - startTijd;
duur1 /= 10; //omzetting 10 ml. kalibratieduur naar 1 ml.
EEPROM.put(adres1, duur1);
}
}
void b15PushCallback(void *ptr)
{
if (tijdLoop == 0)
{
startTijd = millis();
Motor2 ->run(FORWARD);
Motor2->setSpeed(255);
tijdLoop = 1;
}
}
void b15PopCallback(void *ptr)
{
if (tijdLoop == 1)
{
Motor2 ->run(RELEASE);
eindTijd = millis();
tijdLoop = 0;
duur2 = eindTijd - startTijd;
duur2 /= 10;
EEPROM.put(adres2, duur2);
}
}
void b16PushCallback(void *ptr)
{
if (tijdLoop == 0)
{
startTijd = millis();
Motor3 ->run(FORWARD);
Motor3->setSpeed(255);
tijdLoop = 1;
}
}
void b16PopCallback(void *ptr)
{
if (tijdLoop == 1)
{
Motor3 ->run(RELEASE);
eindTijd = millis();
tijdLoop = 0;
duur3 = eindTijd - startTijd;
duur3 /= 10;
EEPROM.put(adres3, duur3);
}
}
void b17PushCallback(void *ptr)
{
if (tijdLoop == 0)
{
startTijd = millis();
Motor4 ->run(FORWARD);
Motor4->setSpeed(255);
tijdLoop = 1;
}
}
void b17PopCallback(void *ptr)
{
if (tijdLoop == 1)
{
Motor4 ->run(RELEASE);
eindTijd = millis();
tijdLoop = 0;
duur4 = eindTijd - startTijd;
duur4 /= 10;
EEPROM.put(adres4, duur4);
}
}
//----------------------pagina 4 naar instelling pagina pomp 1----------
void b20PopCallback(void *ptr)
{
sprintf(Uur1String, "%02d", Uur1);
t2.setText(Uur1String);
sprintf(Minuut1String, "%02d", Minuut1);
t3.setText(Minuut1String);
sprintf(Seconde1String, "%02d", Seconde1);
t4.setText(Seconde1String);
sprintf(Hoeveelheid1String, "%02d", Hoeveelheid1);
t5.setText(Hoeveelheid1String);
}
//----------------------pagina 5 instelling tijd/hoeveelheid pomp 1--------
void b26PopCallback(void *ptr)
{
Uur1 += 1;
sprintf(Uur1String, "%02d", Uur1);
t2.setText(Uur1String);
}
void b27PopCallback(void *ptr)
{
Uur1 -= 1;
sprintf(Uur1String, "%02d", Uur1);
t2.setText(Uur1String);
}
void b28PopCallback(void *ptr)
{
Minuut1 += 1;
sprintf(Minuut1String, "%02d", Minuut1);
t3.setText(Minuut1String);
}
void b29PopCallback(void *ptr)
{
Minuut1 -= 1;
sprintf(Minuut1String, "%02d", Minuut1);
t3.setText(Minuut1String);
}
void b30PopCallback(void *ptr)
{
Seconde1 += 1;
sprintf(Seconde1String, "%02d", Seconde1);
t4.setText(Seconde1String);
delay(100);
}
void b31PopCallback(void *ptr)
{
Seconde1 -= 1;
sprintf(Seconde1String, "%02d", Seconde1);
t4.setText(Seconde1String);
}
void b32PopCallback(void *ptr)
{
Hoeveelheid1 += 1;
sprintf(Hoeveelheid1String, "%02d", Hoeveelheid1);
t5.setText(Hoeveelheid1String);
}
void b33PopCallback(void *ptr)
{
Hoeveelheid1 -= 1;
sprintf(Hoeveelheid1String, "%02d", Hoeveelheid1);
t5.setText(Hoeveelheid1String);
}
//-----------------------pagina 4 naar instelling pagina pomp 2----------
void b21PopCallback(void *ptr)
{
sprintf(Uur2String, "%02d", Uur2);
t6.setText(Uur2String);
sprintf(Minuut2String, "%02d", Minuut2);
t7.setText(Minuut2String);
sprintf(Seconde2String, "%02d", Seconde2);
t8.setText(Seconde2String);
sprintf(Hoeveelheid2String, "%02d", Hoeveelheid2);
t9.setText(Hoeveelheid2String);
}
//------------------------pagina 6 instelling tijd/hoeveelheid pomp 2-------
void b36PopCallback(void *ptr)
{
Uur2 += 1;
sprintf(Uur2String, "%02d", Uur2);
t6.setText(Uur2String);
}
void b37PopCallback(void *ptr)
{
Uur2 -= 1;
sprintf(Uur2String, "%02d", Uur2);
t6.setText(Uur2String);
}
void b38PopCallback(void *ptr)
{
Minuut2 += 1;
sprintf(Minuut2String, "%02d", Minuut2);
t7.setText(Minuut2String);
}
void b39PopCallback(void *ptr)
{
Minuut2 -= 1;
sprintf(Minuut2String, "%02d", Minuut2);
t7.setText(Minuut2String);
}
void b40PopCallback(void *ptr)
{
Seconde2 += 1;
sprintf(Seconde2String, "%02d", Seconde2);
t8.setText(Seconde2String);
}
void b41PopCallback(void *ptr)
{
Seconde2 -= 1;
sprintf(Seconde2String, "%02d", Seconde2);
t8.setText(Seconde2String);
}
void b42PopCallback(void *ptr)
{
Hoeveelheid2 += 1;
sprintf(Hoeveelheid2String, "%02d", Hoeveelheid2);
t9.setText(Hoeveelheid2String);
}
void b43PopCallback(void *ptr)
{
Hoeveelheid2 -= 1;
sprintf(Hoeveelheid2String, "%02d", Hoeveelheid2);
t9.setText(Hoeveelheid2String);
}
//-----------------------pagina 4 naar instelling pagina pomp 3----------
void b22PopCallback(void *ptr)
{
sprintf(Uur3String, "%02d", Uur3);
t10.setText(Uur3String);
sprintf(Minuut3String, "%02d", Minuut3);
t11.setText(Minuut3String);
sprintf(Seconde3String, "%02d", Seconde3);
t12.setText(Seconde3String);
sprintf(Hoeveelheid3String, "%02d", Hoeveelheid3);
t13.setText(Hoeveelheid3String);
}
//------------------------pagina 7 instelling tijd/hoeveelheid pomp 3-------
void b46PopCallback(void *ptr)
{
Uur3 += 1;
sprintf(Uur3String, "%02d", Uur3);
t10.setText(Uur3String);
}
void b47PopCallback(void *ptr)
{
Uur3 -= 1;
sprintf(Uur3String, "%02d", Uur3);
t10.setText(Uur3String);
}
void b48PopCallback(void *ptr)
{
Minuut3 += 1;
sprintf(Minuut3String, "%02d", Minuut3);
t11.setText(Minuut3String);
}
void b49PopCallback(void *ptr)
{
Minuut3 -= 1;
sprintf(Minuut3String, "%02d", Minuut3);
t11.setText(Minuut3String);
}
void b50PopCallback(void *ptr)
{
Seconde3 += 1;
sprintf(Seconde3String, "%02d", Seconde3);
t12.setText(Seconde3String);
}
void b51PopCallback(void *ptr)
{
Seconde3 -= 1;
sprintf(Seconde3String, "%02d", Seconde3);
t12.setText(Seconde3String);
}
void b52PopCallback(void *ptr)
{
Hoeveelheid3 += 1;
sprintf(Hoeveelheid3String, "%02d", Hoeveelheid3);
t13.setText(Hoeveelheid3String);
}
void b53PopCallback(void *ptr)
{
Hoeveelheid3 -= 1;
sprintf(Hoeveelheid3String, "%02d", Hoeveelheid3);
t13.setText(Hoeveelheid3String);
}
//-----------------------pagina 4 naar instelling pagina pomp 4---------
void b23PopCallback(void *ptr)
{
sprintf(Uur4String, "%02d", Uur4);
t14.setText(Uur4String);
sprintf(Minuut4String, "%02d", Minuut4);
t15.setText(Minuut4String);
sprintf(Seconde4String, "%02d", Seconde4);
t16.setText(Seconde4String);
sprintf(Hoeveelheid4String, "%02d", Hoeveelheid4);
t17.setText(Hoeveelheid4String);
}
//------------------------pagina 8 instelling tijd/hoeveelheid pomp 4-------
void b56PopCallback(void *ptr)
{
Uur4 += 1;
sprintf(Uur4String, "%02d", Uur4);
t14.setText(Uur4String);
}
void b57PopCallback(void *ptr)
{
Uur4 -= 1;
sprintf(Uur4String, "%02d", Uur4);
t14.setText(Uur4String);
}
void b58PopCallback(void *ptr)
{
Minuut4 += 1;
sprintf(Minuut4String, "%02d", Minuut4);
t15.setText(Minuut4String);
}
void b59PopCallback(void *ptr)
{
Minuut4 -= 1;
sprintf(Minuut4String, "%02d", Minuut4);
t15.setText(Minuut4String);
}
void b60PopCallback(void *ptr)
{
Seconde4 += 1;
sprintf(Seconde4String, "%02d", Seconde4);
t16.setText(Seconde4String);
}
void b61PopCallback(void *ptr)
{
Seconde4 -= 1;
sprintf(Seconde4String, "%02d", Seconde4);
t16.setText(Seconde4String);
}
void b62PopCallback(void *ptr)
{
Hoeveelheid4 += 1;
sprintf(Hoeveelheid4String, "%02d", Hoeveelheid4);
t17.setText(Hoeveelheid4String);
}
void b63PopCallback(void *ptr)
{
Hoeveelheid4 -= 1;
sprintf(Hoeveelheid4String, "%02d", Hoeveelheid4);
t17.setText(Hoeveelheid4String);
}
//--------------------Zet de inhoud van de flacons op 100-------------
void b66PopCallback(void *ptr)
{
flacon1 = 500;
inhoud0 = flacon1 * 20 / 100;
j0.setValue(inhoud0);
}
void b67PopCallback(void *ptr)
{
flacon2 = 500;
inhoud1 = flacon2 * 20 / 100;
j1.setValue(inhoud1);
}
void b68PopCallback(void *ptr)
{
flacon3 = 500;
inhoud2 = flacon3 * 20 / 100;
j2.setValue(inhoud2);
}
void b69PopCallback(void *ptr)
{
flacon4 = 500;
inhoud3 = flacon4 * 20 / 100;
j3.setValue(inhoud3);
}
void setup()
{
Wire.begin();
setSyncProvider(RTC.get); // Get the time from the RTC
/* if (timeStatus() != timeSet) {
Serial.println("Unable to sync with the RTC");
}
else {
Serial.println("RTC has set the system time");
}/
setTime(hour, minute, second, day, month, year)*/
//setTime(13, 11, 0, 26, 5, 2018);
// invulling startijden van de pompen.
Alarm.alarmRepeat(Uur1, Minuut1, Seconde1, Motor1Alarm);
Alarm.alarmRepeat(Uur2, Minuut2, Seconde2, Motor2Alarm);
Alarm.alarmRepeat(Uur3, Minuut3, Seconde3, Motor3Alarm);
Alarm.alarmRepeat(Uur4, Minuut4, Seconde4, Motor4Alarm);
nexInit(); //Initialisatie Nextion scherm
//Merkt de tekstvensters op
//t0.attachPop(t0PopCallback, &t0);
//t1.attachPop(t1PopCallback, &t1);
//Merkt pressed and released buttons op
b8.attachPush(b8PushCallback, &b8);
b9.attachPush(b9PushCallback, &b9);
b10.attachPush(b10PushCallback, &b10);
b11.attachPush(b11PushCallback, &b11);
b8.attachPop(b8PopCallback, &b8);
b9.attachPop(b9PopCallback, &b9);
b10.attachPop(b10PopCallback, &b10);
b11.attachPop(b11PopCallback, &b11);
b14.attachPush(b14PushCallback, &b14);
b15.attachPush(b15PushCallback, &b15);
b16.attachPush(b16PushCallback, &b16);
b17.attachPush(b17PushCallback, &b17);
b14.attachPop(b14PopCallback, &b14);
b15.attachPop(b15PopCallback, &b15);
b16.attachPop(b16PopCallback, &b16);
b17.attachPop(b17PopCallback, &b17);
b20.attachPop(b20PopCallback, &b20);
b21.attachPop(b21PopCallback, &b21);
b22.attachPop(b22PopCallback, &b22);
b23.attachPop(b23PopCallback, &b23);
b26.attachPop(b26PopCallback, &b26);
b27.attachPop(b27PopCallback, &b27);
b28.attachPop(b28PopCallback, &b28);
b29.attachPop(b29PopCallback, &b29);
b30.attachPop(b30PopCallback, &b30);
b31.attachPop(b31PopCallback, &b31);
b32.attachPop(b32PopCallback, &b32);
b33.attachPop(b33PopCallback, &b33);
b36.attachPop(b36PopCallback, &b36);
b37.attachPop(b37PopCallback, &b37);
b38.attachPop(b38PopCallback, &b38);
b39.attachPop(b39PopCallback, &b39);
b40.attachPop(b40PopCallback, &b40);
b41.attachPop(b41PopCallback, &b41);
b42.attachPop(b42PopCallback, &b42);
b43.attachPop(b43PopCallback, &b43);
b46.attachPop(b46PopCallback, &b46);
b47.attachPop(b47PopCallback, &b47);
b48.attachPop(b48PopCallback, &b48);
b49.attachPop(b49PopCallback, &b49);
b50.attachPop(b50PopCallback, &b50);
b51.attachPop(b51PopCallback, &b51);
b52.attachPop(b52PopCallback, &b52);
b53.attachPop(b53PopCallback, &b53);
b56.attachPop(b56PopCallback, &b56);
b57.attachPop(b57PopCallback, &b57);
b58.attachPop(b58PopCallback, &b58);
b59.attachPop(b59PopCallback, &b59);
b60.attachPop(b60PopCallback, &b60);
b61.attachPop(b61PopCallback, &b61);
b62.attachPop(b62PopCallback, &b62);
b63.attachPop(b63PopCallback, &b63);
b66.attachPop(b66PopCallback, &b66);
b67.attachPop(b67PopCallback, &b67);
b68.attachPop(b68PopCallback, &b68);
b69.attachPop(b69PopCallback, &b69);
AFMS.begin(); // maak met de standaardfrequentie 1.6KHz
//AFMS.begin(1000); // of, zoals hier aangegeven, met een andere frequentie, zeg 1 KHz
pinMode(TxPin, OUTPUT); //TxPin wordt als uitgang gebruikt
}
void loop()
{
nexLoop(nex_listen_list);
digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display
}
//-------------------------------------Motor 1----------------------------------
void Motor1Alarm()
{
duur1 = EEPROM.get(adres1, duur1); //Ophalen tijdsduur voor 1 ml dosering
duur1 = duur1 * Hoeveelheid1; //Gewenste doseerhoeveelheid
unsigned long motor1Millis; //Duur motor1 aan.
if (motor1Millis - duur1Millis < duur1)
{
Motor1 ->run(FORWARD);
Motor1->setSpeed(255);
duur1Millis = motor1Millis;
}
Motor1 ->run(RELEASE); //Motor1 uit
flacon1 = flacon1 - Hoeveelheid1;
inhoud0 = flacon1 * 20 / 100;
j0.setValue(inhoud0); //Rest flacon inhoud
}
//------------------------------------Motor 2-----------------------------------
void Motor2Alarm()
{
duur2 = EEPROM.get(adres2, duur2); //Ophalen tijdsduur voor 1 ml dosering
duur2 = duur2 * Hoeveelheid2; //Gewenste doseerhoeveelheid
unsigned long motor2Millis; //Duur motor2 aan.
if (motor2Millis - duur2Millis < duur2)
{
Motor2 ->run(FORWARD);
Motor2->setSpeed(255);
duur2Millis = motor2Millis;
}
Motor2 ->run(RELEASE); //Motor2 uit
flacon2 = flacon2 - Hoeveelheid2;
inhoud1 = flacon2 * 20 / 100;
j1.setValue(inhoud1); //Rest flacon inhoud
}
//------------------------------------Motor 3------------------------------------
void Motor3Alarm()
{
duur3 = EEPROM.get(adres3, duur3); //Ophalen tijdsduur voor 1 ml dosering
duur3 = duur3 * Hoeveelheid3; //Gewenste doseerhoeveelheid
unsigned long motor3Millis; //Duur motor3 aan.
if (motor3Millis - duur3Millis < duur3)
{
Motor3 ->run(FORWARD);
Motor3->setSpeed(255);
duur3Millis = motor3Millis;
}
Motor3 ->run(RELEASE); //Motor3 uit
flacon3 = flacon3 - Hoeveelheid3;
inhoud2 = flacon3 * 20 / 100;
j2.setValue(inhoud2); //Rest flacon inhoud
}
//----------------------------------Motor 4-------------------------------------
void Motor4Alarm()
{
duur4 = EEPROM.get(adres4, duur4); //Ophalen tijdsduur voor 1 ml dosering
duur4 = duur4 * Hoeveelheid4; //Gewenste doseerhoeveelheid
unsigned long motor4Millis; //Duur motor4 aan.
if (motor4Millis - duur4Millis < duur4)
{
Motor4 ->run(FORWARD);
Motor4->setSpeed(255);
duur4Millis = motor4Millis;
}
Motor4 ->run(RELEASE); //Motor4 uit
flacon4 = flacon4 - Hoeveelheid4;
inhoud3 = flacon4 * 20 / 100;
j3.setValue(inhoud3); //Rest flacon inhoud*/
}
// Tijd en datum update
void digitalClockDisplay()
{
unsigned long huidigetijdMillis = millis();
if (huidigetijdMillis - tijdMillis > 1000)
{
char tijdString[9];
static char vorigeTijd[9];
sprintf(tijdString, "%02d:%02d:%02d", hour(), minute(), second());
if (strcmp(tijdString, vorigeTijd) != 0)
{
t0.setText (tijdString); //Tijd update
strcpy(vorigeTijd, tijdString); //Bewaar vorigeTijd voor de volgende vergelijking
}
char datumString[9];
static char vorigeDatum[9];
sprintf(datumString, "%02d:%02d:%02d", day(), month(), year());
if (strcmp(datumString, vorigeDatum) != 0)
{
t1.setText (datumString); //Datum update
strcpy(vorigeDatum, datumString); //Bewaar vorigeDatum voor de volgende vergelijking
}
tijdMillis = huidigetijdMillis;
}
}
Re: Eigen doseerprogramma?
Hallo allemaal,
Het zal nog wat testen nodig hebben maar ik meen de oplossing gevonden te hebben:
cpp code
Er is een Alarm.delay(duur1); regel toegevoegd en dat zorgt voor een werkend geheel.
Als gezegd, er moeten nog diverse testen gedaan worden met vloeistoffen, ik laat dan ook nog van mij horen.
Koepel bedankt!!
Het zal nog wat testen nodig hebben maar ik meen de oplossing gevonden te hebben:
cpp code
- Code: Alles selecteren
//-------------------------------------Motor 1----------------------------------
void Motor1Alarm()
{
duur1 = EEPROM.get(adres1, duur1); //Ophalen tijdsduur voor 1 ml dosering
duur1 = duur1 * Hoeveelheid1; //Gewenste doseerhoeveelheid
unsigned long motor1Millis; //Duur motor1 aan.
if (motor1Millis - duur1Millis < duur1)
{
Motor1 ->run(FORWARD);
Motor1->setSpeed(255);
duur1Millis = motor1Millis;
Alarm.delay(duur1);
}
Motor1 ->run(RELEASE); //Motor1 uit
flacon1 = flacon1 - Hoeveelheid1;
inhoud0 = flacon1 * 20 / 100;
j0.setValue(inhoud0); //Rest flacon inhoud
}
Er is een Alarm.delay(duur1); regel toegevoegd en dat zorgt voor een werkend geheel.
Als gezegd, er moeten nog diverse testen gedaan worden met vloeistoffen, ik laat dan ook nog van mij horen.
Koepel bedankt!!
Re: Eigen doseerprogramma?
De hele sketch heb ik niet goed bekeken, maar er vallen me twee dingen op.
Om alles goed te laten verlopen is het nodig dat de loop() heel vaak wordt uitgevoerd. De "nexLoop(nex_listen_list)" kijkt of er een commando van het display komt (als er een knop op het scherm wordt afgedrukt), en die kan het best heel vaak worden uitgevoerd. Dus dan kun je beter geen seconde wachten in de loop() met "Alarm.delay(1000)".
Zoals hier beschreven staat: https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
kun je een "Alarm.delay(0)" doen.
Dit gaat niet werken:
Je hebt daar nu een "Alarm.delay(duur1)" aan toegevoegd, om toch een soort van delay te forceren.
Als millis() wordt gebruikt als kookwekker (een eenmalige software timer), dan gebruik ik altijd een variabele die de kookwekker aan en uit zet.
In dit voorbeeld heet die variabele "enabled": https://gist.github.com/Koepel/01a6088f321eef5ec62f0b470c97a01e.
Je bent al heel ver gekomen met o.a. het Nextion display. Kun je Arduino gebruiken om je gedachten ergens anders op te vestigen ? Dat staat toch niet je revalidatie in de weg ? Je kunt een Arduino ook gebruiken om bewegingen te meten of kracht te meten of voor een geheugenconcentratie-spelletje. Dan kun je trots aan je revalidatiearts laten zien wat je met Arduino kunt doen
![Laughing :lol:](./images/smilies/icon_lol.gif)
Om alles goed te laten verlopen is het nodig dat de loop() heel vaak wordt uitgevoerd. De "nexLoop(nex_listen_list)" kijkt of er een commando van het display komt (als er een knop op het scherm wordt afgedrukt), en die kan het best heel vaak worden uitgevoerd. Dus dan kun je beter geen seconde wachten in de loop() met "Alarm.delay(1000)".
Zoals hier beschreven staat: https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
kun je een "Alarm.delay(0)" doen.
Dit gaat niet werken:
- Code: Alles selecteren
if (motor1Millis - duur1Millis < duur1)
{
...
duur1Millis = motor1Millis;
}
Je hebt daar nu een "Alarm.delay(duur1)" aan toegevoegd, om toch een soort van delay te forceren.
Als millis() wordt gebruikt als kookwekker (een eenmalige software timer), dan gebruik ik altijd een variabele die de kookwekker aan en uit zet.
In dit voorbeeld heet die variabele "enabled": https://gist.github.com/Koepel/01a6088f321eef5ec62f0b470c97a01e.
Je bent al heel ver gekomen met o.a. het Nextion display. Kun je Arduino gebruiken om je gedachten ergens anders op te vestigen ? Dat staat toch niet je revalidatie in de weg ? Je kunt een Arduino ook gebruiken om bewegingen te meten of kracht te meten of voor een geheugenconcentratie-spelletje. Dan kun je trots aan je revalidatiearts laten zien wat je met Arduino kunt doen
![Wink ;)](./images/smilies/icon_e_wink.gif)
![Laughing :lol:](./images/smilies/icon_lol.gif)
Re: Eigen doseerprogramma?
Dank je wel, Koepel, voor je reactie.
Het werken met delay's staat me eigenlijk helemaal tegen maar het weghalen van Alarm.delay(1000) leidde tot het helemaal niet werken van de sketch. Jouw idee om Alarm.delay(0) is daarom een goed plan. Ga ik proberen! Verder zou ik het liefst werken met het BlinkWithoutDelay principe maar dat gaf ook allerlei, overigens onduidelijke, problemen. Je "kookwekker" heb ik even gedownload om eens precies te begrijpen wat er gebeurd. Dat duurt bij mij altijd wat langer, dat begrijpen, maar het zondermeer kopiëren waarbij ik niet helemaal snap wat er precies gebeurd werkt in de hand dat ik mijn eigen sketch niet meer snap en dat wil ik helemaal niet. Maar misschien is de kookwekker bruikbaar als vervanging voor de Alarm.delay(duur1)? Alles werkt nu trouwens wel zoals mij voor ogen stond maar goed is de sketch zeker nog niet. Je laatste opmerking, oefenen met een Arduino als revalidatie therapie is wellicht gunstig maar ik moet zeggen dat ik nog erg vaak vermoeid ben wat nogal concentratie problemen geeft. Voor iemand, een beginner, die geen technische achtergrond heeft is dat nu juist erg lastig, zeker om een goed programma te maken. Gaat allemaal goed komen maar heeft nog veel tijd nodig. Mijn reacties zullen daarom soms wat langer op zich laten wachten.
Groet,
Ben.
Het werken met delay's staat me eigenlijk helemaal tegen maar het weghalen van Alarm.delay(1000) leidde tot het helemaal niet werken van de sketch. Jouw idee om Alarm.delay(0) is daarom een goed plan. Ga ik proberen! Verder zou ik het liefst werken met het BlinkWithoutDelay principe maar dat gaf ook allerlei, overigens onduidelijke, problemen. Je "kookwekker" heb ik even gedownload om eens precies te begrijpen wat er gebeurd. Dat duurt bij mij altijd wat langer, dat begrijpen, maar het zondermeer kopiëren waarbij ik niet helemaal snap wat er precies gebeurd werkt in de hand dat ik mijn eigen sketch niet meer snap en dat wil ik helemaal niet. Maar misschien is de kookwekker bruikbaar als vervanging voor de Alarm.delay(duur1)? Alles werkt nu trouwens wel zoals mij voor ogen stond maar goed is de sketch zeker nog niet. Je laatste opmerking, oefenen met een Arduino als revalidatie therapie is wellicht gunstig maar ik moet zeggen dat ik nog erg vaak vermoeid ben wat nogal concentratie problemen geeft. Voor iemand, een beginner, die geen technische achtergrond heeft is dat nu juist erg lastig, zeker om een goed programma te maken. Gaat allemaal goed komen maar heeft nog veel tijd nodig. Mijn reacties zullen daarom soms wat langer op zich laten wachten.
Groet,
Ben.
Re: Eigen doseerprogramma?
Dag allemaal,
De adviezen van Koepel heb ik alvast opgevolgd. Er bleek ook nog een fout te zijn waardoor ik op het scherm niet kon zien wat de huidige inhoud van de (vloeistof-)flacons is maar ook dat werkt nu. Dank allemaal, vooral Koepel!
De adviezen van Koepel heb ik alvast opgevolgd. Er bleek ook nog een fout te zijn waardoor ik op het scherm niet kon zien wat de huidige inhoud van de (vloeistof-)flacons is maar ook dat werkt nu. Dank allemaal, vooral Koepel!
20 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten