Reagera inom + - ett värde - Arduino UNO

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

Hej!

Jag har ett nummer som hämtas från minnet som en motor reagerar på. :humm:
Men jag skulle vilja att den reagerar på t.ex. 10+ och 10- från värdet den "ser".
Om jag vet värdet och det är fast kan jag skriva t.ex. = if (PulseCount < 320 && PulseCount > 280) {
Men i detta fall nedan så kan värdet den hämtar från minnet variera :doh:
Värdet kan vara t.ex. 854 eller -345.

Inom denna :

Kod: Markera allt

    {  
          if (PulseCount == EEPROM.get(0, eeAddress)) {
Hela koden ser ut såhär

Kod: Markera allt

     {  
          if (PulseCount == EEPROM.get(0, eeAddress)) {
          digitalWrite(controlPin1, LOW);
          digitalWrite(controlPin2, LOW);
          lcd.setCursor(0, 1);
          lcd.print("ProgramStop");
          Serial.println("Programmed stop");
          delay(1500);
        }
Senast redigerad av fosfor 17 april 2018, 09:52:39, redigerad totalt 1 gång.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av johano »

Med reservation för att jag inte vet vad EEPROM.get() returnerar (antar int här):

Kod: Markera allt

int setValue = EEPROM.get(0, eeAddress);

 if (PulseCount >= setValue-10 && PulseCount <= setValue+10 )
{
...
}

/j
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

Oj glömde skriva det.
Den returnerar bara ett nummer.
Kan vara t.ex. 854 eller -345.
Tack! Ska testa.
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av hawkan »

Du använder EEPROM.get fel.
Såhär ska det vara

Kod: Markera allt

  //Get the float data from the EEPROM at position 'eeAddress'
  EEPROM.get( eeAddress, f );
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

Fungerar tyvärr inte.
Den verkar inte hämta positionen från minnet, så det är nåt knas där i koden.
Jag la till INT kodsnutten också uppe bland de andra intarna

Kod: Markera allt

         

// Gamla koden, kan spara position
// if (PulseCount == EEPROM.get(0, eeAddress)) 

// Nya, kan inte spara position
if (PulseCount >= setValue-10 && PulseCount <= setValue+10 )

Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av hawkan »

Såhär borde det vara för att spara ett värde och sedan läsa det:

Kod: Markera allt

int iii=100;
int jjj=-1;
EEPROM.put(0, iii); // Spara värdet av iii som är 100 i position 0
EEPROM.get(0, jjj); // Läs värdet från EEprom position 0 och tilldela variabeln jjj. Ska bli 100
Jag rekommenderar att du läser in dej på https://www.arduino.cc/en/Reference/EEPROMGet och https://www.arduino.cc/en/Reference/EEPROMPut

Man får också ut jjj från EEPROM.get, så det kanske fungerar ändå. Det ser fel ut.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av johano »

Det funkar nog ändå, det som gör att det ser fel ut är att variabeln heter "eeAddress"...
Den borde kanske kallats "eeValue" istället.

/j
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av hawkan »

Ja det är rätt. Orginalet fungerar.

Kod: Markera allt

PulseCount = EEPROM.get(0, PulseCount);
hade jag gillat bättre. Men du kan bortse från min kommentar om du vill. Kul att se att du är igång iaf.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

Hoy!

Sitter nu och försöker få den här raden att lira....

Kod: Markera allt

          if (PulseCount == EEPROM.get(0, eeAddress) + (setValue-10 && PulseCount <= setValue+10)); 

Den här nedan fungerar ju, men har ingen funktion för plusminus värdet som hämtas från minnet.

Kod: Markera allt

if (PulseCount == EEPROM.get(0, eeAddress))
Så om den hämtar t.ex. position 845, så får inte motorn gå för snabbt, för då swishar den bara förbi och hinner inte reagera.
Ställer jag ner motorn ordentligt i hastighet, då hinner den stanna. Så skulle verkligen behöva en plus minus funktion :-/
Jag filar vidare, kom gärna med förslag.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av johano »

1) Läs ut värdet från EEPROM till en variabel.
2) Jämför PulseCount mot denna variabel, först med variabel+10 och sen mot variabel-10

Anledningen till att du vill ta ut värdet i en variabel är att du behöver referera till den två gånger (den ena +10 och sen med -10).
Och du vill ju inte behöva anropa EEPROM.get() två gånger på raken.

Det hade annars sett ut såhär. Onödigt och fult!

Kod: Markera allt

if( PulseCount >= EEPROM.get(0, eeAddress)-10 && PulseCount <= EEPROM.get(0, eeAddress)+10)
{
}
Du vill istället göra:

Kod: Markera allt

variabel = EEPROM.get(0, variabel);

if(PulseCount >= variabel-10 && PulseCount <= variabel+10)
{
...
}
Edit:
naturligtvis ska "variabel" ovan typas med den typ som stoppades in i EEPROM:et, förmodligen "int"

/j
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

Hmmm.... Det som stoppas in i EEPROM är bara ett nummer.
Det kan vara allt ifrån -3245 till 565 eller så.
Skrivs det in som INT endå i koden?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av johano »

Ja det vet ju bara du.
Vad skickar du till EEPROM.put() ?
Samma datatyp ska användas när du gör EEPROM.get()

/K
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av Mr Andersson »

Personligen hade jag gjort en separat funktion för värdetestet så det blir mer lättläst än en lång if-stats med magiska nummer. Speciellt om du senare vill göra fler test så slipper du kodduplicering.

Kod: Markera allt

const int PULSECOUNT_TOLERANCE = 10;
...
bool IsInRange(int current, int target, int tolerance)
{
	if (current >= target - tolerance && current <= target + tolerance)
		return true;
	return false;
}
...
EEPROM.get(0, eeAddress); // Ta en ordentlig fundering på om det finns ett mer passande namn än eeAddress.
if(IsInRange(PulseCount, eeAddress, PULSECOUNT_TOLERANCE))
{
  GörNånting(TM);
}
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av SeniorLemuren »

Om du hade offrat några minuter på att läsa mitt inlägg i den andra tråden där du frågar efter samma problemlösning så hade du varit hemma nu. Försök att hålla dig till samma tråd och inte hoppa från den ena tråden till en andra med precis samma frågor.
Det enda du behöver göra är att ändra if-satsen i den sista programsnutten till att ge även ett minusvärde i första if-satsen.

Kod: Markera allt

#include <EEPROM.h>

int eepromValue ;
int pulseCount  = 340;  
  
void setup(){ 
  int eeAddress = 0; //EEPROM address att starta läsning från
  Serial.begin( 9600 );  
  EEPROM.get( eeAddress,  eepromValue ); 
  Serial.print( "Låga gränsvärdet från eeprom: " );
  Serial.println( eepromValue);   
  Serial.print( "PulseCount: " );  
  Serial.println( pulseCount );
 // ändra if-satsen till lämpliga värden (xx)
  if(pulseCount >=  eepromValue -xx  && pulseCount <=  eepromValue +xx){
  Serial.println("Pulsecount inom intervall");
    }else{
      Serial.println("Pulsecount utanför intervall");
  }
}
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Reagera inom + - ett värde - Arduino UNO

Inlägg av fosfor »

SeniorLemuren:
Men det är ju två separata frågor jag vill ha svar på?
I denna tråd handlar det om hur den ska reagera på siffran den hämtar, inom vilket intervall så att säga.
Den förra tråden är ju löst, där frågan var Hur jag ska hämta siffran från minnet.
Två olika frågor, därav att jag skapat två olika trådar alltså.
Jag uppskattar dina svar, och kan förstå din eventuella frustration över att jag inte riktigt förstår dom. Ska läsa om din text.
Jag är iaf själv lite frustrerad av att jag inte förstår alla svar jag får, sakta men osäkert så börjar jag hänga med i vissa uttryck och slang.

Vill återigen poängtera för alla här att jag är helt nybörjare på detta. Har aldrig pysslat med programmering förr. :(
Jag har försökt läsa på, men det kommer tyvärr ta ett tag innan det fastnar. Jag får hela tiden sitta och titta tillbaka på vad vissa funktioner gör och hur de fungerar, väldigt mycket trial n error. Det blir så mycket ibland att jag blir helt snurrig :shock: men det går iaf sakta framåt.
Ibland trillar vissa lösningar t.o.m. in när jag inte ens tänker på det.
Om någon har något tips på hur man underlättar detta, inlärningen, för sig själv så mottages de gärna.
Skriv svar