Gå til innhold

Den lille Arduino-tråden


Anbefalte innlegg

Flere som har problemer med USB type b pluggen på Arduino? Har en Duemilanove og en Mega fra samme årgang der pluggene på begge begynner å bli såpass slitt at jeg må holde pluggen sidelengs for i det heletatt få kontakt mellom datapinnene.

 

Blei en smule lei så jeg har midlertidig loddet på en usb kabel direkte på Duemilanoven til jeg finner en bedre løsning.

 

Ser for meg at en micro usb plugg med et breakout kort limt fast i arduinoen burde fungere fint.

Noe ala dette

post-187645-0-21454000-1408798356_thumb.jpg

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Hva er galt med denne koden?
Når jeg trykker inn 2 knapper samtidlig skal ledden begynne å blinke, men den blinker kontinuerlig når jeg holder inn begge knappene.

const int LED = 5;
const int knappEn = 8;
const int knappTo = 7;

void setup(){
pinMode(LED,OUTPUT);
pinMode(knappEn, INPUT);
pinMode(knappTo, INPUT);
}

void loop(){
  if(digitalRead(knappEn) == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappTo) == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappTo) && (knappEn) == HIGH) {
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    delay(500);
  } else {
    digitalWrite(LED, LOW);
  }
}

Mistenker at det er siste del av koden det er noe galt med, men jeg vet ikke helt hvilken annen måte jeg kan gjøre det på. Er helt ny med arduino btw.

Lenke til kommentar

Hva er galt med denne koden?

Når jeg trykker inn 2 knapper samtidlig skal ledden begynne å blinke, men den blinker kontinuerlig når jeg holder inn begge knappene.

const int LED = 5;
const int knappEn = 8;
const int knappTo = 7;

void setup(){
pinMode(LED,OUTPUT);
pinMode(knappEn, INPUT);
pinMode(knappTo, INPUT);
}

void loop(){
  if(digitalRead(knappEn) == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappTo) == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappTo) && (knappEn) == HIGH) {
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    delay(500);
  } else {
    digitalWrite(LED, LOW);
  }
}

Mistenker at det er siste del av koden det er noe galt med, men jeg vet ikke helt hvilken annen måte jeg kan gjøre det på. Er helt ny med arduino btw.

 

Jeg er ingen Arduino-ekspert, men jeg mener det er fordi den ikke kommer hit: if(digitalRead(knappTo) && (knappEn) == HIGH). Denne linja blir rett og slett aldri kjørt, fordi når du holder inne en (eller begge) så vil de andre to kjøres først.

 

Mulig du må rekonstruere litt. Hva med dette:

void loop(){
  if(digitalRead(knappTo) == HIGH && digitalRead(knappEn)) {
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    delay(500);
  } else {

    digitalWrite(LED, LOW);

    if(digitalRead(knappEn) == HIGH) {
       digitalWrite(LED, HIGH);
     }
     if(digitalRead(knappTo) == HIGH) {
       digitalWrite(LED, HIGH);
     }
   }
}

... har ikke satt meg skikkelig inn i koding for Arduino, og jeg har ingen editor her, så det er helt utestet. ;)

 

 

EDIT Boolsk algebra kan jeg enda mindre om for Arduino, men skal det ikke være digitalRead(knappTo) == HIGH && digitalRead(knappEn) == HIGH ?

Endret av Moskus
Lenke til kommentar

Takk for svar! Jeg fikk det til etterhvert, med litt prøving og feiling.
Slik ble koden til slutt

const int LED = 5;
const int knappEn = 7;
const int knappTo = 8;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(knappEn, INPUT);
  pinMode(knappTo, INPUT);
}

void loop() {
  if(digitalRead(knappEn) == HIGH) {
  digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappTo) == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  if(digitalRead(knappEn) == HIGH && digitalRead(knappTo) == HIGH) {
    blink();
  }
}
void blink(){
  digitalWrite(LED, HIGH);
  delay(500);
  digitalWrite(LED, LOW);
  delay(500);
}

Du hadde rett i at jeg hadde skrevet koden feil i && biten

Endret av pølselompe
Lenke til kommentar

Har jobbet litt med Arduino, men er helt grønn når det kommer til styring av servoer. Har bestilt meg en HDKJ S3090D for å leke litt. Trenger jeg et "servo shield" for å drive servoen eller kan jeg bare kople den rett på en Arduino?

 

Signalet kan du ta direkte fra arduinoen, men jeg ville ikke forsynt den rett fra +5V for selv de minste servoene kan dra en del mA når de "staller".

Lenke til kommentar

Hei!

Jeg sliter litt med overgang fra Leonardo-kort til DUE kort. Problemet er at de gir forskjellig output fra Serial.write() når jeg skal lese input fra kort til PC som en COM-enhet.

Jeg har forstått det slik at det er forskjell på kortenes analogReadResolution, men jeg får dem ikke til å oppføre seg likt. På Leonardo får jeg en output fra et potensiometer på mellom 0 og 65536. Mens dette ikke er leselig fra DUE med samme kode.

 

Noen som har vært borte i samme problem?

 

EDIT: Ser at problemet ligger i at jeg skriver ut highBytes og lowBytes av en 4-bits integer. På Leonardo er denne på 2-bytes, som vil fungere, mens det på DUE er 4-bytes. Hvordan kan jeg representere en 4-bytes som en 2-bytes?

 

EDIT2: Evt hvordan kan jeg få DUE til å lagre 16-bit int? http://arduino.cc/en/Reference/Int

Endret av Christian_
Lenke til kommentar

for positive verdier er det enkelt (dersom verdien er innenfor det som kan representeres med 2 bytes); bare ta vare på de to bytene som inneholder verdiene og dopp resten. Ofte kan man bruke bitshift for dette. (Husker ikke om Arduino plattformen er little eller big endian)

Lenke til kommentar

for positive verdier er det enkelt (dersom verdien er innenfor det som kan representeres med 2 bytes); bare ta vare på de to bytene som inneholder verdiene og dopp resten. Ofte kan man bruke bitshift for dette. (Husker ikke om Arduino plattformen er little eller big endian)

Jeg løste bytes-problemet enkelt og greit ved å bruke <stdint.h> og int16_t. Og etter litt knot med programming port og Native USB port så fikk jeg det til å fungere. SerialUSB.write var løsningen for at den skulle kommunisere slik som Leonardo ;)

Lenke til kommentar
  • 2 uker senere...
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...