INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Umwandlung von buffer in long
15.12.2015, 23:11 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2015 23:12 von Wampo.)
Beitrag #1
Umwandlung von buffer in long
Nächster hänger erreicht,

brauche ne 1:1 Umwandlung von einem buffer array in eine unsigned long variable.

WIE BEKOMM ICH AUS DEM STRING DIE DÄMLICHE NUMMER IN NE INTEGER REIN?

Habe schon unendlich viele möglichkeiten ausprobiert.
Code:
ean = (unsigned long)buffer;
ean = *((unsinged long*)buffer);
ean = buffer.toInt();
ean = strtoul (buffer, NULL, 10);
ja und noch viele mehr hab ich probiert
brauchen werde ich es in meinem aktuellen Projekt


Code:
/*
* Blu-Ray-Jukebox mit Roboterbedienung und Barcodescanner, erstellt von Daniel Agocs
* Projekt ins Leben gerufen am 01.12.2015
*
* Update Historie:
* 05.12.15 // V1.0 = Einbindung Barcodescanner, Textfinder und Ethernetverbindung // Spielerei:  WS2812b LED // Sketch 22.698 Bytes
* 11.12.15 // V1.1 = Einbindung SD Karte auf Ethernet Shield, Anpassung an Arduino Mega, Strukturierung
* 12.12.15 // V1.2 = Ethernet.h geändert (Verbindungstimeout von 60 auf 10 sec), SD und Ethernet Startsequence Optimiert
*
* Copyright by Daniel Agocs and iNET BLU-RAY JUKEBOX
*/


// Bibliotheken einbinden
//================================================================================​=
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <ctype.h>
#include <Adafruit_NeoPixel.h>
#include <SdFat.h>
#include <stdlib.h>

// SD Slot Confi          
//================================================================================​=
const int SDselect = 4;
SdFat sd;
SdFile myFile;
char position[] = "position.txt";
char database[] = "database.txt";

int fach, y, z;
char c1, c2, filmname;
unsigned long ean, eancheck;

// NeoPixel Confi          
//================================================================================​=
#define NUMPIX 24
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIX,PIN,NEO_GRB + NEO_KHZ800);

// LCD Confi        
//================================================================================​=
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define ZEICHEN 20
#define ZEILEN 4

// BarcodeScanner Confi        
//================================================================================​=
int clockPin = 3;
int dataPin  = 2;

const int SCAN_ENTER = 0x5a;
const int SCAN_BREAK = 0xf0;
const int QUANTITY_CODES = 50;               // Menge der unterstützten Codes/Characters
const byte SCAN_CODES[QUANTITY_CODES] = {0x70, 0x69, 0x72, 0x7a, 0x6b, 0x73, 0x74, 0x6c, 0x75, 0x7d, 0x1c, 0x32, 0x21, 0x23, 0x24, 0x2b, 0x34, 0x33, 0x43, 0x3b, 0x42, 0x4b, 0x3a, 0x31, 0x44, 0x4d, 0x15, 0x2d, 0x1b, 0x2c, 0x3c, 0x2a, 0x1d, 0x22, 0x35, 0x1a, 0x16, 0x1e, 0x26, 0x25, 0x2e, 0x36, 0x3d, 0x3e, 0x46, 0x45, 0x29, 0x41, 0x49, 0x4a};
const char CHARACTERS[QUANTITY_CODES] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' ', ',', '.', '/'};

// Variablen Confi    
//================================================================================​=
boolean requested;                           // whether you've made a request since connecting
String  currentLine = "";                    // string to hold the text from server
String  titel = "";                          // string to hold the tweet
boolean readingTitel = false;                // if you're currently reading the tweet

int breakActive = 0;                         // boolean toggled by SCAN_BREAK scan code
int clockValue = 0;
byte dataValue;

const int BUFFER_LENG = 20;
char buffer[BUFFER_LENG];                    // serial input buffer
int bufferPos = 0;

int wc = 8;
bool ether = false;

// Ethernet Confi          
//================================================================================​=
// IP Configuration in Windows unter Start --> Suche --> "CMD" --> "ipconfig/all"
byte     mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //MAC Adresse vom EthernetShield
byte      ip[] = { 192, 168, 178, 30};                    //IP  Adresse vom EthernetShield
byte gateway[] = { 192, 168, 178, 1 };                    //Lokale Gateway Adresse
byte  subnet[] = { 255, 255, 255, 0 };                    //Lokale Subnet  Adresse

