Arduino Yun - analogWrite - Compile Error

Hallo liebe Arduino Comunity,

ich habe ein Problem mit meinem Script und leider keine Ahnung woran mein Fehler liegt...

Wenn ich eine LED gedimmt per analogWrite schalten möchte bekomme ich permanent einen Fehler:

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\libraries\Bridge\src\Bridge.h: In member function 'transfer':

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\libraries\Bridge\src\Bridge.h:56:5: internal compiler error: Segmentation fault

     }

     ^

Please submit a full bug report,

with preprocessed source if appropriate.

See <http://gcc.gnu.org/bugs.html> for instructions.

lto-wrapper.exe: fatal error: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\hardware\tools\avr/bin/avr-gcc returned 1 exit status

compilation terminated.

c:/program files/windowsapps/arduinollc.arduinoide_1.8.15.0_x86__mdqgnx93n4wtt/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed

collect2.exe: error: ld returned 1 exit status

exit status 1
Fehler beim Kompilieren für das Board Arduino Yún.

Der Fehler tritt allerdings nur beim Verwenden von analogWrite auf und auch nur im Kontext meines Scripts (in einem leeren Script oder gleichem Script mit sonst leerer Setup-Funktion gehts...).

Der Pin wird nicht doppelt verwendet...

Ich möchte die LED "ledPower" an Pin 13 gerne mit analogWrite statt digitalWrite schalten. Aber auch alternativ der Versuch Pin 3 mit analogWrite anzusteuern ergibt den Fehler...
Sprich ich würde gerne

analogWrite(3, 100);

in das Script bzw. die Setup Funktion einfügen...

(es ist ein Script für eine GrowBox)
Vielleicht kennt sich ja jemand aus mit diesem Fehler...

Da der Text mit eingebettetem Script das Zeichen-Maximum des Forums überschreitet muss ich das Script leider anhängen. Ich hoffe trotzdem jemand kann mir helfen.

Beste Grüße

Beso

PS: Bitte entschuldigt und verschiebt, falls der Post jetzt irgendwie falsch gemacht wurde... ich bin ForumsNoob... :roll_eyes:

Box.ino (7.71 KB)

Ich kenne den Yun nicht, aber evtl. kann der Pin ja keinen "analogWrite" ausführen.

sollte er zumindest... und wie gesagt: in einem leeren Script oder gleichem Script mit sonst leerer Setup-Funktion gehts...

aber danke schonmal für die schnelle Antwort!

Kannst u den Sketch bitte auch hier in Code-Tags posten, dann kann ich mir den auch mal ansehen.

//************************ DEFINE & INCLUDE **************************
//==================================================> LEDs
#define ledPower 13
#define ledHDD 12
//==================================================> LEDs
//==================================================> Blynk
#define BLYNK_PRINT Serial
#include <Bridge.h>
#include <BlynkSimpleYun.h>
//==================================================> /Blynk
//==================================================> DHT
#include <dht.h>
#define DHT22_PIN_innen A0
#define DHT22_PIN_aussen A1
//==================================================> /DHT
//==================================================> Grove

//==================================================> /Grove
//==================================================> RCSwitch
#include <RCSwitch.h>
#define voltageFlipPin1 5
#define voltageFlipPin2 6
#define sensorPin A2
#define RCPin A3
//==================================================> /RCSwitch



//************************ Variables **************************

//==================================================> LEDs
int ledState = LOW;             // ledState used to set the LED
unsigned long prevLedMillis = 0;        // will store last time LED was updated
long interval = 300;           // interval at which to blink (milliseconds)
//==================================================> /LEDs
//==================================================> Blynk
char auth[] = "c10bf5731cea431bbeb***";
unsigned long prevNotiMillis = 0;
const long notiInterval = 86400000;
//==================================================> /Blynk
//==================================================> DHT
dht DHT;
unsigned long prevDhtMillis = 0;      
const long dhtInterval = 10000; 
int tempInnen;
int rlfInnen;
//==================================================> /DHT
//==================================================> Grove
int tooDryCounter = 0;
//==================================================> /Grove
//==================================================> RCSwitch
int flipTimer = 1000;
unsigned long prevSensorMillis = 0;      
const long sensorTimer = 21600000; 
int avg = 50;
bool homeModeState = true;
RCSwitch mySwitch = RCSwitch();
//==================================================> /RCSwitch




