Arduino och oled display [LÖST]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Arduino och oled display [LÖST]

Inlägg av Arclight »

Blir snart tokig..

Håller på med ett litet projekt att göra en trim level mätare till min båt.
Denna har funkat som den ska tidigare men nu vill det inte riktigt funka längre, eller jo den funkar men visar lite konstigt på oled displayen, jag har testat med både arduino Uno, och Nano (flera olika varianter) men samma resultat varje gång, oled displayen är en Digole display http://www.ebay.com/itm/1-3-Serial-UART ... 5679dc17ec

Det är i botten bara en enkel potentiometer som ger värdet till stapeln, potten är på ca 100ohm, och likaså motståndet, men jag tror inte det har med saken att göra

Så här blir det nu när jag kör den (den vill inte visa hela stapeln och dessutom delar av den på mitten)
https://www.youtube.com/watch?v=GDFs-An ... e=youtu.be

Koden jag har är denna

Kod: Markera allt

#define _Digole_Serial_UART_
#include <DigoleSerial.h>
DigoleSerialDisp mydisp(&Serial, 9600);
#include <Wire.h>

const unsigned char welcomeimage[] PROGMEM = {
  0, 0, 0, 0, 0, 127
  , 0, 8, 1, 2, 0, 127
  , 0, 8, 0, 148, 0, 127
  , 0, 16, 0, 89, 112, 127
  , 3, 144, 0, 16, 144, 127
  , 28, 145, 192, 16, 144, 127
  , 1, 30, 128, 80, 144, 127
  , 9, 49, 3, 208, 144, 127
  , 5, 72, 0, 80, 144, 127
  , 2, 72, 0, 150, 144, 127
  , 3, 8, 0, 152, 208, 127
  , 5, 24, 0, 64, 160, 127
  , 4, 148, 0, 64, 128, 127
  , 8, 36, 0, 128, 128, 127
  , 16, 34, 3, 240, 128, 127
  , 32, 65, 0, 14, 0, 127
  , 0, 129, 128, 1, 252, 127
  , 3, 0, 64, 0, 0, 127
  , 0, 0, 0, 0, 0, 127
  , 0, 0, 0, 0, 0, 127
  , 0, 0, 0, 0, 0, 127
};

const unsigned char trimImage[1024] PROGMEM = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0
,0,0,31,243,254,132,79,249,255,63,239,249,63,240,0,0
,0,0,16,18,2,132,72,9,0,32,8,1,33,16,0,0
,0,0,16,18,2,132,72,9,0,32,8,1,33,16,0,0
,0,0,16,18,2,132,79,249,0,32,8,1,33,16,0,0
,0,0,16,18,2,132,72,1,0,32,8,1,33,16,0,0
,0,0,31,243,254,255,207,249,0,63,232,1,33,16,0,0
,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0
,32,47,248,0,0,0,0,0,0,0,0,0,0,63,231,252
,32,40,8,0,0,0,0,0,0,0,0,0,0,32,36,4
,32,40,8,0,0,0,0,0,0,0,0,0,0,32,36,4
,32,40,8,0,0,0,0,0,0,0,0,0,0,32,36,4
,32,40,8,0,0,0,0,0,0,0,0,0,0,32,36,4
,63,239,248,0,0,0,0,0,0,0,0,0,0,63,228,4
,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

};

const float SENSOR_LOW = 0;
const float SENSOR_MID = 250;
const float SENSOR_HIGH = 500;
const float THRESHOLD = 2;

float prevTrim = 0;

void setup() {

  mydisp.begin();
  delay(5000);
  mydisp.clearScreen();
  //mydisp.displayConfig(0);
  mydisp.disableCursor();
  mydisp.setPrintPos(3, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING!");
  delay(500);
  mydisp.clearScreen();
  delay(500);
  mydisp.setPrintPos(3, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING!");
  delay(500);
  mydisp.clearScreen();
  delay(500);
  mydisp.setPrintPos(3, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING!");
  delay(500);
  mydisp.clearScreen();
  delay(500);
  mydisp.setPrintPos(3, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING!");
  delay(5000);
  mydisp.clearScreen();
  mydisp.setPrintPos(0, 1, _TEXT_);
  mydisp.print("      USE          ENGINE FAN     BEFORE START");
  delay(5000);
  mydisp.clearScreen();
  delay(200);
  mydisp.drawBitmap(0, 0, 128, 64, trimImage);
  delay(200);
}

void loop() {
  int sensorValue = analogRead(A0);
  //Serial.println(sensorValue, DEC);
  setTrim(sensorValue);
  delay(40);
}

void setTrim(float value) {
  const float BAR_WIDTH = 122.0f;
  const float HALF_BAR_WIDTH = 61.0f;
  float trim;
  if (value < SENSOR_MID) {
    trim = (value - SENSOR_LOW) / (SENSOR_MID - SENSOR_LOW) * HALF_BAR_WIDTH;
  } else {
    trim = (value - SENSOR_MID) / (SENSOR_HIGH - SENSOR_MID) * HALF_BAR_WIDTH + HALF_BAR_WIDTH;
  }
  if (trim < 1.0f) {
    trim = 0.0f;
  } else if (trim > BAR_WIDTH) {
    trim = BAR_WIDTH;
  }
  float diff = trim - prevTrim;
  if (diff > THRESHOLD || diff < (-THRESHOLD)) {
    prevTrim = trim;
  }
  int invertedTrim = (int)(BAR_WIDTH - prevTrim);
  mydisp.setColor(0);
  mydisp.drawBox(2, 30, (int)BAR_WIDTH , 8);
  mydisp.setColor(1);
  mydisp.drawBox(2, 30, invertedTrim, 8);
}
Någon som har en tanke om vad som kan vara fel.
Senast redigerad av Arclight 20 augusti 2015, 20:37:23, redigerad totalt 3 gånger.
Användarvisningsbild
SeniorLemuren
Inlägg: 8426
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Arduino och oled display

Inlägg av SeniorLemuren »

Om man nu skulle vilja kolla hur det ser ut vore det ju bra om du skickade med inloggninguppgifter.
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Ops, den stod på private, nu kanske det ska funka bättre:)
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Kan även nämna att jag testat flera displayer men samma fel, och har testat andra applikationer och displayen är hel och lyser överallt så det är inte problemet heller.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Arduino och oled display

Inlägg av Swech »

Kod: Markera allt

  
int invertedTrim = (int)(BAR_WIDTH - prevTrim)
  mydisp.setColor(0);
  mydisp.drawBox(2, 30, (int)BAR_WIDTH , 8);
  mydisp.setColor(1);
  mydisp.drawBox(2, 30, invertedTrim, 8);
}

varför - prevTrim på första raden? är inte inverted trim alltid max längd - bar width?

Swech
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Ja du, det vet jag inte, jag hade en gammal jobbkompis som skrev denna koden till mig (vi jobbar inte längre på samma ställe)
och detta har jag inte ändrat något på och den har ju funkat innan, jag är ju inte så haj på programmering mer än lite enklare saker.
Det enda jag ändrat är ju lite ny text och sensor värden.

Känns ju skumt att den ändrar olika och om man skruvar fortare eller sakta och olika från gång till gång.
från potten får jag värde från 0 till 600, jag vet att det står 500 i koden jag bif innan men det är ändrat och oavsett vad jag sätter den på så blir det samma fel.

Det jag kan tänka mig har blivit fel nånstans är att det är nyare version av dels arduino och troligtvis en nyare version av digoleserial.h.
Jag var tvungen att ändra "const unsigned char" för det skulle funka i 1.6. Nu har jag iofs testat att köra in den gamla koden med i en äldre version men fortfarande samma fel:/
Som sagt, jag har inte en aning om vad det kan vara:(
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Oh, jag är nog nåt på spåret nu.

Ändrade lite på delay i denna och nu delar den sig inte längre och går nästan ända upp till toppen.

Kod: Markera allt

void loop() {
  int sensorValue = analogRead(A0);
  //Serial.println(sensorValue, DEC);
  setTrim(sensorValue);
  delay(60);
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Phew.. Jag har löst det.

Det var delay värdet som jag skrev ovan som strulade till det, jag måste antingen ha ändrat det nån gång och glömt ställa tillbaka det, eller så har det att göra med nya programfunktioner i digole lib som gjorde att jag fick justera det, men nu verkar det funka som det ska igen iaf:)

Bild
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Var nere i båten och installerade den och det funkade ju alldeles utmärkt. Men kom på en sak jag missat.

Mitt drev på båten har ju 3 lägen (eller 4 om man räknar med mitten) ner-mitten-upp samt trailer läge där man skickar upp drevet ytterligare.

Som mätaren är nu så mäter den ju bara ner=0 mitten=250 upp=500 och jag skulle vilja att om värdet blir högre än 500 (vilket det blir om jag drar upp drevet i trailerläge) så rensas skärmen och texten "TRAILER MODE" ligger centrerat (eller ännu bättre blinkar) i displayen.

Jag har testat denna koden (tänk nu på att jag är ganska noob på kod så skratta inte;) men det vill sig inte riktigt, har fått den att skriva ut texten men diplayen rensas inte som den ska och den försvinner inte heller och återgår till den "normala" mätaren om värdet går under 500 igen.

Kod: Markera allt

      if (value > SENSOR_HIGH) {
          mydisp.clearScreen();
    mydisp.setPrintPos(3, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("TRAILER");
  } else if (value < SENSOR_HIGH) {
  mydisp.drawBitmap(0, 0, 128, 64, trimImage);}
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino och oled display

Inlägg av Arclight »

Oj vad jag fick gnugga mina små grå.. hade stora problem med clearScreen och displayen har inget stör för clearLine så det var svårt att få det att funka med text, lyckades däremot att lägga in en ny bitmap och har nu fått det att funka som jag vill (förutom att få bitmapen att blinka men ska nog fasen komma på det med:)

Tror det hade varit lite enklare att köra den i I2C eller SPI då den blivit lite snabbare och det har ställt till det så jag har fått lägga delay på vissa ställen för den ska hinna med att rita ut allt, men då jag redan installerat den (med smältlim) så blir det krångligt att löda om..

Här är iaf den kod som funkar.

Kod: Markera allt

#define _Digole_Serial_UART_
#include <DigoleSerial.h>
DigoleSerialDisp mydisp(&Serial, 9600);
#include <Wire.h>

const unsigned char trailerImage[1024] PROGMEM = {
128,0,0,0,32,0,0
,128,0,0,1,32,0,0
,255,63,207,248,39,252,255
,128,32,0,9,36,4,128
,128,32,15,249,36,4,128
,128,32,8,9,39,252,128
,128,32,8,9,36,0,128
,255,32,15,249,39,252,128
};

const unsigned char trimImage[1024] PROGMEM = {
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0
  , 0, 0, 31, 243, 254, 132, 79, 249, 255, 63, 239, 249, 63, 240, 0, 0
  , 0, 0, 16, 18, 2, 132, 72, 9, 0, 32, 8, 1, 33, 16, 0, 0
  , 0, 0, 16, 18, 2, 132, 72, 9, 0, 32, 8, 1, 33, 16, 0, 0
  , 0, 0, 16, 18, 2, 132, 79, 249, 0, 32, 8, 1, 33, 16, 0, 0
  , 0, 0, 16, 18, 2, 132, 72, 1, 0, 32, 8, 1, 33, 16, 0, 0
  , 0, 0, 31, 243, 254, 255, 207, 249, 0, 63, 232, 1, 33, 16, 0, 0
  , 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
  , 63, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0
  , 32, 47, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 231, 252
  , 32, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 36, 4
  , 32, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 36, 4
  , 32, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 36, 4
  , 32, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 36, 4
  , 63, 239, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 228, 4
  , 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

};

const float SENSOR_LOW = 20;
const float SENSOR_MID = 310;
const float SENSOR_HIGH = 620;
const float THRESHOLD = 2;

float prevTrim = 0;

void setup() {
  mydisp.begin();
  delay(5000);
  mydisp.clearScreen();
  mydisp.disableCursor();
  mydisp.setPrintPos(4, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING");
  delay(500);
  mydisp.clearScreen();
  delay(500);
  mydisp.setPrintPos(4, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING");
  delay(500);
  mydisp.clearScreen();
  delay(500);
  mydisp.setPrintPos(4, 2, _TEXT_);
  mydisp.setFont(200);
  mydisp.print("WARNING");
  delay(500);
  mydisp.clearScreen();
  mydisp.setPrintPos(0, 1, _TEXT_);
  mydisp.print("GASOLINE  VAPORSCAN  EXPLODE USEFAN BEFORE START");
  delay(8000);
  mydisp.clearScreen();
  delay(200);
  mydisp.drawBitmap(0, 0, 128, 64, trimImage);
}
void loop() {
  int sensorValue = analogRead(A0);
  setTrim(sensorValue);
  delay(70);
}
void setTrim(float value) {
  const float BAR_WIDTH = 122.0f;
  const float HALF_BAR_WIDTH = 61.0f;
  float trim;
  if (value < SENSOR_MID) {
    trim = (value - SENSOR_LOW) / (SENSOR_MID - SENSOR_LOW) * HALF_BAR_WIDTH;
  } else {
    trim = (value - SENSOR_MID) / (SENSOR_HIGH - SENSOR_MID) * HALF_BAR_WIDTH + HALF_BAR_WIDTH;
  }
  if (trim < 1.0f) {
    trim = 0.0f;
  } else if (trim > BAR_WIDTH) {
    trim = BAR_WIDTH;
  }
  float diff = trim - prevTrim;
  if (diff > -THRESHOLD || diff < (THRESHOLD)) {
    prevTrim = trim;
  }
  int invertedTrim = (int)(BAR_WIDTH - prevTrim);
  mydisp.setColor(0);
  mydisp.drawBox(2, 30, (int)BAR_WIDTH , 8);
  mydisp.setColor(1);
  mydisp.drawBox(2, 30, invertedTrim, 8);
  if (value > SENSOR_HIGH) {
    mydisp.setColor(1);
    delay (200);
    mydisp.drawBitmap(36, 50, 56, 8, trailerImage);
  } else {
    mydisp.setColor(0);
    delay (200);
    mydisp.drawBitmap(36, 50, 56, 8, trailerImage);
  }
}
Skriv svar