Kann Programm nicht hochladen

Möchte ein programm auf einen arduino uno hochladen funktioniert aber nicht

Original oder Clone, musst schon genaueres schreiben. Zeige mal Link zum UNO

Mit einem Gabelstapler?

ein klon von az delivery auf amazon bestellt ca. 10 euro

Der Schrott Händler hat unterschiedliche im Angebot, vermutlich fehlt dir der USB Treiber CH340

Hier der link AZDelivery AZ-ATmega328DIP-Board Mikrocontroller Board ATmega16U2 8-bit Entwicklerboard mit Hauptplatine und USB-Kabel inklusive E-Book! : Amazon.de: Computer & Zubehör

Gibt es denn eine Fehlermeldung? Wenn ja, zeig doch bitte die Fehlermeldung.
Oder woran erkennst du dass das hochladen fehl schlägt?

Wenn es wirklich das aus dem Link ist, brauchst du kein CH340 Treiber. Dort wäre ein ATmega16U2 als USB-UART-Wandler verbaut.

er sagt kompilieren erfolgreich und macht danach nichts mehr

Hast du den richtigen Port ausgewählt?
Drückst du auf dem Pfeil von Links nach Rechts oder auf das Häkchen?

Wird der Uno im Gerätemanager erkannt? Erklingt ein Ton beim verbinden des USB-Kabels mit dem PC/Laptop?
Hast du ein anderes Kabel probiert? (Druckerkabel passen meistens)

Mehr wird nicht angezeigt ?

Auf hochladen gedrückt?

Da kann man schon mal Schrott erhalten.

ja habe das alles gemacht

ja habe ich

Welchen Port hast du gewählt ?
Warum muss man dir alles aus der Nase ziehen ?

Achso....dann ist das ja überhaupt kein Arduino. :wink:

Mit einem anderen USB Kabel versucht?

alles schon versucht habe dann auch versucht das ganze auf einen echten arduino mega 2560 zu installieren dort hat es geklappt aber er hat nichts angezeigt hier ist der code

#include <U8g2lib.h>
#include <RotaryEncoder.h>
#include <Button_SL.hpp>

using ulong = unsigned long int;
using uint = unsigned int;

//
// Gobal constants
//
constexpr byte PIN_IN1 {2};
constexpr byte PIN_IN2 {3};
constexpr byte PIN_BTN {4};
constexpr byte PIN_STEPPER {5};

constexpr byte VALUE_MIN {1};   // Counter minimum value
constexpr byte VALUE_MAX {4};   // Counter maximum value
constexpr byte DIGITS {1};
constexpr byte BUFFERLENGTH {DIGITS + 1};

constexpr uint COMPARTMENTS {8};   // The table should make a 360° turn in eight steps.
// constexpr ulong TIMEUNIT_MS {1000UL * 60 * 60};             // One hour in milliseconds
constexpr ulong TIMEUNIT_MS {1000UL * 60 * 60};                  // Minutes for demonstration purposes
constexpr byte STEPS_PER_REVOLUTION {200};                  // Number of steps for a 360° rotation
constexpr byte STEPS_PER_TIMEPERIOD {200 / COMPARTMENTS};   // Step segments

constexpr byte DISPLAY_MAX_X {128};
constexpr byte DISPLAY_MAX_Y {64};

// Font u8g2_font_logisoso42_tn    // 24 Width 51 Hight
constexpr byte FONT_WIDTH {24};
constexpr byte FONT_HIGHT {51};
constexpr const char *STATUS_STRING[4] {"set", "running", "\0", "\0"};   // Note enum class status

constexpr byte STATUS_X {5};   // Statusstring coordinates
constexpr byte STATUS_Y {5};
constexpr byte TRGL_X {10};   // TRGL = Triangle coordinates
constexpr byte TRGL_Y {20};
constexpr byte TRGL_STEP_X {20};
constexpr byte TRGL_STEP_Y {15};
constexpr byte COUNTER_X {(DISPLAY_MAX_X - FONT_WIDTH * (BUFFERLENGTH - 1)) / 2};   // Column = X Coordinate
constexpr byte COUNTER_Y {(DISPLAY_MAX_Y + FONT_HIGHT) / 2};                        // Row = Y coordinate