//************************ Functions **************************
//==================================================> LEDs
void ledFunc(){
  unsigned long ledMillis = millis();
  if (ledMillis - prevLedMillis >= interval) {
    prevLedMillis = ledMillis;
    Blynk.syncAll();      // =============================================> sync function belongs to RCSwitch but implemented here within the (faster) LED Timer

    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    digitalWrite(ledHDD, ledState);
  }  
}
//==================================================> /LEDs
//==================================================> Blynk

void blynkyNotifies(){
  if(tooDryCounter > 6){
    Blynk.notify("RLF zu gering!");
    tooDryCounter=0;
    
  }
}

//==================================================> /Blynk
//==================================================> DHT
void dhtFunc(){
  unsigned long dhtMillis = millis();
  if (dhtMillis - prevDhtMillis >= dhtInterval) {
    prevDhtMillis = dhtMillis;
    
    DHT.read22(DHT22_PIN_innen);  
    tempInnen = DHT.temperature;
    rlfInnen = DHT.humidity;
    DHT.read22(DHT22_PIN_aussen);  
    int temp = DHT.temperature;
    int rlf = DHT.humidity;

    Blynk.virtualWrite(6,tempInnen);
    Blynk.virtualWrite(7,rlfInnen);
    Blynk.virtualWrite(8,temp);
    Blynk.virtualWrite(9,rlf);
    
    if (rlfInnen < 20) {
      tooDryCounter++;
    }
  }  
}
//==================================================> /DHT
//==================================================> RCSwitch
void setSensorPolarity(boolean flip){
  if(flip){
    digitalWrite(voltageFlipPin1, HIGH);
    digitalWrite(voltageFlipPin2, LOW);
  }else{
    digitalWrite(voltageFlipPin1, LOW);
    digitalWrite(voltageFlipPin2, HIGH);
  }
}
int getAvarage(){
  setSensorPolarity(true);
  delay(flipTimer);
  int val1 = analogRead(sensorPin);
  delay(flipTimer);  
  setSensorPolarity(false);
  delay(flipTimer);
  int val2 = 1023 - analogRead(sensorPin);
  int avg = (val1 + val2) / 2;
  avg = abs((-1023+avg)/14.7); //get procentual value from analog
  digitalWrite(voltageFlipPin2, LOW);
  digitalWrite(voltageFlipPin1, LOW);
  return avg;
}

void holidayMode(){
  unsigned long sensorMillis = millis(); 
  if (sensorMillis - prevSensorMillis >= sensorTimer) {
    avg = getAvarage();
    Blynk.virtualWrite(V2,avg);
    if (avg <= 30){
      mySwitch.switchOn("10001", "10000");
      delay(1600);
      prevSensorMillis = sensorMillis;
      mySwitch.switchOff("10001", "10000");
    }
    else{
      mySwitch.switchOff("10001", "10000"); // rather switch off more often to avoid unintended pumps 
    }
  }
}

void homeMode(){
  unsigned long sensorMillis = millis(); 
  if (sensorMillis - prevSensorMillis >= sensorTimer) {
    avg = getAvarage();
    Blynk.virtualWrite(V2,avg);
    if (avg <= 30){
     Blynk.notify("Erde sehr trocken!");
    }
    prevSensorMillis = sensorMillis;
  }
}

BLYNK_WRITE(V30){
  switch (param.asInt()){
    case 1:{
      homeModeState = true;
      homeMode();
      break;
    }
    case 2:{
      homeModeState = false;
      holidayMode();
      break;
    }
  }
}

BLYNK_WRITE(V22){
  if (homeModeState == true){
    int pump = param.asInt();
    if (pump == 1){
      mySwitch.switchOn("10001", "10000");
    }
    else{
      mySwitch.switchOff("10001", "10000");
    }
  }
}
//==================================================> /RCSwitch






//************************ Setup **************************

void setup() {
  //==================================================> LEDs
  pinMode(ledHDD, OUTPUT);
  pinMode(ledPower, OUTPUT);
  digitalWrite(ledPower, HIGH);
  analogWrite(3, 100);
  //==================================================> /LEDs
  //==================================================> Blynk
  Serial.begin(9600);
  Blynk.begin(auth);
  //==================================================> /Blynk
  //==================================================> DHT
  pinMode(DHT22_PIN_innen, INPUT);
  pinMode(DHT22_PIN_aussen, INPUT);
  //==================================================> /DHT
  //==================================================> Grove
  pinMode(7, OUTPUT);
  //==================================================> /Grove
  //==================================================> RCSwitch
  pinMode(voltageFlipPin1, OUTPUT);
  pinMode(voltageFlipPin2, OUTPUT);
  pinMode(sensorPin, INPUT);
  mySwitch.enableTransmit(RCPin);
  //==================================================> /RCSwitch


}


//************************ Loop **************************


void loop() {
  //==================================================> LEDs
  ledFunc();
  //==================================================> /LEDs
  //==================================================> Blynk
  Blynk.run();
  blynkyNotifies();
  //==================================================> /Blynk
  //==================================================> DHT
  dhtFunc();
  //==================================================> /DHT
  //==================================================> Grove
  //controlled via BlynkApp
  //==================================================> /Grove
  //==================================================> RCSwitch
  //controlled via BlynkApp
  //==================================================> /RCSwitch

}

ist ein bissel lang und schlecht kommentiert... *sorry

internal compiler error: Segmentation fault

Der Fehler hat nichts mit deinem Programm oder der Lib zu tun.

Es ist ein interner Kompiler Fehler.

Er kann nur behoben werden, wenn man den Kompiler repariert, Updated oder eine ältere Version aufspielt.

Alles andere ist vergebene Liebesmüh.

combie:
Der Fehler hat nichts mit deinem Programm oder der Lib zu tun.

Es ist ein interner Kompiler Fehler.

Er kann nur behoben werden, wenn man den Kompiler repariert oder Updated

wow dann bin ich ja schonmal beruhigt, dass ich keinen Denkfehler hab..
Vielen Dank für deine Antwort!

Die Arduino IDE habe ich vom WindowsAppstore.. sollte eigentlich aktuell sein... komisch dass des dann mit leerer Setup Funktion klappt!

ich versuchs mal per Linux und melde mich ggf. nochmal...

Ah...ok, das Problem habe ich jetzt nicht vermutet.

HotSystems:
Ah...ok, das Problem habe ich jetzt nicht vermutet.

Tja, so kanns kommen...

Dabei ist die Meldung doch eineindeutig.
Sie lässt keinen Spielraum zu.

Aber einen Vorteil hat es:
Ich vermute mal, dass der Zusammenhang jetzt "sitzt".

komisch dass des dann mit leerer Setup Funktion klappt!

Das ist vollkommen irrelevant bei dem Problem!
Solche Gedanken locken einen nur in die Irre.

Hallo,

gab es hier oder nebenan nicht schonmal einen Thread wo sich die IDE aus dem WindowsAppstore als Problem rausstellte?
Mit der portable installierten IDE von Arduino direkt ging es dann bei ihm.

Gruß aus Berlin
Michael

also mit Linux hate es wunderbar geklappt... :slight_smile:
Danke für die Hilfe!!!

----close------

Fein!