char server[] = "ofdbgw.home-of-root.de";         // facebook URL, facebook IP: 31.13.93.3
int port = 80;

const int ETHselect = 10;
EthernetClient client;



/*
* function prototypes          // keine ahnung was das für zeuch is

void clearBuffer(char *buf);
void sendData();
int readData();
*/


//================================================================================​=
void setup(){
//================================================================================​=

  pinMode(dataPin, INPUT);    digitalWrite(dataPin, HIGH);                                              
  pinMode(clockPin, INPUT);   digitalWrite(clockPin, HIGH);
  pinMode(ETHselect, OUTPUT);
  pinMode(SDselect, OUTPUT);
  pinMode(53, OUTPUT);                //pin 53 als OUTPUT beim MEGA aktiviert Ethernet SD
  
  currentLine.reserve(256);                                               //keine Ahnung was die zwei machen
  titel.reserve(100);                                                     //übernommen aus anderem Code
  
  SPI.begin();
  lcd.begin(ZEICHEN,ZEILEN);
  Serial.begin(115200); while (!Serial){}
  strip.begin();
  strip.setBrightness(50);

// SD Karten Check und Init
//================================================================================​=
digitalWrite(ETHselect, HIGH);
digitalWrite(SDselect, LOW);
if (!sd.begin(SDselect, SPI_FULL_SPEED)){ // change to SPI_HALF_SPEED for less performance
     lcd.setCursor(0,2);
     lcd.print("SD N/A // DB OFFLINE");
     errorLED();
   }else{
   if (myFile.open("database.txt", O_READ)){
      while (myFile.read() >= 0){
      lcd.setCursor(0,2);
      lcd.print(" SD OK // DB FOUND ");
      myFile.close();
      }
   }else{
     lcd.setCursor(0,2);
     lcd.print("SD OK // NO DB FOUND");
     errorLED();
    }
}
   digitalWrite(ETHselect, LOW);
   digitalWrite(SDselect, HIGH);
      
  
if (!Ethernet.begin(mac)) {
     ether = true;
     lcd.setCursor(0,2);
     lcd.print("   Network failed   ");
     errorLED();
     }

  lcd.setCursor(0,0);
  lcd.print("iNET BLU-RAY JUKEBOX");
  lcd.setCursor(0,1);
  lcd.print("IP: ");
  lcd.print(Ethernet.localIP()) ;

  if (ether == false){
  startup();
  lcd.setCursor(0,3);
  lcd.print(" Scan some BD-Stuff ") ;
  for (int i=0; i<3; i++){
    scanLED();
    delay(100);
  }
  }else{
  lcd.setCursor(0,3);
  lcd.print("!PLS RESTART SYSTEM!");
  while (ether == true){
  resetLED(10);
  }
}
}

//================================================================================​=
void loop(){
//================================================================================​=

if (client.connected()) {
     if (client.available()) {
      char inChar = client.read();                
        currentLine += inChar;
          //Serial.print(inChar);
      // if you get a newline, clear the line:
      if (inChar == '\n')
      {
        currentLine = "";
      }
    
     if (currentLine.endsWith("<titel>")){                  
        
        readingTitel = true;
        titel = "";
      }
      if (readingTitel)
      {
        if (inChar != '<' )
        {
          titel += (char)inChar;
        }
        else
        {
          // if you got a "<" character,
          readingTitel = false;
          client.stop();
          titel.remove(0,1);            // erstes Zeichen vom String Löschen
          titel.remove(20);             // maximal 20 Zeichen darstellen rest löschen
         lcd.setCursor(0,0); lcd.print("Film nach EAN-Code: ");
         lcd.setCursor(0,1); lcd.print("                    ");
         lcd.setCursor(0,1); lcd.print(titel);
         lcd.setCursor(10,3); lcd.print("  Stopped ");
          
  // clear buffer
    clearBuffer(buffer);
    okLED();
    bufferPos = 0;
      }
     }
    }
   }
  else {
scan();
  }
} // end of loop()

void scan(){
  // read data from scanner
  dataValue = readData();
  if (dataValue == SCAN_BREAK) {
     breakActive = 1;
  }

  // check for buffer overflow
  if (bufferPos < BUFFER_LENG) {
    // translate the scan codes to numbers
    // if there is a match, store it to the buffer
    for (int i = 0; i < QUANTITY_CODES; i++) {
      byte temp = SCAN_CODES[i];
      if (temp == dataValue) {
        if (!breakActive == 1) {
          buffer[bufferPos] = CHARACTERS[i];
          bufferPos++;
        } // end of breakActive
      } // end of "valid character"
    } // end of QUANTITY_CODES check
  }

  // code completely scanned
  if (dataValue == SCAN_ENTER) {
      // EAN was scanned
      
      scanLED();
      sendData();
      
     } // end of "SCAN_ENTER" check
  
  // Reset the SCAN_BREAK state if the byte was a normal one
  if (dataValue != SCAN_BREAK) {
    breakActive = 0;
  }
  dataValue = 0;
}
void searcheansd(){
  digitalWrite(ETHselect, HIGH);
  digitalWrite(SDselect, LOW);
  // open input file
  ifstream sdin(database);
  
  while (sdin >> eancheck >> c1 >> fach >> c2 >> filmname) {
   if (ean != 0){
    
  }
  }
  digitalWrite(ETHselect, LOW);
  digitalWrite(SDselect, HIGH);
}
void writesd(){
  digitalWrite(ETHselect, HIGH);
  digitalWrite(SDselect, LOW);
myFile.open("database.txt", O_RDWR | O_CREAT | O_AT_END); //Schreibt auf SD Karte und erstellt neue .txt wenn keine vorhanden
    myFile.print(buffer);
   //myFile.print(",");
   //myFile.print(fach);
    myFile.print(",");
    myFile.println(titel);
myFile.close();
  digitalWrite(ETHselect, LOW);
  digitalWrite(SDselect, HIGH);
}

void sendData(){
    
    client.stop();
    delay(50);
    lcd.setCursor(0,3); lcd.print("Connection to Server");
if (client.connect(server, port)) {
    client.print("GET /searchean/"); client.print(buffer); client.println(" HTTP/1.1");  //Eingabe vom EAN vor der Suche, dann suchen
    client.println("HOST: ofdbgw.home-of-root.de");
    client.println("Connection: close");
    client.println();

    lcd.setCursor(0,2); lcd.print("EAN: "); lcd.print("               "); lcd.setCursor(5,2); lcd.print(buffer); lcd.print("  ");
    lcd.setCursor(10,3); lcd.print("   i.O.   ");
    okLED();
  }
  else {
    // kann keine Verbindung zum Server hergestellt werden:
    lcd.setCursor(10,3); lcd.print(" N.i.O.   ");
    errorLED();
  }
}
void clearBuffer(char *buf){
  int i=0;
  while(buf[i] != 0) {
     buf[i++] = 0;
  } // end of clear buffer loop
}
int readData(){
  byte val = 0;
  // Skip start state and start bit
  while (digitalRead(clockPin));   // Wait for LOW.
  // clock is high when idle
  while (!digitalRead(clockPin));  // Wait for HIGH.
  while (digitalRead(clockPin));  // Wait for LOW.
  for (int offset = 0; offset < 8; offset++) {
    while (digitalRead(clockPin));         // Wait for LOW
    val |= digitalRead(dataPin) << offset; // Add to byte
    while (!digitalRead(clockPin));        // Wait for HIGH
  }
  // Skipping parity and stop bits down here.
  while (digitalRead(clockPin));           // Wait for LOW.
  while (!digitalRead(clockPin));          // Wait for HIGH.
  while (digitalRead(clockPin));           // Wait for LOW.
  while (!digitalRead(clockPin));          // Wait for HIGH.
  return val;
}
void startup(){
  rainbowCycle(2,5);
  }
void scanLED(){
for (int i=0; i < NUMPIX; i++) {
        strip.setPixelColor(i, 0, 0, 255);
      }
      strip.show();
        delay(50);
          clearstrip();
}
void okLED(){
  for (int i=0; i < NUMPIX; i++) {
        strip.setPixelColor(i, 0, 255, 0);
      }
      strip.show();
        delay(50);
          clearstrip();
}        
void errorLED(){
  for (int d=0; d < 4; d++){
     for (int i=0; i < NUMPIX; i++) {
        strip.setPixelColor(i, 255, 0, 0);
      }
      strip.show();
        delay(50);
          clearstrip();
            delay(250);
       }
}
void resetLED(uint8_t wait){
  int t;
  for (int i = 0; i < NUMPIX; i++) {
    strip.setPixelColor(i, wheel(wc));
    t = i - 1;
    if (t < 0) t = strip.numPixels() - 1;
    strip.setPixelColor(t, strip.Color(0, 0, 0));
    strip.show();
    delay(wait);
  }
   wc+=8;
  if (wc>255) wc=0;
}
void rainbowCycle(uint8_t sets, uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*sets; j++) {
    for(i=0; i< NUMPIX; i++) {
      strip.setPixelColor(i, wheel(((i * 256 / NUMPIX) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
void clearstrip(){
  for (int i=0; i < NUMPIX; i++) {
        strip.setPixelColor(i, 0, 0, 0);    //turn Strip to "BLACK"
      }
      strip.show();
}
uint32_t wheel(byte WheelPos){
  if(WheelPos < 85) //RED
  {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
  else if(WheelPos < 170) //BLUE
  {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.12.2015, 23:36
Beitrag #2
RE: Umwandlung von buffer in long
Das sollte doch so funktionieren:

Code:
long ean = atol(buffer);

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.12.2015, 17:31 (Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2015 17:54 von Wampo.)
Beitrag #3
RE: Umwandlung von buffer in long
(15.12.2015 23:36)hotsystems schrieb:  Das sollte doch so funktionieren:

Code:
long ean = atol(buffer);

Nein leider funktioniert keine Variante die ich ausprobiert hab,

Nur als Beispiel:

Gescannter korrekter EAN-Code = 4010324039477
Ausgabe bei long ean = atol(buffer); = -1175414987
Ausgabe bei unsigned long ean = atol(buffer); = 3119552309

ich bekomme bei jeder anderen Variante der umformung auch ne andere Zahl raus.
Dabei lese ich doch aber aus meim Character Array nur zahlen ein.

Nur für den hintergrund der Frage, es geht um nen Vergleich der angestellt werden soll, allerdings kann ich keinen vergleich zwischen einem long und einen String bzw Char durchführen also muss ich beide auf einen nenner bekommen und am besten is es in unsigned long da ich nur positive 13 stellige zahlen von der SD Karte lesen will.
Code:
void crosscheck(){
  digitalWrite(ETHselect, HIGH);
  digitalWrite(SDselect, LOW);
   ifstream sdin(database);
  
  while (sdin >> eancheck >> c1 >> fach >> c2 >> filmname) {
   if (ean != buffer){                        //buffer geht hier nicht wegen dem CHAR
    .....
  }
  }
  digitalWrite(ETHselect, LOW);
  digitalWrite(SDselect, HIGH);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.12.2015, 18:16 (Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2015 18:19 von amithlon.)
Beitrag #4
RE: Umwandlung von buffer in long
Hallo,

(16.12.2015 17:31)Wampo schrieb:  Nein leider funktioniert keine Variante die ich ausprobiert hab,

Nur als Beispiel:

Gescannter korrekter EAN-Code = 4010324039477
Ausgabe bei long ean = atol(buffer); = -1175414987
Ausgabe bei unsigned long ean = atol(buffer); = 3119552309

[/code]

eine EAN ist eine Folge von ASCII-Zeichen aber keine Zahl und wird auch keine.
Spätestens wenn Dir eine EAN begegnet, die mit 0 beginnt, geht nichts mehr.

Ich sehe auch keinen Grund, weshalb man aus einer EAN eine Zahl machen sollte.

Ich würde solch ein Projekt auch nie ohne Datenbank anfangen.
Also irgendwo auf einem RasPi, einem NAS, o.ä. einen Webserver mit PHP und MySQL o.ä. laufen lassen und das Ganze als Client einhängen.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.12.2015, 19:06
Beitrag #5
RE: Umwandlung von buffer in long
(16.12.2015 17:31)Wampo schrieb:  Nein leider funktioniert keine Variante die ich ausprobiert hab,

Nur als Beispiel:

Gescannter korrekter EAN-Code = 4010324039477
Ausgabe bei long ean = atol(buffer); = -1175414987
Ausgabe bei unsigned long ean = atol(buffer); = 3119552309

ich bekomme bei jeder anderen Variante der umformung auch ne andere Zahl raus.
Dabei lese ich doch aber aus meim Character Array nur zahlen ein.

Nur für den hintergrund der Frage, es geht um nen Vergleich der angestellt werden soll, allerdings kann ich keinen vergleich zwischen einem long und einen String bzw Char durchführen also muss ich beide auf einen nenner bekommen und am besten is es in unsigned long da ich nur positive 13 stellige zahlen von der SD Karte lesen will.

Ok, bei mir hat es funktioniert.

Aber warum vergleichst du nicht die Strings miteinander.
Das ist doch sicher auch eine Lösung?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.12.2015, 19:16
Beitrag #6
RE: Umwandlung von buffer in long
Ja, würde ich auch als String verarbeiten.
Die Zahlen sind zu groß, darum kommt es zum Überlauf.

Wieviele Verschiedene EAN müssen denn gespeichert werden?
Das kann schon etwas dauern, bis der Arduino die Speicherkarte durchforstet hat.
Funktioniert aber, denke ich...
Frohes Schaffen

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2015, 09:12 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2015 09:20 von Wampo.)
Beitrag #7
RE: Umwandlung von buffer in long
(16.12.2015 18:16)amithlon schrieb:  eine EAN ist eine Folge von ASCII-Zeichen aber keine Zahl und wird auch keine.
Spätestens wenn Dir eine EAN begegnet, die mit 0 beginnt, geht nichts mehr.

Ich sehe auch keinen Grund, weshalb man aus einer EAN eine Zahl machen sollte.

Ich würde solch ein Projekt auch nie ohne Datenbank anfangen.
Also irgendwo auf einem RasPi, einem NAS, o.ä. einen Webserver mit PHP und MySQL o.ä. laufen lassen und das Ganze als Client einhängen.

Gruß aus Berlin
Michael

Danke Michi aber das ist mir durchaus bekannt das es sich um einen ASCII Code Handelt deswegen wird der EAN so umgewandelt... und in den buffer übergeben.
Code:
if (bufferPos < BUFFER_LENG) {
    for (int i = 0; i < QUANTITY_CODES; i++) {
      byte temp = SCAN_CODES[i];
      if (temp == dataValue) {
        if (!breakActive == 1) {
          buffer[bufferPos] = CHARACTERS[i];
          bufferPos++;
        }
      }
    }
  }

dafür auch das einlesen von

Code:
const byte SCAN_CODES[QUANTITY_CODES] = {0x70, 0x69, 0x72, 0x7a, 0x6b, 0x73, 0x74, 0x6c, 0x75, 0x7d, 0x1c, 0x32, 0x21, 0x23, 0x24, 0x2b, 0x34, 0x33, 0x43, 0x3b, 0x42, 0x4b, 0x3a, 0x31, 0x44, 0x4d, 0x15, 0x2d, 0x1b, 0x2c, 0x3c, 0x2a, 0x1d, 0x22, 0x35, 0x1a, 0x16, 0x1e, 0x26, 0x25, 0x2e, 0x36, 0x3d, 0x3e, 0x46, 0x45, 0x29, 0x41, 0x49, 0x4a};
const char CHARACTERS[QUANTITY_CODES] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' ', ',', '.', '/'};

Der EAN wird deswegen umgewandelt damit ich ihn im Netz abfragen kann
Code:
if (client.connect(server, port)) {
    client.print("GET /searchean/");
    client.print(buffer);
    client.println(" HTTP/1.1");  //Eingabe vom EAN vor der Suche, dann suchen
    client.println("HOST: ofdbgw.home-of-root.de");
    client.println("Connection: close");
    client.println();

    lcd.setCursor(0,2); lcd.print("EAN: "); lcd.print("               ");
    lcd.setCursor(5,2); lcd.print(buffer); lcd.print("  ");
    lcd.setCursor(10,3); lcd.print("   i.O.   ");
    okLED();
  }

Ich verwende den Barcode nur für Blu Ray's...eine 0 im Barcode am Anfang habe ich noch auf keiner Blu Ray gehabt...
Nach dem Abfragen soll dann von der SD Karte verglichen bzw. gesucht werden.

Auf der SD Karte befinden sich zwei Dateien, eine mit
Positionsdaten (FACHNUMMER; Y KOORDINATE; Z KOORDINATE)
und eine mit
Infos zum Film (EAN NUMMER; FACHNUMMER; FILMTITEL)
@ Binatone:
Maxmimale Fachgröße beträgt 400 Fächer ergo 400 Zeilen á 3 INFO's getrennt durch zwei Komma's pro Datei.
Habe mit einem kurzen Lesetest schon ausprobiert wie lange es dauert bis zum fach 400 zu gelangen...das waren unter 50ms. Völlig in ordnung
mit dem Folgenden Code möchte ich in der Datenbank nach gleicher EAN Nummer suchen.
Code:
while (sdin >> eancheck >> c1 >> fach >> c2 >> filmname) {
   if (ean != 0){  //bei 0 gehört mein Vergleichswert eingetragen hier der umgewandelte buffer
   }
}
Da die Daten auf der SD Karte so --> 4010324039477,3,Iron Man 3 hinterlegt sind kann ich nicht mit meinem buffer arbeiten da es zu dieser Fehlermeldung kommt.

exit status 1
ISO C++ forbids comparison between pointer and integer [-fpermissive]


Dies Fehlermeldung heißt für mich ich kann Ganzahlen nicht mit Zeiger vergleichen.


Ich mein Ich bin um jede Hilfe bei diesem Projekt dankbar, es ist auch definitiv auch nur mit C machbar. Hätte als Datenbank auch schon meine Fritz.Box als NAS gedacht aber es geht ja mit ne SD Karte genauso.
Von RasPI, PHP und co. hab ich keinen Dunst....bis ich da die ersten funktionierenden Zeilen schreiben kann is scho wieder n jahr vorbei nur mit lernen.

MfG Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2015, 16:58 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2015 17:00 von amithlon.)
Beitrag #8
RE: Umwandlung von buffer in long
Hallo,

ich habe mir jetzt nicht alles angesehen, die Abfrage bei
http://ofdbgw.home-of-root.de/searchean/4010232053084
will ja nur die EAN haben wie es aussieht.
Was wandelst Du da um? Was kommt von Deinem Scanner?
Normalerweise kommt die EAN und ein Return, je nach Programmierung des Scanners wird manchmal ein * vorangestellt usw.
Mein Handscanner steht sendet die EAN + /r/n.
Ich könnte also die eingelesenen Daten direkt als String in die Abfrage hängen oder eben so abspreichern. Ein trim um den String um das Return zu entfernen und als Array of Char auf die SD-Card schreiben.
Die EAN ist durch ihre feste Länge ja auch beim zurücklesen eines Datensatzes problemlos zu trennen, sind ja die ersten 13 Zeichen des Datensatzes.

Also EAN von Scanner holen, die EAN als String aufbereiten, in die Webabfrage hängen.
Den String um Fachnummer und Titel mit den Trennzeichen erweitern und auf die SD-Card schreiben.

Beim Vergelichen einen Datensatz holen, die ersten 13 Zeichen mit der gesuchten EAN vergleichen und gefunden oder nicht.
Als Trennzeichen im Datensatz würde ich was exotisches nehmen, ~ oder #, sonst mußt Du noch aufpassen, daß die nicht im Titel vorkommen.
Datensatzende eben \r oder \n.
Benutzt Du feste Datensatzlängen? Bei 400 Datensätzen und einer SD-Card würde ich das machen.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Rechnen mit float und unsigned long Rudi 3 307 03.06.2016 12:41
Letzter Beitrag: hotsystems
  Buffer reservieren im SRAM vom DUE arduinopeter 1 301 28.03.2016 10:16
Letzter Beitrag: rkuehle
  SPI Buffer empfangen BennIY 5 718 17.03.2016 13:35
Letzter Beitrag: Bitklopfer
  Umwandlung von Array in String Wampo 2 534 09.12.2015 21:58
Letzter Beitrag: Wampo
  Serial buffer Laura 36 3.857 11.06.2015 15:10
Letzter Beitrag: Thorsten Pferdekämper
  Variablen Typ double, char, long aus ext. EEPROM lesen SternGucker 8 1.538 02.04.2015 08:10
Letzter Beitrag: SternGucker
  Umwandlung von Koordinaten Matthias Wehrli 5 892 22.11.2014 17:32
Letzter Beitrag: itAxel
  long (int_32) bei Mega? HaWe 5 958 15.11.2014 23:10
Letzter Beitrag: tito-t
  string to long itsy 13 1.975 01.11.2014 15:39
Letzter Beitrag: itsy
  Umwandlung Hex in Dez therealnerd 2 1.121 26.03.2014 16:07
Letzter Beitrag: burgi650

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste