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
Erstes Programmierungsprojekt, LED's und servo
11.09.2019, 14:38 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2019 14:39 von geist4711.)
Beitrag #161
RE: Erstes Programmierungsprojekt, LED's und servo
wieso 2 byte schreiben?
EEPROM.update(0, Servopos[0]); //schreibe Servopos(0)ins EEPROM in zelle 0

ich hatte das so verstanden das mit zb EEPROM.update (speicherzelle, wert) nur der wert(eine zahl zwischen 0 und 180 bei mir) also 1byte, in eine bestimmte zelle (0, ) geschrieben wird, da sehe ich kein zweites byte, das geschrieben wird? was natürlich chaos machen würde...
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.09.2019, 14:48
Beitrag #162
RE: Erstes Programmierungsprojekt, LED's und servo
Da merkt man wieder Mal, dass Du von Deinem Code eigentlich nichts verstanden hast.

Dein Array ist als
Code:
int Servopos[] = {1, 25, 50, 75, 100, 125, 150, 175} ; //array servopositionen
angelegt, d.h. jeder Wert ist 2 Byte lang, ob Du es verstehst oder nicht.

Wenn Deine Werte nie größer als 255 werden kannst Du als Typ auch byte verwenden, da wäre dann jeder Wert 1 Byte groß.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.09.2019, 15:17
Beitrag #163
RE: Erstes Programmierungsprojekt, LED's und servo
achso, dann verwendet 'int' immer 2 byte.
dann is natürlich alles klar....
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.09.2019, 15:28
Beitrag #164
RE: Erstes Programmierungsprojekt, LED's und servo
(11.09.2019 15:17)geist4711 schrieb:  achso, dann verwendet 'int' immer 2 byte.
dann is natürlich alles klar....
Das sind halt die einfachsten Grundkenntnisse, die Dir fehlen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.09.2019, 18:04
Beitrag #165
RE: Erstes Programmierungsprojekt, LED's und servo
(11.09.2019 15:17)geist4711 schrieb:  achso, dann verwendet 'int' immer 2 byte.
dann is natürlich alles klar....

Um die Verwirrung zu komplettieren: "Nicht ganz..."
In C/C++ ist der Typ int nicht immer 2 Byte lang, sondern es hängt vom System ab, ob er 2 Byte oder 4 Byte lang ist (Ich glaube, "int" kann prinzipiell sogar alles >=16Bit sein).

Deshalb verwendet man im Zusammenhang mit Mikrocontrollern gerne die eindeutigen Typen
uint8_t
int16_t
uint16_t
int32_t
uint32_t

in denen die Größe in Bits erkennbar ist.
Diese sind zwar nicht immer verfügbar, während es "int" in jedem C/C++ System gibt. Aber im Bereich Arduino gibt es sie schon - Ich rate dringend zu ihrer Verwendung.
Auch wenn man "char" als Zahlenvariable und nicht für ein alfanumerisches Zeichen verwenden will, ist uint8_t oder int8_t ratsam, da es mehr auf eine Inegerzahl hinweist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.09.2019, 17:27
Beitrag #166
RE: Erstes Programmierungsprojekt, LED's und servo
Hab das speichern usw jetz in gange gebracht und in mein Schaltsketch eingearbeitet.
Etwas umständlich aber es funktioniert genau wie es soll :-)
für interessierte:
Code:
#include <Key.h>                //key lib
#include <Keypad.h>             // keypad lib
#include <EEPROM.h>             //EEPROM lib
#include <Servo.h>              //servolib
#include <Wire.h>               //Wire.h Bibliothek einbinden
#include <LiquidCrystal_I2C.h>  //LiquidCrystal_I2C.h Bibliothek

//tastatur
const byte ROWS = 4;          //4 rows
const byte COLS = 4;          //4 columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {31, 33, 35, 37};      //connect to the row pinouts of the keypad
byte colPins[COLS] = {39, 41, 43, 45};      //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//servo
Servo Schaltservo;                      // servo ist schaltservo
byte Servopos[8] = {1,25,50,75,100,125,150,175,}; //array mit festen gangwerten festlegen
byte Servopos2[8] = {1,25,50,75,100,125,150,175,}; //array2 mit festen gangwerten festlegen

byte Winkelvariable = 0;                 //winkelvariable setzen
byte Servowinkel = 0;                    //servowinkel startinitiieren

//EEPROM
  byte Gang1;
  byte Gang2;
  byte Gang3;
  byte Gang4;
  byte Gang5;
  byte Gang6;
  byte Gang7;
  byte Gang8;
  

LiquidCrystal_I2C lcd(0x23, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Hier wird lcd benannt,
//die Adresse angegeben „0x23“ und die Pinnbelegung durch das I²C Modul angegeben

//taster
int Hochschalten_t = 24;      //taster hochschalten
int Runterschalten_t = 26;    //taster runterschalten

//millis
unsigned long previousMillis ; // Variable zum Speichern des alten Wertes
unsigned long interval ; // Variable für gewünschte Zeitdauer (1sek=1000)
unsigned long previousMillis2 ; // Variable zum Speichern des alten Wertes
unsigned long interval2 ; // Variable für gewünschte Zeitdauer (1sek=1000)
unsigned long previousMillis3 ; // Variable zum Speichern des alten Wertes
unsigned long interval3 ; // Variable für gewünschte Zeitdauer (1sek=1000)
unsigned long previousMillis4 ; // Variable zum Speichern des alten Wertes
unsigned long interval4 ; // Variable für gewünschte Zeitdauer (1sek=1000)
int t4 = 20;              // zeit servo hochfahren
int t5 = 20;              // zeit servo runterfahren
int t6 = 5000;            //zeit spannungsanzeige auslesezeit
int t7 = 200;             //zeit schalten hoch/runter
int t8 = 100; // zeit verzögerung drücken für speichern ins eeprom
int t9 = 100; // zeit verzögerung drücken für lesen ins eeprom

//Gangschaltung
int x = 0 ;  //setzen von 1 und 0 zum umschalten zwischen gangschaltung und gangsetup
byte index ;  //index für gang, welche eingelegt ist

//Akkuspannung
#define VT_PIN A2 //connect withVT
#define AT_PIN A1 //connect with AT
#define ARDUINO_WORK_VOLTAGE 5.0 //workvoltage of arduino


void setup() {
  lcd.begin(20, 4); //Display starten, Größe Display 20 4
  lcd.backlight(); //Beleuchtung Display einschalten

  Schaltservo.attach(7);  // servo auf pin7
  Schaltservo.write(0);   //servoposition 0

  pinMode(Hochschalten_t, INPUT_PULLUP);
  pinMode(Runterschalten_t, INPUT_PULLUP);

  keypad.setHoldTime(50);               // Default is 1000mS
  keypad.setDebounceTime(30);           // Default is 50mS
  
  Serial.begin(115200);  //geschwindigkeit serial angeben

  //EEPROM auslesen und in Servopos einsetzen
  Servopos[0] = EEPROM.read(0); // Wert aus Speicherzelle 0 an 'myservopos 0' geben
  Servopos[1] = EEPROM.read(1); // Wert aus Speicherzelle 1 an 'myservopos 1' geben
  Servopos[2] = EEPROM.read(2); // Wert aus Speicherzelle 2 an 'myservopos 2' geben
  Servopos[3] = EEPROM.read(3); // Wert aus Speicherzelle 3 an 'myservopos 3' geben
  Servopos[4] = EEPROM.read(4); // Wert aus Speicherzelle 4 an 'myservopos 4' geben
  Servopos[5] = EEPROM.read(5); // Wert aus Speicherzelle 5 an 'myservopos 5' geben
  Servopos[6] = EEPROM.read(6); // Wert aus Speicherzelle 6 an 'myservopos 6' geben
  Servopos[7] = EEPROM.read(7); // Wert aus Speicherzelle 7 an 'myservopos 7' geben
}

void loop() {
  char key = keypad.getKey();

  //display initiieren
  lcd.setCursor(0, 0);        //Text beim 1. Zeichen 1. Reihe beginnen
  lcd.println("RBS");         //schreibe RBS



  // C drücken für setup gangschaltung
  if (key == 'C' && x < 1 ) {  //wenn taste 'C' gedrückt und x<1
    x = 1 ;                   //setze x auf 1
  }
  if (key == 'D' && x > 0 ) {  //wenn taste 'D' gedrückt und x>0
    x = 0 ;                    //setze x auf 1
  }

  lcd.setCursor(5, 0);          //Text beim 1. Zeichen 1. Reihe beginnen
  lcd.println("Gang:");       //schreibe Gang
  lcd.setCursor(10, 0);      //Text beim 10. Zeichen 1. Reihe beginnen

  lcd.println(index +1);          //zeige eingelegten gang an (index +1 weil index von 0-7 geht)



//gangschaltung, alles ausser gangschaltung-setup
  if ((x) == 0) {            //wenn x =0 (gangschaltung etc) ausführen


//gangschaltung
//int index = 0 ;  //index auf 0 setzen
  //hochschalten

  if (digitalRead(Hochschalten_t) == LOW && index <7 ) {  //if hochchalten_t und index <= 7
       if (millis() - previousMillis > interval ) {          //millis zählen
        previousMillis = millis() ;                        //millis setzen
        interval = t7 ;                    //AUSzeit      
        ++index;
       }
    Schaltservo.write(Servopos[index]) ; //servopos -arraywert vorgegeben von 'index'- setzt servoposition    
  }

  //runterschalten
  if (digitalRead(Runterschalten_t)  == LOW && index >0 ) {  //if hochchalten_t und index >0
      if (millis() - previousMillis > interval ) {          //millis zählen
        previousMillis = millis() ;                        //millis setzen
        interval = t7 ;                    //AUSzeit      
      --index;
      }
    Schaltservo.write(Servopos[index]) ; //servopos -arraywert vorgegeben von 'index'- setzt servoposition
  }  

//Parkgang einschalten
    if (key == '#') {                     //wenn tastatur-taste '0' gedrueckt
      Servowinkel = Servopos[7];         // Servopos[7] in Servowinkel schreiben
      Schaltservo.write(Servowinkel);     //Schaltservo auf Servoposition[7]
      lcd.setCursor(6, 3);          //Text beim 1. Zeichen 1. Reihe beginnen
      lcd.println("Parkposition");          //schreibe parkposition
    }
  } // ENDE Gangschaltung etc



// gangschaltungeinstellen anfang
  if ((x) == 1) {           //wenn x=1 (einstellprogramm gangschaltung) ausführen

    lcd.setCursor(0, 1); //Text beim 1. Zeichen 1. Reihe beginnen
    lcd.println("Servowinkel:");    //schreibe Servowinkel
    lcd.setCursor(12, 1); //Text beim 12. Zeichen 1. Reihe beginnen
    lcd.println(Servowinkel);       //zeige servowinkel an

    //servo 3° hochfahren
    if (key == 'A' && Servowinkel < 180 ) {           // wenn hochschalten_t gedrückt
      if (millis() - previousMillis3 > interval3 ) {          //millis zählen
        previousMillis3 = millis() ;                        //millis setzen
        interval3 = t4 ;                    //AUSzeit
      }
      Servowinkel = ++Winkelvariable * 3 ;     //winkelvariable in servowinkel schreiben
      Schaltservo.write(Servowinkel);          //servo auf servowinkel fahren
    }


    //servo 3°  runterfahren
    if (key == 'B' && Servowinkel >= 1 ) {              // wenn hochschalten_t gedrückt
      if (millis() - previousMillis3 > interval3 ) {          //millis zählen
        previousMillis3 = millis() ;                       //millis setzen
        interval3 = t5 ;                    //AUSzeit
      }
      Servowinkel = --Winkelvariable * 3 ;       //winkelvariable in servowinkel schreiben
      Schaltservo.write(Servowinkel); //servo auf servowinkel fahren
    }


    //speichern der gänge

    if (key == '1') {              //wenn tastatur-taste '1' gedrückt wird
      Gang1 = Servowinkel;  //nehme wert von 'servowinkel' und trage ein in servopos[-0-]
    }

    if (key == '2') {              //wenn tastatur-taste '2' gedrückt wird
      Gang2 = Servowinkel;  //nehme wert von 'servowinkel' und trage ein in servopos[-1-]
    }

    if (key == '3') {             //wenn tastatur-taste '3' gedrückt wird
      Gang3 = Servowinkel;  //nehme wert von 'servowinkel' und trage ein in servopos[-2-]
    }

    if (key == '4') {             //wenn tastatur-taste '4' gedrückt wird
      Gang4 = Servowinkel; //nehme wert von 'servowinkel' und trage ein in servopos[-3-]
    }

    if (key == '5') {            //wenn tastatur-taste '5' gedrückt wird
      Gang5 = Servowinkel;  //nehme wert von 'servowinkel' und trage ein in servopos[-4-]
    }

    if (key == '6') {            //wenn tastatur-taste '6' gedrückt wird
      Gang6 = Servowinkel; //nehme wert von 'servowinkel' und trage ein in servopos[-5-]
    }

    if (key == '7') {             //wenn tastatur-taste '7' gedrückt wird
      Gang7 = Servowinkel; //nehme wert von 'servowinkel' und trage ein in servopos[-6-]
    }

    if (key == '8') {           //wenn tastatur-taste '8' gedrückt wird
      Gang8 = Servowinkel; //nehme wert von 'servowinkel' und trage ein in servopos[-7-]
    }

  //EEPROM auslesen und in Servopos einsetzen
  if(key == '0') {
              if (millis() - previousMillis > interval ) {          //millis zählen
        previousMillis = millis() ;                        //millis setzen
        interval = t9 ;                    //AUSzeit
            }  
  Gang1 = EEPROM.read(0); // Wert aus Speicherzelle 0 an 'myservopos 0' geben
  Gang2 = EEPROM.read(1); // Wert aus Speicherzelle 1 an 'myservopos 1' geben
  Gang3 = EEPROM.read(2); // Wert aus Speicherzelle 2 an 'myservopos 2' geben
  Gang4 = EEPROM.read(3); // Wert aus Speicherzelle 3 an 'myservopos 3' geben
  Gang5 = EEPROM.read(4); // Wert aus Speicherzelle 4 an 'myservopos 4' geben
  Gang6 = EEPROM.read(5); // Wert aus Speicherzelle 5 an 'myservopos 5' geben
  Gang7 = EEPROM.read(6); // Wert aus Speicherzelle 6 an 'myservopos 6' geben
  Gang8 = EEPROM.read(7); // Wert aus Speicherzelle 7 an 'myservopos 7' geben
    Serial.println("PROMgelesen");
Servopos[0] = Gang1 ;
Servopos[1] = Gang2 ;
Servopos[2] = Gang3 ;
Servopos[3] = Gang4 ;
Servopos[4] = Gang5 ;
Servopos[5] = Gang6 ;
Servopos[6] = Gang7 ;
Servopos[7] = Gang8 ;
  }


    // * für abspeichern ins EEPROM
    if (key == '*') { // wenn * gedrückt wird
       if (millis() - previousMillis > interval ) {          //millis zählen
        previousMillis = millis() ;                        //millis setzen
        interval = t8 ; //AUSzeit        
            }
     EEPROM.put(0, Gang1); //schreibe Gang1 ins EEPROM in zelle 0
     EEPROM.put(1, Gang2); //schreibe Gang2 ins EEPROM in zelle 1
     EEPROM.put(2, Gang3); //schreibe Gang3 ins EEPROM in zelle 2
     EEPROM.put(3, Gang4); //schreibe Gang4 ins EEPROM in zelle 3
     EEPROM.put(4, Gang5); //schreibe Gang5 ins EEPROM in zelle 4
     EEPROM.put(5, Gang6); //schreibe Gang6 ins EEPROM in zelle 5
     EEPROM.put(6, Gang7); //schreibe Gang7 ins EEPROM in zelle 6
     EEPROM.put(7, Gang8); //schreibe Gang8 ins EEPROM in zelle 7
        Serial.println("PROMgeschrieben");  
    }
    
  }    // ENDE gangschaltungs-setup


lcd.setCursor(1, 2); //Text beim 1. Zeichen 3.Reihe beginnen

// alle werte des array 'Servopos' auf lcd anzeigen
if(key == '9'){
      byte len = sizeof(Servopos) / sizeof(Servopos[0]);
      for (byte i = 0; i < len; i++) {
      lcd.println(Servopos[i]) ;
      }
}
/*
//alle gedrückten tasten ausgabe auf seriell monitor
          if (key != NO_KEY) {
        Serial.println(key);
      }

  */
  

}

jetzt gehts an 'IR-Bewegungsmelder' und 'Beschleunigungs-Sensor'
für eine Alarmanlage und danach 'RFID-leser' als Freigabe-Abfrage, quasie elektronisches Schloss....
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Wink Solar Roboter- Servo dreht nach Stopp nicht weiter Stagneth.Alexander 37 2.039 20.08.2019 14:15
Letzter Beitrag: geist4711
  MPU-6050 und Servo Gian-Luca 0 581 27.03.2019 20:48
Letzter Beitrag: Gian-Luca
  Stepper und Servo ? Lanzet3 31 2.105 28.12.2018 15:09
Letzter Beitrag: MicroBahner
  PHP WINDOWS XAMPP ARDUINO UNO SERVO steuern über Serielle Verbindung tr3 1 700 21.08.2018 21:59
Letzter Beitrag: georg01
Big Grin Brauche dringend Hilfe mit dem Programmieren von Servo und Taster holzchistli 4 1.587 19.06.2018 16:45
Letzter Beitrag: hotsystems
Question Servo.h Hilgi 10 2.868 07.05.2018 18:57
Letzter Beitrag: BanditBandeh
  Einmalige Servo Motor Ausführung BanditBandeh 29 6.087 12.04.2018 12:04
Letzter Beitrag: MicroBahner
  Servo langsamer drehen und auf position lassen Thor Wallhall 13 6.378 12.04.2018 11:42
Letzter Beitrag: BanditBandeh
  Arduino DUE mit Adafruit 16 Kanal Servo-Driver juergen001 3 1.291 09.04.2018 10:51
Letzter Beitrag: juergen001
  Servo Steuerung mit PCA 9685 (Adressiernung) bernhard66 3 1.564 10.03.2018 11:06
Letzter Beitrag: juergen001

Gehe zu:


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