1e project

Hardware geleverd door Arduino
Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

1e project

Berichtdoor Atwist » 11 Nov 2015, 14:11

Zo het is zover mijn eerste stukje programmering heb ik klaar kan het helaas nog niet testen.
Dacht dat ik de "UNO" in Duitsland had besteld maar het bleek toch China te zijn, alle andere heb ik wel.
Maar ik wilde toch alvast het programma maken.
Zou jullie eens kunnen kijken of het klopt wat ik heb gedaan

Voor de duidelijkheid ik vraag dat jullie de fouten eruit halen, graag alleen maar een aanwijzing zodat ik dan daar aan kan werken.

Code: Alles selecteren
const int HWrelais = 2;     // Hoogwaterpomp
const int HWvloter =  3;      // Hoogwatervlotter
const int HWalarm  = 4;    // Hoogwateralarm

int HWvlotter = 0;         // Waterstand is normaal

void setup() {
  pinMode(2, OUTPUT);   // Uitgang hoogwaterpomp
  pinMode(3, INPUT);    // Ingang hoogwatervlotter
  pinMode(4, OUTPUT);   // Uitgang hoogwateralarm

}

void loop() {
 
  HWvlotter = digitalRead(3);
  HWalarm = digitalRead(4)

if (HWvlotter == HIGH)
    { // Hoogwaterpomp aan
    digitalWrite(2, HIGH); }
else
    { // Hoogwaterpomp uit
    digitalWrite(2, LOW);
 
    { // Timer loopt
    digitalWrite(4, LOW);
    delay(10 * 60 * 1000);
    digitalWrite(4, HIGH);}
else
    { // Hoogwateralarm blijft uit
    digitalWrite(4, LOW); }
}
}


Bijna vergeten.
Het is dus een schakeling die kijkt of de pomp aan moet als de pomp 10 min. blijft draaien dam moet er een alarm afgaan en anders uitblijven.
Zie net dat ik het alarm ook wel kan laten pulseren voor een betere hoorbaarheid.
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Advertisement

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: 1e project

Berichtdoor Atwist » 11 Nov 2015, 14:33

Oei ik heb ook de verifieer knop gevonden en loop op het HWalarm vast (read only) :?: :?:
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: 1e project

Berichtdoor FonzieBonzo » 11 Nov 2015, 15:39

Doordat je const voor de declaratie van de int HWrelais hebt staan (en de andere twee variabelen), geeft je aan dat er in HWrelais een vaste (constante) waarde komt.
Dus het gaat mis als je verderop in je code de constante waarde van HWrelais wilt veranderen.

Verder declareer je de variabelen als een int terwijl een boolean (false/true LOW/HIGH 0/1) voldoende zou zijn.

De if .. then ..else ..else statement klopt niet.
De code achter de tweede else zal nooit uitgevoerd worden, waarschijnlijk zal de compiler hier ook over struikelen.

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: 1e project

Berichtdoor Atwist » 11 Nov 2015, 15:52

Dank je FonzieBonzo,

Ga eens kijken of ik het ga snappen wat jij bedoelt en tevens de fouten eruit halen.
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 1e project

Berichtdoor nicoverduin » 11 Nov 2015, 16:38

Boolean, char, byte, uint8_t en int8_t nemen allemaal een byte (van 8 bits) in beslag.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: 1e project

Berichtdoor Atwist » 11 Nov 2015, 20:06

Ben al weer een stuk verder in dit stuk heb ik 1 fout zitten maar weet niet wat ermee wordt bedoelt.

Code: Alles selecteren
const int HWrelais = 2;    // Hoogwaterpomp
const int HWvloter = 3;    // Hoogwatervlotter
const int HWalarm  = 4;    // Hoogwateralarm

int HWvlotter = 0;         // Waterstand is normaal

void setup() {
  pinMode(2, OUTPUT);   // Uitgang hoogwaterpomp
  pinMode(3, INPUT);    // Ingang hoogwatervlotter
  pinMode(4, OUTPUT);   // Uitgang hoogwateralarm

}

void pomp_aan(void) {

  int HWvlotter = digitalRead(3);

  if (HWvlotter == HIGH)
  { digitalWrite(2, HIGH);  // Hoogwaterpomp aan
  }
  else
  { digitalWrite(2, LOW);   // Hoogwaterpomp uit
  }
}

void alarm_timer(void) {

  int HWvlotter = digitalRead(3);

  if (HWvlotter == HIGH)
    // Timer loopt
    {digitalWrite(4, LOW);
    delay(10 * 60 * 1000);
    delay(1000);
    digitalWrite(4, HIGH);
    delay(2000);
    }
   
else
    // Hoogwateralarm blijft uit
    {digitalWrite(4, LOW); }
   
}


De fout melding die ik nu krijg is:
Code: Alles selecteren
collect2: error: ld returned 1 exit status
exit status 1
Fout bij compileren.
 


Wat heb ik nu nog verkeer.

Voor de duidelijkheid ik vraag jullie niet om de fouten eruit halen, graag alleen maar een aanwijzing zodat ik dan daar aan kan werken.
Laatst gewijzigd door Atwist op 11 Nov 2015, 20:12, in totaal 1 keer gewijzigd.
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: 1e project

Berichtdoor Atwist » 11 Nov 2015, 20:10

nicoverduin schreef:Boolean, char, byte, uint8_t en int8_t nemen allemaal een byte (van 8 bits) in beslag.


@ Nico ik weet niet wat je hier precies mee bedoelt wat ik wel begrijp is dat het minder geheugen in beslag neemt en waarschijnlijk ook sneller is :roll:
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: 1e project

Berichtdoor FonzieBonzo » 11 Nov 2015, 21:19

Je mist de procedure
void Loop(){
}

Deze procedure dient in ieder project aanwezig te zijn en is de hoofdprocedure welke altijd wordt uitgevoerd.
Je wilt ook waarschijnlijk je zelfgemaakte procedures pomp_aan en alarm_timer gaan gebruiken/aanroepen in de void Loop.

De eerste 4 regels in je code worden wel gedeclareerd maar niet gebruikt in je project.


ps Wat Nico bedoelt is dat het qua geheugengebruik niet uitmaakt of je een integer of boolean als variabele gebruikt en was dus meer een reactie op mijn vorrige bericht.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 1e project

Berichtdoor nicoverduin » 11 Nov 2015, 21:21

De tip om boolean te definieren als het bit operaties zijn (zoals true, false etc) maken in feite weinig uit als het om RAM geheugen gaat. Per processor platform zie je vaak verschillende definities voor bijv. de int. Op een 8-bitter is het 2 bytes. Op een 32 bitter is het 4 bytes. Om dat probleem wat meer te voorkomen hebben ze uint8_t. int8_t, uint16_t, int16_t etc. Die zorgen ervoor dat de lengte niet veranderd bij een andere processor. Met de komst van steeds meer 32 bitters waaronder de DUE, ESP8266, STM32 etc kan je er voor kiezen om eerst op een UNO te ontwikkelen. Heb je meer power nodig kun je richting een 32 bitter gaan zonder de code te moeten veranderen.
Maar als je echt snelheid wilt zou ik ofwel een grotere processor kiezen of bijvoorbeeld de uitdaging van assembly aangaan. Dat laatste zorgt er wel voor dat exact weet wat een processor kan :) Tegelijk ga je wel behoren tot een select uitstervende generatie. MAar ter illustratie heb ik ooit blink in assembly gedaan op de Arduino. 58 bytes totaal. Blink in C/C++ is beduidend groter. Los van de snelheid.

Die fout die je krijgt is heeft te maken dat de archiver of linker is stuk gelopen. Waren er geen andere boodschappen ervoor? bij fouten in de compilatie moet je altijd kijken naar de eerste fout. De rest is vaak daar het gevolg van.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 102
Geregistreerd: 26 Okt 2015, 16:07

Re: 1e project

Berichtdoor Atwist » 11 Nov 2015, 21:34

Inderdaad wat een blunder die loop hoort er voor.
Die declaratie heb ik van uit een voorbeeld ik dacht dat je dit moest doen.
Ga weer lekker verder knutsellen.
Jullie hoor weer van mij.

Ik dank jullie beide
Ik ben niet de slimste maar doe wel mijn best.
Andreas

Volgende

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Bing [Bot], Google [Bot] en 13 gasten