sandy99 38
Postad: 12 maj 2020

Arduino - error compiling board

Hejhej! Jag har kollat så att vi använder rätt usb port, och andra koder fungerar men inte denna, utan får felmeddelande "Error compiling with board arduino uno". Brädan lyser och fungerar som sagt som den ska med andra testkoder, men inte den kod vi försöker köra nu, och vi förstår inte alls varför.
Det vi har inkopplat är en oled-skärm, gassensor, temp. sensor, led-lampa och buzzer, men alla enheters individuella koder fungerar, men denna gemensamma fungerar inte..

KOD VI VILL KÖRA:

#include <Adafruit_SSD1306.h>
#include <splash.h>

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 5 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int led = 2;
int buzzer = 4;
const int gasSensor = A0;
int gasSensorThresh = 400;

const int tempDigitalPin = 3; // Temperature digital interface Ändra pins för dessa
const int tempAnalogPin = A0; // Temperature analog interface Går både Gassensorn och temperaturens analoga till Arduinons A0?? funkar det?
//int tempAnalogValue; // temperaturen från sensorn?? behöver filtreras, och göras om till celsius
float previousReading = 0; //för lågpassfiltret

void setup()
{
pinMode (led, OUTPUT);
pinMode (buzzer, OUTPUT);
pinMode (gasSensor, INPUT);
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // 0x3D för 128x64

// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
//if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
// Serial.println(F("SSD1306 allocation failed"));
// for(;;); // Don't proceed, loop forever

}

void loop()
{
int newReading = analogRead(A0); // read analog A0 pin , Dessa rader är lågpassfiltret
float lowpassReading = 0.94 * previousReading + 0.06* newReading; // 94% of the previous reading and 6% of the new reading
previousReading = lowpassReading;

int analogValue = analogRead(gasSensor);
Serial.print(analogValue); //??
if(analogValue > gasSensorThresh)
{
digitalWrite(led, HIGH);
tone(buzzer, 1000, 10000); //1000 är frekvensen och 10000 är tiden i millisekunder
drawmessage();

// Här vi sänder data till de andra? tex sända Varningsmeddelande, en ton till en buzzer eller hela gasdetektorvärdena??
}
else {
digitalWrite(led, LOW);
noTone(buzzer);

display.clearDisplay();

display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font

display.println(F(lowpassReading)); //printas till displayen på annat sätt??
}
}

void drawmessage(void) {
display.clearDisplay();

display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font

display.println(F("VARNING"));
delay(1000);
display.clearDisplay();
display.setCursor(0, 1); // Kanske behöver ändra placeingen av texten med detta
display.println(F("GAS DETEKTERAD"));
delay(1000);

display.display();
delay(2000);
}

Tegelhus 168
Postad: 12 maj 2020

Får du något ytterligare felmeddelande / mer information än så? Ingenting som pekar på ett fel i en specifik rad?

sandy99 38
Postad: 12 maj 2020

Laguna 8580
Postad: 12 maj 2020

Det där är nästan läsbart. Och vilken färg... Om mitt liv hängde på det skulle jag försöka läsa.

Kopiera texten och lägg in den här.

Lindehaven 427 – Leg. Lärare
Postad: 12 maj 2020 Redigerad: 12 maj 2020

Makrot PSTR, som används i makrot F, kan endast konvertera en sträng (string_literal) men du använder ett flyttal (lowpassReading).

Konvertering av float till string_literal i APL är sedan ett helt kapitel i sig. Detta är dock något som bör funka (men har inte haft möjlighet att testa):

char lowpassReadingString[10];

dtostrf(lowpassReading, 8, 2, lowpassReadingString);

display.println(F(lowpassReadingString));

Funktionen dtostrf() konverterar flyttalet lowpassReading till en sträng. I kodexemplet ovan är längden 8 tecken med 2 decimaler.

Svara Avbryt
Close