Structuur van arduino programma
30 berichten
• Pagina 2 van 3 • 1, 2, 3
Re: Structuur van arduino programma
Van astrofrostbyte kreeg ik onderstaand stuk code om een potmeter af te handelen.
Ik loop tegen problemen aan om de potmeter vervolgens in de void loop() te gebruiken.
Mjn schakeling is in orde en werkt als ik bijvoorbeeld het volgende probeer
Maar met de onderstaande opzet lukt het mij niet.
Mijn vraag is dus hoe ik in de loop de potmeter kan lezen?
Groet
René
Ik loop tegen problemen aan om de potmeter vervolgens in de void loop() te gebruiken.
Mjn schakeling is in orde en werkt als ik bijvoorbeeld het volgende probeer
- Code: Alles selecteren
int potPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int val = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
}
void loop() {
val = analogRead(potPin); // read the value from the sensor
digitalWrite(ledPin, HIGH); // turn the ledPin on
delay(val); // stop the program for some time
digitalWrite(ledPin, LOW); // turn the ledPin off
delay(val); // stop the program for some time
}
Maar met de onderstaande opzet lukt het mij niet.
- Code: Alles selecteren
struct Sensor_type {
unsigned int Position;
unsigned int RawValue;
unsigned int OldValue;
boolean changed;
boolean valid;
};
Sensor_type Potmeter;
//-----------------------------------------------------------------
int Process_Potmeter() {
Potmeter.RawValue = analogRead(A0); // read analog channel potmeter
if( Potmeter.RawValue > 500) // limit signal
Potmeter.RawValue=500;
// Scale signal, store result in global Variable
Potmeter.Position = 2 * Potmeter.RawValue + 20 ;
if (Potmeter.OldValue != Potmeter.RawValue)
Potmeter.changed = false;
Potmeter.valid = true; // set flag signal is valid and updated
}//Process_Potmeter
Mijn vraag is dus hoe ik in de loop de potmeter kan lezen?
Groet
René
Advertisement
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: Structuur van arduino programma
Ik denk dat je op zoek bent naar de functies in de standaard arduino EEPROM library http://arduino.cc/en/Reference/EEPROM
Hiermee kan je supersimpel bytes wegschrijven en teruglezen uit nonvolotile EEprom geheugen.
Na een tijdje zal je meer willen dan een paar bytes, en dan kan het handig zijn om al de gegevens die bewaard moeten worden in een 'structure' op te nemen, een structure heeft het voordeel dat je verschillende datatypes(int,string,float,...) lekker kan samenvoegen onder één referentie(pointer).
Dan is het makkelijker om een functie te hebben die een blok data wegschrijft en een blok data kan lezen uit EEprom.
Dat geeft je ook de mogenlijkheid om een extra CRC/Parity met dat blok data weg te schrijven om zeker te zijn dat de data niet 'Corrupted' is.
Meestal is het geval dat je bij het opstarten van het systeem aka in setup() dat blok leest.
Hiermee kan je supersimpel bytes wegschrijven en teruglezen uit nonvolotile EEprom geheugen.
Na een tijdje zal je meer willen dan een paar bytes, en dan kan het handig zijn om al de gegevens die bewaard moeten worden in een 'structure' op te nemen, een structure heeft het voordeel dat je verschillende datatypes(int,string,float,...) lekker kan samenvoegen onder één referentie(pointer).
Dan is het makkelijker om een functie te hebben die een blok data wegschrijft en een blok data kan lezen uit EEprom.
Dat geeft je ook de mogenlijkheid om een extra CRC/Parity met dat blok data weg te schrijven om zeker te zijn dat de data niet 'Corrupted' is.
Meestal is het geval dat je bij het opstarten van het systeem aka in setup() dat blok leest.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: Structuur van arduino programma
Er staat simpel hoe data te lezen en te schrijven. Maaarrr, het ene PROM is het andere niet. Is die EEPROM aan 'slijtage' onderhevig? Of kan je daar onbeperkt gebruik van maken? Bijvoorbeeld: bij mijn nog steeds in concept in mijn hoofd bestaande brandstofmeter, kan ik iedere 10 seconden de verbruikswaarden wegschrijven om een stroomstoring te overleven, of kan ik dan meter een SD-card gebruiken.
Groet, Kare
Edit: excuus, te snel gereageerd. Ik had de functiebeschrijvingen nog niet goed gelezen. Bij de write staat een Note:
An EEPROM write takes 3.3 ms to complete. The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.
Groet, Kare
Edit: excuus, te snel gereageerd. Ik had de functiebeschrijvingen nog niet goed gelezen. Bij de write staat een Note:
An EEPROM write takes 3.3 ms to complete. The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.
If you think education is expensive, try ignorance! (Derek Bok)
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: Structuur van arduino programma
Ja die slijtage valt wel mee gelukkig tegenwoordig, als je het narekend hoef je je er bijna geen zorgen meer om maken, zie vaak ook al 1M cycles in sommige EEproms.
Die opmerking om een CRC bij je blok mee te programeren is wel een oude truuk ter controle van 'versleten' bitjes.
Die opmerking om een CRC bij je blok mee te programeren is wel een oude truuk ter controle van 'versleten' bitjes.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: Structuur van arduino programma
Bedankt voor de reacties.
Ik ga het uitzoeken/doen. Wil een van jullie ook nog eens naar mijn vraag over potmeter lezen kijken( en op reageren:)
Groet
René
Ik ga het uitzoeken/doen. Wil een van jullie ook nog eens naar mijn vraag over potmeter lezen kijken( en op reageren:)
Groet
René
Re: Structuur van arduino programma
Process_Potmeter is een functie van het type int.
Als je die functie wil gebruiken om de waarde terug te geven moet je in de functie een return gebruiken.
Verder is dit statement volgens mij tegengesteld aan wat je bedoelt:
Als de oude waarde ongelijk is aan de nieuwe waarde zou ik verwachten dat Potmeter.changed true wordt. Je zal dan bovendien de huidige waarde als nieuwe 'oude' waarde willen vastleggen. Dat wordt dan:
Als je die functie wil gebruiken om de waarde terug te geven moet je in de functie een return gebruiken.
- Code: Alles selecteren
//-----------------------------------------------------------------
int Process_Potmeter() {
Potmeter.RawValue = analogRead(A0); // read analog channel potmeter
if( Potmeter.RawValue > 500) // limit signal
Potmeter.RawValue=500;
// Scale signal, store result in global Variable
Potmeter.Position = 2 * Potmeter.RawValue + 20 ;
if (Potmeter.OldValue != Potmeter.RawValue)
Potmeter.changed = false;
Potmeter.valid = true; // set flag signal is valid and updated
// geef de gelezen waarde terug
return(Potmeter.RawValue);
}//Process_Potmeter
Verder is dit statement volgens mij tegengesteld aan wat je bedoelt:
- Code: Alles selecteren
if (Potmeter.OldValue != Potmeter.RawValue)
Potmeter.changed = false;
Als de oude waarde ongelijk is aan de nieuwe waarde zou ik verwachten dat Potmeter.changed true wordt. Je zal dan bovendien de huidige waarde als nieuwe 'oude' waarde willen vastleggen. Dat wordt dan:
- Code: Alles selecteren
if (Potmeter.OldValue != Potmeter.RawValue)
{
Potmeter.changed = true;
Potmeter.OldValue = Potmeter.RawValue;
}
else
{
Potmeter.changed = false;
}
If you think education is expensive, try ignorance! (Derek Bok)
Re: Structuur van arduino programma
Karel bedankt maar.... het werkt nog steeds niet.
Ik heb dit:
Het werkt alleen met :
val = analogRead(potPin);
Ik gebruik het hele potmeter proces dan niet en definieer alleen "int potPin = A0;"
Ik ben (weer) even helemaal los grrr Leuk zo'n Arduino maar je moet wel geduld hebben
Ik heb dit:
- Code: Alles selecteren
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 4, 5, 6, 7);
struct Sensor_type {
unsigned int Position;
unsigned int RawValue;
unsigned int OldValue;
boolean changed;
boolean valid;
};
Sensor_type Potmeter;
int val = 0;
// int potPin = A0; // dit werkt indien aktief
void setup() {
// setting voor LCD scherm
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.clear(); // start with a blank screen
lcd.setCursor(3,0); // set cursor to column 0, row 0 (the first row)
lcd.print("r1 "); // change this text to whatever you like. keep it clean.
lcd.setCursor(0,1); // set cursor to column 0, row 1
lcd.print("r2 ");
} // setup
int Process_Potmeter() {
Potmeter.RawValue = analogRead(A0); // read analog channel potmeter
if( Potmeter.RawValue > 500) // limit signal
Potmeter.RawValue=500;
// Scale signal, store result in global Variable
Potmeter.Position = 2 * Potmeter.RawValue + 20 ;
if (Potmeter.OldValue != Potmeter.RawValue)
{
Potmeter.changed = true;
Potmeter.OldValue = Potmeter.RawValue;
}
else
{
Potmeter.changed = false;
}
// Potmeter.valid = true; // set flag signal is valid and updated
return(Potmeter.RawValue);
}//Process_Potmeter
void loop() {
lcd.clear();
val = (Potmeter.RawValue); //Dit werkt niet
// val = analogRead(potPin); //Dit werkt indien aktief
lcd.setCursor(0,0);
lcd.print(val);
lcd.setCursor(5,0);
lcd.print(Potmeter.RawValue); //Dit werkt niet
if (Potmeter.changed) { //Dit werkt niet
lcd.setCursor(0,1);
lcd.print("changed");} // Dit verschijnt nooit wat ik ook met de potmeter doe
else {
lcd.setCursor(0,1);
lcd.print("zelfde"); // Dit staat er altijd
}
delay(600);
}//loop
Het werkt alleen met :
val = analogRead(potPin);
Ik gebruik het hele potmeter proces dan niet en definieer alleen "int potPin = A0;"
Ik ben (weer) even helemaal los grrr Leuk zo'n Arduino maar je moet wel geduld hebben
Re: Structuur van arduino programma
Je roept de hele functie Process_Potmeter niet aan. Probeer ipv
dit eens:
- Code: Alles selecteren
val = (Potmeter.RawValue);
dit eens:
- Code: Alles selecteren
val = Process_Potmeter();
If you think education is expensive, try ignorance! (Derek Bok)
Re: Structuur van arduino programma
Je kan het ook zo doen:
- Code: Alles selecteren
void loop() {
lcd.clear();
Process_Potmeter();
val = Potmeter.RawValue;
etc.
If you think education is expensive, try ignorance! (Derek Bok)
Re: Structuur van arduino programma
Zo weer wat geleerd. Werkt prima zo. Bedankt. Wat mij wel verbaasd is het volgende:
Ik zeg " return(Potmeter.RawValue);"
en kan vervolgens ook de andere waarden uitlezen zoals Potmeter.changed en bijvoorbeeld Potmeter.Position
Ik verwachtte dat alleen Potmeter.Rawvalue dan beschikbaar kwam.
Op naar de volgende uitdaging: EEPROM lezen en schrijven binnen void loop()
Ik zeg " return(Potmeter.RawValue);"
en kan vervolgens ook de andere waarden uitlezen zoals Potmeter.changed en bijvoorbeeld Potmeter.Position
Ik verwachtte dat alleen Potmeter.Rawvalue dan beschikbaar kwam.
Op naar de volgende uitdaging: EEPROM lezen en schrijven binnen void loop()
30 berichten
• Pagina 2 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: baculeciki, PatrickAbomi en 42 gasten