Wie kan me het duwtje in de juiste richting geven

IDE gerelateerde berichten
Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 07 Feb 2016, 11:31

wat ben nou toch allemaal aan het doen man.
wel een beetje consistent werken.

druk ook eens op CTRL T dan wordt het netjes uitgelijnd en zie je beter wat er wel en niet binnen de IF valt.

cpp code
#include<LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// wil je plclib nou wel/niet gebruiken?
// hier staat het niet in.

int relais1 = 10;
int relais2 = 11; // the number of the LED pin
int relais3 = 12;
// dit kan niet het is boolean

bool merker1;
boolean merker2;
bool merker3;
// gebruik hier floats dan kun je de echte spanning invullen ipv een raar integer.

unsigned int spanning_bovengrens = 272; // 14 Volt= 280
unsigned int spanning_ondergrens = 220; // 11 Volt= 197
unsigned int spanning_startgrens = 240; // 12 Volt= 224
unsigned int spanning_stopgrens = 230; // 12 Volt= 224
unsigned long Timer1;
unsigned long Timer2;

float input_voltage = 0.0;
float temp = 0.0;
float r1 = 100000.0;
float r2 = 10060.0;

void setup()
{

pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
//onderstaand gewoon weghalen is de oplossing
pinMode(merker1, OUTPUT); // dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken
pinMode(merker2, OUTPUT); // dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken
pinMode(merker3, OUTPUT);// dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken


Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
lcd.print("ACCU VOLTMETER");
}
void loop() {
//Conversion formula for voltage
int analog_value = analogRead(A0);
temp = (analog_value * 5.0) / 1024.0;
input_voltage = temp / (r2 / (r1 + r2)); //dat is dus ongeveer 50 Volt

if (input_voltage < 0.1)
{
input_voltage = 0.0;
}
Serial.print("v= ");
Serial.println(input_voltage);
Serial.print ("analog_value = ");
Serial.println (analog_value);
lcd.setCursor(0, 1);
lcd.print("Spanning=");
lcd.print(input_voltage);
delay(300);

{
if (analog_value < spanning_startgrens) {
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
Timer1 = millis();

} else {
digitalWrite(relais2, LOW);
}

if (millis() - Timer1 >= 2000 ) {
digitalWrite(relais3, LOW);
}

if (analog_value > spanning_bovengrens) {
digitalWrite(merker1, HIGH ); // een merker heeft geen pin nummer en dus hoort hier merker1=true;
} else {
digitalWrite(merker1, LOW); // hetzelfde

//if (millis() - Timer2 >= 7000 ) {
//digitalWrite(relais1, LOW);
}
{
if (merker1 == HIGH) // een merker is een boolean en dus false / true
digitalWrite(relais1, HIGH);
else
digitalWrite(relais1, LOW);
}
}
}
paul deelen
shooter@home.nl

Advertisement

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 07 Feb 2016, 13:57

Hoi Paul we komen in de buurt, dan zie je maar dat de aanhouder gaat winnen.
de serial monitor is het probleem wat jij ook aangeeft.

pinMode(relais3, OUTPUT);
//onderstaand gewoon weghalen is de oplossing Als ik die weghaal werken de merkers niet meer
pinMode(merker1, OUTPUT); // dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken
pinMode(merker2, OUTPUT); // dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken
pinMode(merker3, OUTPUT);// dus pin (0) is een output , maar dat is ook de Serial pin dus nadenken


Serial.begin(9600); // opens serial port, sets data rate to 9600 bps Zet ik deze uit door er // voor te zetten dan werkt het wel
lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
lcd.print("ACCU VOLTMETER")

Kan ik de serieel monitor dan eigenlijk niet gebruiken of zijn er wel truukjes voor?.

Ik kreeg ook een opmerking over die accolades, ja daar ben ik ook nog niet helemaal in thuis begrijp ik.
Groet,
Norbert

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 07 Feb 2016, 21:05

een merker is geen uitgang ook niet in PLC land dus pinmode uitzetten en lezen wat ik een stukje verder heb geschreven.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 07 Feb 2016, 22:57

Plaat ik dat niet in de setup bij de pinmode dan werkt het niet helaas.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 08 Feb 2016, 10:52

zet hier weer je hele programma neer van top tot teen, want volgens mij heb je de helft niet verbeterd.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 10 Feb 2016, 23:55

Hallo Paul,

Als ik de pinmode merkers uit de setup haal werkt het echt niet hoor.
Hier is de gehele ( eindelijk ) werkende code.

// some globals
const int buttonPin1 = 6;
const int buttonPin = 7;
const int ledPin0 = 52;
const int ledPin1 = 50;
unsigned long Timer;
unsigned long Timer1;

void setup() {
pinMode(ledPin0, OUTPUT);
pinMode(ledPin1, OUTPUT);

pinMode(buttonPin, INPUT);
pinMode(buttonPin1, INPUT);
// Timer afval vertraagd
}
void loop() {
// Timer afval vertraagd
if (digitalRead(buttonPin) == HIGH) {
Timer = millis();
digitalWrite(ledPin0, HIGH);
}

if (millis()-Timer >= 3000 ) { // ingestelde tijd
digitalWrite(ledPin0, LOW); }
// Einde Timer afval vertraagd


// Timer opkom vertraagd
if (digitalRead(buttonPin1) == LOW) {
Timer1 = millis();
digitalWrite(ledPin1, LOW);
}


if (millis()-Timer1 >= 2000 ) {// ingestelde tijd
digitalWrite(ledPin1, HIGH);
// Einde Timer opkom vertraagd
}

}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 11 Feb 2016, 12:18

en hier zie ik dan weer geen merkers.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 11 Feb 2016, 19:55

Klopt helemaal.
Het was weer laat en dan ga je fouten maken. Hieronder is het programma.

Dus als ik dit weg haal pinMode(M_accu1, OUTPUT); dan werkt het niet meer.
Ben benieuwd hoe het wel moet.

#include<LiquidCrystal.h>
//spanning op display (v0) MOET 0.8 v ZIJN
LiquidCrystal lcd(52, 53, 48, 49, 50, 51);

const int relais1 = 22;
const int relais2 = 23; // the number of the LED pin
const int relais3 = 24; // actief tussen onder en bovengrens
const int ingang1 = 2;
const int ingang2 = 3;
const int ingang3 = 4;
boolean M_accu1;
boolean M_accu2;
boolean M_accu3;
boolean M_accu4;
boolean M_accu5;
boolean M_accu6;

unsigned int spanning_bovengrens = 272; // 14 Volt= 280
unsigned int spanning_ondergrens = 220; // 11 Volt= 197
unsigned int spanning_startgrens = 240; // 12 Volt= 224
unsigned int spanning_stopgrens = 230; // 12 Volt= 224
unsigned long Timer1;
unsigned long Timer2;
unsigned long Timer3;

float input_voltage = 0.0;
float temp = 0.0;
float r1 = 100000.0;
float r2 = 10060.0;


void setup() {
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(ingang1, INPUT);
pinMode(ingang2, INPUT);
pinMode(ingang3, INPUT);
pinMode(M_accu1, OUTPUT);
pinMode(M_accu2, OUTPUT);
pinMode(M_accu3, OUTPUT);
pinMode(M_accu4, OUTPUT);
pinMode(M_accu5, OUTPUT);
pinMode(M_accu6, OUTPUT);

// Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
// Maar als deze aanstaat doen de merkers het niet.
//lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
//lcd.print("DIGITAL VOLTMETER");

}
void loop() {
int analog_value = analogRead(A0);
temp = (analog_value * 5.0) / 1024.0;
input_voltage = temp / (r2 / (r1 + r2));

if (input_voltage < 0.1)
{
input_voltage = 0.0;
}
// Serial.print("v= ");
// Serial.println(input_voltage);
// Serial.print ("analog_value = ");
// Serial.println (analog_value);

{
lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
if (digitalRead(M_accu1) == true) {
lcd.print("Laden");
}
else {
lcd.print("Ontladen ");
}
lcd.setCursor(0, 1);
lcd.print("Spanning=");
lcd.print(input_voltage);
delay(300);

if (analog_value > spanning_startgrens)
{
digitalWrite(M_accu1, HIGH);
}
if (analog_value < spanning_stopgrens)
{
digitalWrite(M_accu1, LOW);
}
if (digitalRead(M_accu1) == HIGH)
{
digitalWrite(relais1, true );
}
else {
digitalWrite(relais1, false);
} //schakeld relais 1 bij start en stopgrens


if (digitalRead(M_accu1) == LOW)
Timer1 = millis();
{ digitalWrite(M_accu2, LOW);
}
if (millis() - Timer1 >= 3000 ) {
digitalWrite(M_accu2, HIGH);
}

if (digitalRead(M_accu2) == HIGH)
Timer3 = millis();
{ digitalWrite(M_accu2, HIGH);
}
if (millis() - Timer3 >= 4000 ) {
digitalWrite(M_accu2, LOW);
}

if (digitalRead(M_accu2) == HIGH) {
digitalWrite(relais2, true );
}
else {
digitalWrite(relais2, false);
} // na ingestelde tijd komt K2 bij

if (analog_value <= spanning_bovengrens && analog_value >= spanning_ondergrens) {
Timer2 = millis();
digitalWrite(M_accu3, HIGH );
}
if (millis() - Timer2 >= 4000 ) {
digitalWrite(M_accu3, LOW );
}

if (digitalRead(M_accu3) == true)
{ digitalWrite(relais3, true );
}
else {
digitalWrite(relais3, false);

}
}
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 11 Feb 2016, 20:53

Norbert schreef:cpp code
#include<LiquidCrystal.h>
//spanning op display (v0) MOET 0.8 v ZIJN
LiquidCrystal lcd(52, 53, 48, 49, 50, 51);

const int relais1 = 22;
const int relais2 = 23; // the number of the LED pin
const int relais3 = 24; // actief tussen onder en bovengrens
const int ingang1 = 2;
const int ingang2 = 3;
const int ingang3 = 4;
boolean M_accu1; // dit betekent M_accu1=0 net als alles hierbeneden
boolean M_accu2;
boolean M_accu3;
boolean M_accu4;
boolean M_accu5;
boolean M_accu6;

float spanning_bovengrens = 14.0 //272; // 14 Volt= 280 zie opmerking in vorige makkelijker is hier een float gebruiken met echte voltages
float spanning_ondergrens = 11.9 //220; // 11 Volt= 197
float spanning_startgrens = 13.0 //240; // 12 Volt= 224
float spanning_stopgrens = 12.5 //230; // 12 Volt= 224
unsigned long Timer1;
unsigned long Timer2;
unsigned long Timer3;

float input_voltage = 0.0;
float temp = 0.0;
float r1 = 100000.0;
float r2 = 10060.0;


void setup() {
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(ingang1, INPUT);
pinMode(ingang2, INPUT);
pinMode(ingang3, INPUT);
/* pinMode(M_accu1, OUTPUT); // dit betekent pinMode(0, OUTPUT) en dat is de seriele pin dus tja dat gaat niet samen.
pinMode(M_accu2, OUTPUT);
pinMode(M_accu3, OUTPUT);
pinMode(M_accu4, OUTPUT);
pinMode(M_accu5, OUTPUT);
pinMode(M_accu6, OUTPUT);
*/
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
// Maar als deze aanstaat doen de merkers het niet.
lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
lcd.print("DIGITAL VOLTMETER");

}

void loop() {
int analog_value = analogRead(A0);
temp = (analog_value * 5.0) / 1024.0;
input_voltage = temp / (r2 / (r1 + r2));

if (input_voltage < 0.1)
{
input_voltage = 0.0;
}
Serial.print("v= ");
Serial.println(input_voltage);
Serial.print ("analog_value = ");
Serial.println (analog_value);

{
// lcd.begin(16, 2); //// set up the LCD's number of columns and rows: hoort in setup
// if (digitalRead(M_accu1) == true) { // dit is dus digitalRead(0) en dat is dus seriele pin. dus verkeerde pinnummer. als dit een merker is dan schrijf
if (M_accu1){
lcd.print("Laden");
}
else {
lcd.print("Ontladen ");
}
lcd.setCursor(0, 1);
lcd.print("Spanning=");
lcd.print(input_voltage);
delay(300);

if (analog_value > spanning_startgrens)
{
M_accu1=true;
}
if (analog_value < spanning_stopgrens)
{
M_accu1=false;
}
if (M_accu1) // dit is het overnemen van een merker naar een output
{
digitalWrite(relais1, HIGH );
}
else {
digitalWrite(relais1, false);
} //schakeld relais 1 bij start en stopgrens


if (!M_accu1) {
Timer1 = millis();
M_accu2=false;
}
if (millis() - Timer1 >= 3000 ) {
M_accu2=true;
}

if (M_accu2) { // hier weet ik even niet wat bedoeld is
{ Timer3 = millis();
M_accu2=true;
}
if (millis() - Timer3 >= 4000 ) {
M_accu2=false;
}

if (M_accu2) {
digitalWrite(relais2, HIGH );
}
else {
digitalWrite(relais2, LOW);
} // na ingestelde tijd komt K2 bij
//hier de input gebruiken
if (input_voltage <= spanning_bovengrens && input_voltage >= spanning_ondergrens) {
Timer2 = millis();
M_accu3=true;
}
if (millis() - Timer2 >= 4000 ) {
M_accu3=false );
}

if M_accu3 == true)
{ digitalWrite(relais3, HIGH );
}
else {
digitalWrite(relais3, LOW);

}
}
}


ook ik maak typefouten dus even kijken of het nu wel beter gaat.
kijk naar foutmeldingen en begin bovenaan met verbeteren.
ik zag een stel { verkeerd staan e
en ik heb dat hele merker verhaal nogmaals aangepast.
uitgangen zijn HIGH of LOW
merkers zijn true of false.
kijk op de cheatsheet voor de rest.
jouw grenzen liggen trouwens wel erg dicht bij elkaar een accu moet 13.8 Volt hebben om een beetje te laden.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 14 Feb 2016, 13:53

Hallo Paul,

Het heeft even geduurd maar ik heb het nu voor elkaar.
Ik wil je bedanken voor je tijd en energie, omdat ik veel van je geleerd heb.
Alleen ben ik bang dat dit niet de laatste vraag zal zijn :-).

Ik zet nog even de sketch er bij zodat je kan zien hoe het geworden is.
Als ik het goed begrijp staat alles wat er uitgevoerd moet worden tussen accolades.
Maar hoe komt het dan dat ik er aan het einde 4 overhoudt.

Groet, Norbert
cpp code
#include<LiquidCrystal.h>
//spanning op display (v0) MOET 0.8 v ZIJN
LiquidCrystal lcd(52, 53, 48, 49, 50, 51);

const int relais1 = 22;
const int relais2 = 23;
const int relais3 = 24; // actief tussen onder en bovengrens
const int ingang1 = 2;
const int ingang2 = 3;
const int ingang3 = 4;
boolean M_accu1; // dit betekent M_accu1=0 net als alles hierbeneden
boolean M_accu2;
boolean M_accu3;
boolean M_accu4;
boolean M_accu5;//reserve
boolean M_accu6; //reserve

float spanning_bovengrens = 14.0; //272; // float gebruiken met echte voltages
float spanning_ondergrens = 11.9; //220; // 11 Volt= 197
float spanning_startgrens = 13.0; //240; // 12 Volt= 224
float spanning_stopgrens = 12.5; //230; // 12 Volt= 224
unsigned long Timer1;
unsigned long Timer2;
unsigned long Timer3;

float input_voltage = 0.0;
float temp = 0.0;
float r1 = 100000.0;
float r2 = 10060.0;


void setup() {
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(ingang1, INPUT);
pinMode(ingang2, INPUT);
pinMode(ingang3, INPUT);
}
void loop() {
int analog_value = analogRead(A0);
temp = (analog_value * 5.0) / 1024.0;
input_voltage = temp / (r2 / (r1 + r2));

if (input_voltage < 0.1)
{
input_voltage = 0.0;
}
Serial.print("v= ");
Serial.println(input_voltage);
Serial.print ("analog_value = ");
Serial.println (analog_value);

{
lcd.begin(16, 2); //// set up the LCD's number of columns and rows: hoort in setup
if (digitalRead(M_accu1) == true) { // dit is dus digitalRead(0) en dat is dus seriele pin. dus verkeerde pinnummer. als dit een merker is dan schrijf
if (M_accu1){
lcd.print("Groene energie");
}
else {
lcd.print("Net bedrijf");
}
lcd.setCursor(0, 1);
lcd.print("Spanning=" );
lcd.print(input_voltage);
delay(500);

if (input_voltage > spanning_startgrens)
{
M_accu1=true;
}
if (input_voltage < spanning_startgrens)
{
M_accu1=false;
}
if (M_accu1) // dit is het overnemen van een merker naar een output
{
digitalWrite(relais1, HIGH );
}
else {
digitalWrite(relais1, LOW);
} //schakeld relais 1 bij start en stopgrens


if (!M_accu1){
Timer1 = millis();
M_accu4=false;
}
if (millis() - Timer1 >= 3000 ) {
M_accu4=true;
}

if (M_accu4) { // hier weet ik even niet wat bedoeld is
Timer2 = millis();
M_accu5=true;
}
if (millis() - Timer2 >= 4000 ) {
M_accu5=false;
}

if (M_accu4 || M_accu5) {
digitalWrite(relais2, true );
}
else {
digitalWrite(relais2, false);
} // na ingestelde tijd komt K2 bij
//hier de input gebruiken
if (input_voltage <= spanning_bovengrens && input_voltage >= spanning_ondergrens)
Timer3 = millis();{
M_accu3=true;
}
if (millis() - Timer3 >= 5000 ) {
(M_accu3=false );
}

if (M_accu3 == true)
{ digitalWrite(relais3, HIGH );
}
else {
digitalWrite(relais3, LOW);
}
}
}
}

VorigeVolgende

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten