Mitt første program vil ikke kjøre - hva er feil?

Mottok i dag min Arduino UNO og kjørte fersking-programmene "Button" og "Blink" uten problemer.

Så forsøkte jeg å kombinere komandoene i fra disse programmene for å lage min egen versjon. Den fungerte ikke. Hva er galt?

Det står beskrevet i tekstfeltet hvilke oppgaver programmet skal utføre.

Mvh
BjornTore

Slippe_to_draaper_etter_trykt_START_virker_ikke.ino (1.25 KB)

Hi

kan du ikke ligge koden ind i din tråd stedet for som en vedhæftet fil. Kører ikke selv med Arduino 1.0 så kan derfor ikke læse .ino filtypen.

Der er en 'kode' knap til indsættelse af kode i din topic.

/*
Slippe to dråper tett etter hverandre

Venter på START-pulsen før den åpner magnetventilen i 80ms (slipper dråpe 1), lukker magnetventilen i 20ms (da er har dråpe 1 sluppet taket og
fallt litt), åpner magnetventilen i 80ms (slipper dråpe 2), lukker magnetventilen og venter i 7 sekund
(så vannet får roet seg). Venter så på ny START-puls.

Krets:
Min Arduino har en fast LED mellom pin 13 og GND. Jeg lar denne simulerer en magnetventil (dråpeslipperen).
Trykknappen START er koplet mellom pin3 og +5V
En 10K resistor er koplet mellom pin3 og GND
*/

// set pin numbers:
const int buttonPin = 3; // Inngang 3 er normalt LOW, trekkes HIGH av START-puls-knappen
const int ledPin = 13; // LED utgangen settes til pin 13 (den er normalt lav)

pinMode(13, OUTPUT);
pinMode(3, INPUT);}

void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on my Arduino board:
int buttonState = 0;
}

void loop() {
if (buttonState == HIGH);
digitalWrite(13, HIGH); // set the LED on
delay(80); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(20); // wait for a second
digitalWrite(13,HIGH);
delay(80);
digitalWrite(13,LOW);
delay(7000);
}

Prøv at sætte dine delay højere.. Minimum 500 ellers kan ikke se om din LED slukker eller tænder..

Hov... du mangler da også at læse din tilstand på din knap..
husk
buttonState = digitalRead(buttonPin);

i din loop

Du mangler også nogle { } i din if sætning

if (buttonState == HIGH){

....

}

Da har jeg endret mitt sketch slik dere foreslår, men det virker fortsat ikke. Problemet er at jeg blir nektet å Uploade sketch'et. Han markerer da linjen "pinMode(13, OUTPUT)" og gir meg feilmeldingen
"expected construktor, destructor, or type conversion before '(' token"

Slik ser sketchet ut etter endringene:

/*
Slippe to dråper tett etter hverandre

Venter på START-pulsen før den åpner magnetventilen i 80ms (slipper dråpe 1), lukker magnetventilen i 20ms (da er har dråpe 1 sluppet taket og
fallt litt), åpner magnetventilen i 80ms (slipper dråpe 2), lukker magnetventilen og venter i 7 sekund
(så vannet får roet seg). Venter så på ny START-puls.

Krets:
Min Arduino har en fast LED mellom pin 13 og GND. Jeg lar denne simulerer en magnetventil (dråpeslipperen).
Trykknappen START er koplet mellom pin3 og +5V
En 10K resistor er koplet mellom pin3 og GND
*/

// set pin numbers:
const int buttonPin = 3; // Inngang 3 er normalt LOW, trekkes HIGH av START-puls-knappen
const int ledPin = 13; // LED utgangen settes til pin 13 (den er normalt lav)

pinMode(13, OUTPUT);
pinMode(3, INPUT);}

void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on my Arduino board:
int buttonState = 0;
}

void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH){
digitalWrite(13, HIGH); // set the LED on
delay(500); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(500); // wait for a second
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(7000);
}

Slippe_to_draaper_etter_trykt_START_virker_fortsatt_ikke.ino (1.29 KB)

Jippi, nå fungerer det som tenkt. I morgen blir det å kople til magnetventilene og justere timerne slik at det blir optimalt. Tusen takk for hjelpen alle sammen....-så langt :slight_smile:

/*
SLIPPE TO DRÅPER TETT ETTER HVERANDRE – VIRKER FAKTISK ?

Inngang 2 trekkes lava via en 10K resistor og trekkes til +5V ved hjelp av en momentan trykkbryter
*/

const int buttonPin=2;const int ledPin=13;int buttonState=2;
void setup(){pinMode(ledPin, OUTPUT);pinMode(buttonPin, INPUT);}
void loop(){buttonState=digitalRead(buttonPin);
if(buttonState == HIGH){
delay(1000);
digitalWrite(ledPin,HIGH);
delay(100);
digitalWrite(ledPin,LOW);delay(200);
digitalWrite(ledPin,HIGH);
delay(100);
digitalWrite(ledPin,LOW);}}

Når du skriver her og du har din kode highlight - så tryk på "#"-ikonet ovenfor editboksen. Den sætter et [ code ] og [ / code ] par rundt om den, så den (a) kommer i en pæn kasse med scrollbar, og (b) ikke oversætter paranteser og lignende til smiley osv.

Da input editoren ikke kan lide lange mails (på min IE7), skriver jeg dem i notepad og cut-n-paster dem ind i input feltet. Ja, det betyder jeg selv må skrive de der kant-parantes tags. sån er livet :wink:

Hvis du vil bruge en resistor på switch indgang, så er det fint med mig :slight_smile: Men du kan spare det ved at buge den interne resistor som aktiveres ved at skrive til en port du har sat til input (modsigende, ja) og HIGH sætter en 20Kohm op mod +5V. Så kan kontakten trække pinen til GND.

Og så koden. Din tidligere fejl er et "}" for meget i linjen efter den som fejlmemdningen syår på. Det sker at man skal se på linjen før/efter en fejlmeldning. Jeg kunne bedre lide den end din meget korte nyere eksempel.

Glæder mig til billeder 8)

Tusen takk for tipsene.

Altså jeg setter at det normale er at inngangen er HIGH, og så drar jeg den bare rett ned til GND for å trigge den. Smart! Håper ikke jeg risikerer å ødelegge noe for det høres litt brutalt ut.

Jeg fikk ikke kjørt noen "Live test" i dag heller. Møtte på utfordringer med å klare å drive den kraftige magnetventilen. Se eget topic.

Og ja, det kommer flotte dråpebilder om ikke så lenge. Helt sikkert!

Nå har jeg fått ordnet en driverkrets som fungerer. Testet programmet mot magnetventilen og fikk lekt litt med å slippe to påfølgende dråper. For vanlig vann og med fallhøyde 27cm så virker det som en passende innstilling kan være 80ms mellom dråpene, samt at begge dråpene har en størrelse på 40(ms).

Måtte imidlertid trigge kamera og blits manuelt så jeg fikk vist ingen gode bilder, men jeg observerte flere splæsj, så dråpene funger. Dråpene var imidlertid ikke så forutsigbare og ensartet som jeg hadde håpet på, men det er muligens bare en justeringssak.

Da blir neste prosjekt å lage flere utgangskretser, samt implementere flere komponenter med i programmet.

Spændende.. glæder mig til at du får taget nogle gode billeder..

Sig til hvis du render ind i problemer...

Programmet og Arduinoen gjør jobben helt utmerket. Legger med noen bilder.

Bildet med 4 tilsynelatende like dråper er faktisk tatt av fire forskjellige dråper, dog med samme setting på timerne. Ganske forutsigbart resultat med andre ord. Veldig fornøyd!!

Rigtig fedt!

Er meget imponeret!

Keep it up!

Ditto !

Legger med noen flere bilder.

Men det er en ting som ikke fungerer helt som tenkt. Når jeg gjør endringer i programmet og overfører disse endringene til Arduino kortet, så går utgangen (pin13) høy i 0,5 sekund. Finnes det noen mulighet for å unngå det? Jeg ønsker ikke at ugangen skal gå høy før jeg har trigget inngangen (pin2).

"bootloaderen" - det er stykke program der ligger permament på din chip. Når der kommer strøm på din Artmel chip starter den altid dette program. Dette laver et-eller-andet for at spørge på USB porten om der er en komputer der vil overføre et nyt program. Hvis der ingen komputer svarer indenfor rimlig kort tid, så hopper det program videre til starten af dit program.

Bootloaderen er lidt forskellig fra chip til chip. Det er ikke noget Atmel har lavet, men Arduino folkene, og lagt ned på din ATmel chip (og hvordan det gøres kan vi snakke om en anden gang). Gennem årene har de forbedret denne bootloader og du kunne - hvis nødvendigt - skifte den. Hvis USB porten er helt fri har jeg lagt mærke til at mit program starter straks. Men hvis der er noget så går der en-to sekunder inden den opgiver.

Som en del af denne "snak med komputeren" blinker den med LEDen der er bygget ind på pin13. Det er i tilfælde af at noget ikke virker så kan man se at bootloaderen "har forsøgt".

Jeg tror, hvis du ikke har noget i USB porten (så skal du putte 5v på VIN pinden, eller mindst 7V på Power-stikket) så skulle bootloaderen ikke blinke... men det afhænger af hvilken bootloader du har på din.

Hermed er vi kommet til "the Excutive Summary" på dit spørgsmål: Nej.

Har et helt nytt Arduino UNO bord - 2011 modell. Vet ikke hva bootloaderen på den heter. Det er når jeg laster inn oppgradert sketch til Arduinoen at det blinker på portene. Altså ja, PC'en står tilkoplet på USB-porten. Har forsøkt å bytte fra pin13 til pin12, men det hjalp ikke. Skal forsøke å gi kortet litt power på power-porten for å se om det hjelper. Dersom ikke noe hjelper, så må jeg finne en annen måte å mate inn nye timerverdier til UNO'en (nye sketch er muligens ingen god løsning).