constexpr byte PIN_PWR {13};
//
// Data definitions
//
class Interval {
public:
  bool operator()(const ulong duration) {
    if (false == isStarted) { return start(false); }
    return (millis() - timeStamp >= duration) ? start(true) : false;
  }
  void stop() { isStarted = false; }

private:
  bool start(bool state = false) {
    isStarted = !state;   // Set the value to true on the first call
    timeStamp = millis();
    return state;
  }

private:
  bool isStarted {false};   // Flag = true if the first Operator() call has been made.
  ulong timeStamp {0};
};

enum class Status : byte { set, running, start, calc };

//
// Extend the RotaryEncoder class with
// 1. a lower and upper limit for a counter
// 2. a variable step count
//
template <typename T> class RotaryEncoderExt : public RotaryEncoder {
public:
  RotaryEncoderExt(uint8_t pin1, uint8_t pin2, T valMin, T valMax, LatchMode mode = LatchMode::FOUR0)
      : RotaryEncoder {pin1, pin2, mode}, valMin {valMin}, valMax {valMax} {}
  template <typename V> bool query(V &value);
  void setStep(int value) { step = value; }

private:
  const T valMin;   // value minimum
  const T valMax;   // value maximum
  int step {1};
};

template <typename T> template <typename V> bool RotaryEncoderExt<T>::query(V &value) {
  uint8_t flag {true};
  tick();
  switch (getDirection()) {
    case RotaryEncoder::Direction::NOROTATION: flag = false; break;
    case RotaryEncoder::Direction::CLOCKWISE: value = value < valMax ? value + step : valMin; break;
    case RotaryEncoder::Direction::COUNTERCLOCKWISE: value = value > valMin ? value - step : valMax; break;
  }
  return flag;
}

struct StepperData {
  const byte pin;           // Pin to which the stepper driver is connected
  const uint stepsPerRev;   // Number of steps for a 360° rotation
};

struct TurnTableData {
  const StepperData stepper;
  const byte compartments;   // Number of table compartments
  const ulong timeUnit;      //
  byte timeCounter;          // Counter for a time unit (eg. counter * time)
  ulong timePeriod;          // Time between each table rotation
  byte rotationCount;        // Number of rotations performed
  Status runningStatus;      // Status e.g set time (hours) or running (drive stepper)
  Interval wait;             // Object for controlling the waiting cycles
};

//
// Global objects / variables
//
using DisplayType = U8G2_SSD1306_128X64_NONAME_2_HW_I2C;
DisplayType u8g2(U8G2_R0);

using namespace Btn;
ButtonSL button {PIN_BTN};

using Encoder = RotaryEncoderExt<decltype(VALUE_MIN)>;
Encoder encoder {PIN_IN1, PIN_IN2, VALUE_MIN, VALUE_MAX, RotaryEncoder::LatchMode::FOUR3};

//
// Function(s).
//

//////////////////////////////////////////////////////////////////////////////
/// @brief Display Data on the OLED
///
/// @param disp     Display object
/// @param value    Value to be displayed
/// @param status   set or running
//////////////////////////////////////////////////////////////////////////////
void displayData(DisplayType &disp, byte value, Status status) {
  char charBuffer[BUFFERLENGTH];
  snprintf(charBuffer, BUFFERLENGTH, "%d", value);
  disp.firstPage();
  do {
    disp.setFont(u8g2_font_6x10_tr);
    if (status != Status::running) {
      disp.drawStr(STATUS_X, STATUS_Y, STATUS_STRING[static_cast<byte>(Status::set)]);
      disp.drawDisc(TRGL_X + TRGL_STEP_X / 2, TRGL_Y + TRGL_STEP_Y, TRGL_STEP_X / 2);
    } else {
      disp.drawStr(STATUS_X, STATUS_Y, STATUS_STRING[static_cast<byte>(Status::running)]);
      disp.drawTriangle(TRGL_X, TRGL_Y, TRGL_X + TRGL_STEP_X, TRGL_Y + TRGL_STEP_Y, TRGL_X, TRGL_Y + TRGL_STEP_Y * 2);
    }
    disp.setFont(u8g2_font_logisoso42_tn);   // 24 Width 51 Hight
    disp.drawStr(COUNTER_X - 10, COUNTER_Y, charBuffer);
    disp.setFont(u8g2_font_logisoso22_tr);   // 27 Width 33 Hight
    disp.drawStr(COUNTER_X + 20, COUNTER_Y, "hrs.");
  } while (u8g2.nextPage());
}

//////////////////////////////////////////////////////////////////////////////
/// @brief Rotate the stepper
///
/// @param pin      Pin to which the motor is connected
/// @param steps    Number of steps
//////////////////////////////////////////////////////////////////////////////
void spinMotor(byte pin, uint steps) {
  for (byte x = 0; x < steps; ++x) {
    digitalWrite(pin, HIGH);
    delay(20);
    digitalWrite(pin, LOW);
    delay(20);
  }
}

//////////////////////////////////////////////////////////////////////////////
/// @brief State machine
///
/// @param data   Turntable data
/// @param disp   Display object
/// @param enc    Encoder object
/// @param btn    Button for changing the status
//////////////////////////////////////////////////////////////////////////////
void fsm(TurnTableData &data, DisplayType &disp, Encoder &enc, ButtonSL &btn) {
  switch (data.runningStatus) {
    case Status::start:
      data.runningStatus = Status::set;
      displayData(disp, data.timeCounter, data.runningStatus);
      break;
    case Status::set:
      if (enc.query(data.timeCounter)) { displayData(disp, data.timeCounter, data.runningStatus); }
      break;
    case Status::calc:
      data.runningStatus = Status::running;
      data.timePeriod = data.timeCounter * (data.timeUnit / data.compartments);
      displayData(disp, data.timeCounter, data.runningStatus);   // Display running status
      break;
    case Status::running:
      if (data.wait(data.timePeriod)) {
        spinMotor(data.stepper.pin, data.stepper.stepsPerRev / data.compartments);
        ++data.rotationCount;
      }
      // if periodcount = COMPARTMENTS stop running mode (rotation ends)
      if (data.rotationCount == data.compartments) {
        data.runningStatus = Status::set;
        data.rotationCount = 0;
        displayData(disp, data.timeCounter, data.runningStatus);
      }
      break;
    default: break;
  }

  // Press button to change status between set and run
  if (btn.tick() != ButtonState::notPressed) {
    data.runningStatus = (data.runningStatus == Status::set) ? Status::calc : Status::set;
    data.wait.stop();   // Reset timer
    displayData(disp, data.timeCounter, data.runningStatus);
  }
}

//////////////////////////////////////////////////////////////////////////////
/// @brief Initialization part of the main program
///
//////////////////////////////////////////////////////////////////////////////
void setup(void) {
  // Serial.begin(115200);
  u8g2.begin();
  pinMode(PIN_STEPPER, OUTPUT);
  pinMode(PIN_PWR, OUTPUT);
  digitalWrite(PIN_PWR, HIGH);
  button.begin();
  button.releaseOn();
  button.setDebounceTime_ms(100);
}

//////////////////////////////////////////////////////////////////////////////
/// @brief main program
///
//////////////////////////////////////////////////////////////////////////////
void loop() {
  // Stepper Pin, Steps per Rev, Compartment, Time Unit, start value, timeperiod , rotation count, status
  static TurnTableData ttData {
      {PIN_STEPPER, STEPS_PER_REVOLUTION},
      COMPARTMENTS, TIMEUNIT_MS, VALUE_MIN, 0, 0, Status::start
  };
  fsm(ttData, u8g2, encoder, button);
}

Versucht Beispiele für Display testen?

habe keine zum testen